diff --git a/Makefile b/Makefile
index 4ee649753..8f18b74a9 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,6 @@ include $(addprefix ./vendor/github.com/openshift/build-machinery-go/make/, \
golang.mk \
targets/openshift/deps.mk \
targets/openshift/images.mk \
- targets/openshift/bindata.mk \
lib/tmp.mk \
)
@@ -27,8 +26,6 @@ KUSTOMIZE_VERSION?=v3.5.4
KUSTOMIZE_ARCHIVE_NAME?=kustomize_$(KUSTOMIZE_VERSION)_$(GOHOSTOS)_$(GOHOSTARCH).tar.gz
kustomize_dir:=$(dir $(KUSTOMIZE))
-$(call add-bindata,e2e,./deploy/spoke/...,bindata,bindata,./test/e2e/bindata/bindata.go)
-
# This will call a macro called "build-image" which will generate image specific targets based on the parameters:
# $0 - macro name
# $1 - target suffix
diff --git a/deploy/fs.go b/deploy/fs.go
new file mode 100644
index 000000000..1fe10353d
--- /dev/null
+++ b/deploy/fs.go
@@ -0,0 +1,6 @@
+package deploy
+
+import "embed"
+
+//go:embed spoke
+var SpokeManifestFiles embed.FS
diff --git a/go.mod b/go.mod
index f431d1c9e..dddad7b3c 100644
--- a/go.mod
+++ b/go.mod
@@ -4,7 +4,6 @@ go 1.16
require (
github.com/davecgh/go-spew v1.1.1
- github.com/go-bindata/go-bindata v3.1.2+incompatible
github.com/onsi/ginkgo v1.16.4
github.com/onsi/gomega v1.14.0
github.com/openshift/build-machinery-go v0.0.0-20210806203541-4ea9b6da3a37
diff --git a/go.sum b/go.sum
index c4d7a5e5e..7794f15fd 100644
--- a/go.sum
+++ b/go.sum
@@ -179,7 +179,6 @@ github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
-github.com/go-bindata/go-bindata v3.1.2+incompatible h1:5vjJMVhowQdPzjE1LdxyFF7YFTXg5IgGVW4gBr5IbvE=
github.com/go-bindata/go-bindata v3.1.2+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
diff --git a/pkg/dependencymagnet/doc.go b/pkg/dependencymagnet/doc.go
index 598c4dcae..216fce8ac 100644
--- a/pkg/dependencymagnet/doc.go
+++ b/pkg/dependencymagnet/doc.go
@@ -5,6 +5,5 @@
package dependencymagnet
import (
- _ "github.com/go-bindata/go-bindata/go-bindata"
_ "github.com/openshift/build-machinery-go"
)
diff --git a/pkg/helper/helpers.go b/pkg/helper/helpers.go
index 0409dcee8..e2752087c 100644
--- a/pkg/helper/helpers.go
+++ b/pkg/helper/helpers.go
@@ -202,6 +202,11 @@ func DeleteAppliedResources(
ownerCopy := owner.DeepCopy()
ownerCopy.UID = types.UID(fmt.Sprintf("%s-", owner.UID))
+ // We hard coded the delete policy to Background
+ // TODO: reivist if user needs to set other options. Setting to Orphan may not make sense, since when
+ // the manifestwork is removed, there is no way to track the orphaned resource any more.
+ deletePolicy := metav1.DeletePropagationBackground
+
for _, resource := range resources {
gvr := schema.GroupVersionResource{Group: resource.Group, Version: resource.Version, Resource: resource.Resource}
u, err := dynamicClient.
@@ -267,6 +272,7 @@ func DeleteAppliedResources(
Preconditions: &metav1.Preconditions{
UID: &uid,
},
+ PropagationPolicy: &deletePolicy,
})
if errors.IsNotFound(err) {
continue
diff --git a/test/e2e/bindata/bindata.go b/test/e2e/bindata/bindata.go
deleted file mode 100644
index 5ed6f83d0..000000000
--- a/test/e2e/bindata/bindata.go
+++ /dev/null
@@ -1,601 +0,0 @@
-// Code generated for package bindata by go-bindata DO NOT EDIT. (@generated)
-// sources:
-// deploy/spoke/appliedmanifestworks.crd.yaml
-// deploy/spoke/clusterrole.yaml
-// deploy/spoke/clusterrole_binding.yaml
-// deploy/spoke/clusterrole_binding_addition.yaml
-// deploy/spoke/component_namespace.yaml
-// deploy/spoke/deployment.yaml
-// deploy/spoke/kustomization.yaml
-// deploy/spoke/service_account.yaml
-package bindata
-
-import (
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "time"
-)
-
-type asset struct {
- bytes []byte
- info os.FileInfo
-}
-
-type bindataFileInfo struct {
- name string
- size int64
- mode os.FileMode
- modTime time.Time
-}
-
-// Name return file name
-func (fi bindataFileInfo) Name() string {
- return fi.name
-}
-
-// Size return file size
-func (fi bindataFileInfo) Size() int64 {
- return fi.size
-}
-
-// Mode return file mode
-func (fi bindataFileInfo) Mode() os.FileMode {
- return fi.mode
-}
-
-// Mode return file modify time
-func (fi bindataFileInfo) ModTime() time.Time {
- return fi.modTime
-}
-
-// IsDir return file whether a directory
-func (fi bindataFileInfo) IsDir() bool {
- return fi.mode&os.ModeDir != 0
-}
-
-// Sys return file is sys mode
-func (fi bindataFileInfo) Sys() interface{} {
- return nil
-}
-
-var _deploySpokeAppliedmanifestworksCrdYaml = []byte(`apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: appliedmanifestworks.work.open-cluster-management.io
-spec:
- group: work.open-cluster-management.io
- names:
- kind: AppliedManifestWork
- listKind: AppliedManifestWorkList
- plural: appliedmanifestworks
- singular: appliedmanifestwork
- scope: Cluster
- preserveUnknownFields: false
- versions:
- - name: v1
- schema:
- openAPIV3Schema:
- description: AppliedManifestWork represents an applied manifestwork on managed
- cluster that is placed on a managed cluster. An AppliedManifestWork links
- to a manifestwork on a hub recording resources deployed in the managed cluster.
- When the agent is removed from managed cluster, cluster-admin on managed
- cluster can delete appliedmanifestwork to remove resources deployed by the
- agent. The name of the appliedmanifestwork must be in the format of {hash
- of hub's first kube-apiserver url}-{manifestwork name}
- type: object
- properties:
- apiVersion:
- description: 'APIVersion defines the versioned schema of this representation
- of an object. Servers should convert recognized schemas to the latest
- internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
- type: string
- kind:
- description: 'Kind is a string value representing the REST resource this
- object represents. Servers may infer this from the endpoint the client
- submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: Spec represents the desired configuration of AppliedManifestWork.
- type: object
- properties:
- hubHash:
- description: HubHash represents the hash of the first hub kube apiserver
- to identify which hub this AppliedManifestWork links to.
- type: string
- manifestWorkName:
- description: ManifestWorkName represents the name of the related manifestwork
- on the hub.
- type: string
- status:
- description: Status represents the current status of AppliedManifestWork.
- type: object
- properties:
- appliedResources:
- description: AppliedResources represents a list of resources defined
- within the manifestwork that are applied. Only resources with valid
- GroupVersionResource, namespace, and name are suitable. An item
- in this slice is deleted when there is no mapped manifest in manifestwork.Spec
- or by finalizer. The resource relating to the item will also be
- removed from managed cluster. The deleted resource may still be
- present until the finalizers for that resource are finished. However,
- the resource will not be undeleted, so it can be removed from this
- list and eventual consistency is preserved.
- type: array
- items:
- description: AppliedManifestResourceMeta represents the group, version,
- resource, name and namespace of a resource. Since these resources
- have been created, they must have valid group, version, resource,
- namespace, and name.
- type: object
- properties:
- group:
- description: Group is the API Group of the Kubernetes resource.
- type: string
- name:
- description: Name is the name of the Kubernetes resource.
- type: string
- namespace:
- description: Name is the namespace of the Kubernetes resource,
- empty string indicates it is a cluster scoped resource.
- type: string
- resource:
- description: Resource is the resource name of the Kubernetes
- resource.
- type: string
- uid:
- description: UID is set on successful deletion of the Kubernetes
- resource by controller. The resource might be still visible
- on the managed cluster after this field is set. It is not
- directly settable by a client.
- type: string
- version:
- description: Version is the version of the Kubernetes resource.
- type: string
- served: true
- storage: true
- subresources:
- status: {}
-status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
-`)
-
-func deploySpokeAppliedmanifestworksCrdYamlBytes() ([]byte, error) {
- return _deploySpokeAppliedmanifestworksCrdYaml, nil
-}
-
-func deploySpokeAppliedmanifestworksCrdYaml() (*asset, error) {
- bytes, err := deploySpokeAppliedmanifestworksCrdYamlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "deploy/spoke/appliedmanifestworks.crd.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _deploySpokeClusterroleYaml = []byte(`# Clusterrole for work agent in addition to admin clusterrole.
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: open-cluster-management:work:agent
-rules:
-# Allow agent to get/list/watch/create/delete crds.
-- apiGroups: ["apiextensions.k8s.io"]
- resources: ["customresourcedefinitions"]
- verbs: ["get", "list", "watch", "create", "delete", "update"]
-# Allow agent to create/delete namespaces, get/list are contained in admin role already
-- apiGroups: [""]
- resources: ["namespaces"]
- verbs: ["create", "delete", "update"]
-# Allow agent to manage role/rolebinding/clusterrole/clusterrolebinding
-- apiGroups: ["rbac.authorization.k8s.io"]
- resources: ["clusterrolebindings", "rolebindings"]
- verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
-- apiGroups: ["rbac.authorization.k8s.io"]
- resources: ["clusterroles", "roles"]
- verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "escalate", "bind"]
-# Allow agent to create sar
-- apiGroups: ["authorization.k8s.io"]
- resources: ["subjectaccessreviews"]
- verbs: ["create"]
-# Allow agent to create events
-- apiGroups: ["", "events.k8s.io"]
- resources: ["events"]
- verbs: ["get", "list", "watch", "create", "patch", "update"]
-# Allow agent to managed appliedmanifestworks
-- apiGroups: ["work.open-cluster-management.io"]
- resources: ["appliedmanifestworks"]
- verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
-- apiGroups: ["work.open-cluster-management.io"]
- resources: ["appliedmanifestworks/status"]
- verbs: ["patch", "update"]
-- apiGroups: ["work.open-cluster-management.io"]
- resources: ["appliedmanifestworks/finalizers"]
- verbs: ["update"]
- `)
-
-func deploySpokeClusterroleYamlBytes() ([]byte, error) {
- return _deploySpokeClusterroleYaml, nil
-}
-
-func deploySpokeClusterroleYaml() (*asset, error) {
- bytes, err := deploySpokeClusterroleYamlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "deploy/spoke/clusterrole.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _deploySpokeClusterrole_bindingYaml = []byte(`apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: open-cluster-management:work:agent
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- # We deploy a controller that could work with permission lower than cluster-admin, the tradeoff is
- # responsivity because list/watch cannot be maintained over too many namespaces.
- name: admin
-subjects:
- - kind: ServiceAccount
- name: work-agent-sa
- namespace: open-cluster-management-agent
-`)
-
-func deploySpokeClusterrole_bindingYamlBytes() ([]byte, error) {
- return _deploySpokeClusterrole_bindingYaml, nil
-}
-
-func deploySpokeClusterrole_bindingYaml() (*asset, error) {
- bytes, err := deploySpokeClusterrole_bindingYamlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "deploy/spoke/clusterrole_binding.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _deploySpokeClusterrole_binding_additionYaml = []byte(`apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: open-cluster-management:work:agent-addition
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: open-cluster-management:work:agent
-subjects:
- - kind: ServiceAccount
- name: work-agent-sa
- namespace: open-cluster-management-agent
-`)
-
-func deploySpokeClusterrole_binding_additionYamlBytes() ([]byte, error) {
- return _deploySpokeClusterrole_binding_additionYaml, nil
-}
-
-func deploySpokeClusterrole_binding_additionYaml() (*asset, error) {
- bytes, err := deploySpokeClusterrole_binding_additionYamlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "deploy/spoke/clusterrole_binding_addition.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _deploySpokeComponent_namespaceYaml = []byte(`apiVersion: v1
-kind: Namespace
-metadata:
- name: open-cluster-management-agent
-`)
-
-func deploySpokeComponent_namespaceYamlBytes() ([]byte, error) {
- return _deploySpokeComponent_namespaceYaml, nil
-}
-
-func deploySpokeComponent_namespaceYaml() (*asset, error) {
- bytes, err := deploySpokeComponent_namespaceYamlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "deploy/spoke/component_namespace.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _deploySpokeDeploymentYaml = []byte(`kind: Deployment
-apiVersion: apps/v1
-metadata:
- name: work-agent
- labels:
- app: work-agent
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: work-agent
- template:
- metadata:
- labels:
- app: work-agent
- spec:
- serviceAccountName: work-agent-sa
- containers:
- - name: work-agent
- image: quay.io/open-cluster-management/work:latest
- imagePullPolicy: IfNotPresent
- args:
- - "/work"
- - "agent"
- - "--spoke-cluster-name=cluster1"
- - "--hub-kubeconfig=/spoke/hub-kubeconfig/kubeconfig"
- securityContext:
- allowPrivilegeEscalation: false
- capabilities:
- drop:
- - ALL
- privileged: false
- runAsNonRoot: true
- volumeMounts:
- - name: hub-kubeconfig-secret
- mountPath: "/spoke/hub-kubeconfig"
- readOnly: true
- volumes:
- - name: hub-kubeconfig-secret
- secret:
- secretName: hub-kubeconfig-secret
-`)
-
-func deploySpokeDeploymentYamlBytes() ([]byte, error) {
- return _deploySpokeDeploymentYaml, nil
-}
-
-func deploySpokeDeploymentYaml() (*asset, error) {
- bytes, err := deploySpokeDeploymentYamlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "deploy/spoke/deployment.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _deploySpokeKustomizationYaml = []byte(`
-# Adds namespace to all resources.
-namespace: open-cluster-management-agent
-
-resources:
-- ./appliedmanifestworks.crd.yaml
-- ./component_namespace.yaml
-- ./service_account.yaml
-- ./clusterrole.yaml
-- ./clusterrole_binding.yaml
-- ./clusterrole_binding_addition.yaml
-- ./deployment.yaml
-
-images:
-- name: quay.io/open-cluster-management/work:latest
- newName: quay.io/open-cluster-management/work
- newTag: latest
-apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-`)
-
-func deploySpokeKustomizationYamlBytes() ([]byte, error) {
- return _deploySpokeKustomizationYaml, nil
-}
-
-func deploySpokeKustomizationYaml() (*asset, error) {
- bytes, err := deploySpokeKustomizationYamlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "deploy/spoke/kustomization.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _deploySpokeService_accountYaml = []byte(`apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: work-agent-sa
- namespace: open-cluster-management-agent
-`)
-
-func deploySpokeService_accountYamlBytes() ([]byte, error) {
- return _deploySpokeService_accountYaml, nil
-}
-
-func deploySpokeService_accountYaml() (*asset, error) {
- bytes, err := deploySpokeService_accountYamlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "deploy/spoke/service_account.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-// Asset loads and returns the asset for the given name.
-// It returns an error if the asset could not be found or
-// could not be loaded.
-func Asset(name string) ([]byte, error) {
- cannonicalName := strings.Replace(name, "\\", "/", -1)
- if f, ok := _bindata[cannonicalName]; ok {
- a, err := f()
- if err != nil {
- return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
- }
- return a.bytes, nil
- }
- return nil, fmt.Errorf("Asset %s not found", name)
-}
-
-// MustAsset is like Asset but panics when Asset would return an error.
-// It simplifies safe initialization of global variables.
-func MustAsset(name string) []byte {
- a, err := Asset(name)
- if err != nil {
- panic("asset: Asset(" + name + "): " + err.Error())
- }
-
- return a
-}
-
-// AssetInfo loads and returns the asset info for the given name.
-// It returns an error if the asset could not be found or
-// could not be loaded.
-func AssetInfo(name string) (os.FileInfo, error) {
- cannonicalName := strings.Replace(name, "\\", "/", -1)
- if f, ok := _bindata[cannonicalName]; ok {
- a, err := f()
- if err != nil {
- return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
- }
- return a.info, nil
- }
- return nil, fmt.Errorf("AssetInfo %s not found", name)
-}
-
-// AssetNames returns the names of the assets.
-func AssetNames() []string {
- names := make([]string, 0, len(_bindata))
- for name := range _bindata {
- names = append(names, name)
- }
- return names
-}
-
-// _bindata is a table, holding each asset generator, mapped to its name.
-var _bindata = map[string]func() (*asset, error){
- "deploy/spoke/appliedmanifestworks.crd.yaml": deploySpokeAppliedmanifestworksCrdYaml,
- "deploy/spoke/clusterrole.yaml": deploySpokeClusterroleYaml,
- "deploy/spoke/clusterrole_binding.yaml": deploySpokeClusterrole_bindingYaml,
- "deploy/spoke/clusterrole_binding_addition.yaml": deploySpokeClusterrole_binding_additionYaml,
- "deploy/spoke/component_namespace.yaml": deploySpokeComponent_namespaceYaml,
- "deploy/spoke/deployment.yaml": deploySpokeDeploymentYaml,
- "deploy/spoke/kustomization.yaml": deploySpokeKustomizationYaml,
- "deploy/spoke/service_account.yaml": deploySpokeService_accountYaml,
-}
-
-// AssetDir returns the file names below a certain
-// directory embedded in the file by go-bindata.
-// For example if you run go-bindata on data/... and data contains the
-// following hierarchy:
-// data/
-// foo.txt
-// img/
-// a.png
-// b.png
-// then AssetDir("data") would return []string{"foo.txt", "img"}
-// AssetDir("data/img") would return []string{"a.png", "b.png"}
-// AssetDir("foo.txt") and AssetDir("notexist") would return an error
-// AssetDir("") will return []string{"data"}.
-func AssetDir(name string) ([]string, error) {
- node := _bintree
- if len(name) != 0 {
- cannonicalName := strings.Replace(name, "\\", "/", -1)
- pathList := strings.Split(cannonicalName, "/")
- for _, p := range pathList {
- node = node.Children[p]
- if node == nil {
- return nil, fmt.Errorf("Asset %s not found", name)
- }
- }
- }
- if node.Func != nil {
- return nil, fmt.Errorf("Asset %s not found", name)
- }
- rv := make([]string, 0, len(node.Children))
- for childName := range node.Children {
- rv = append(rv, childName)
- }
- return rv, nil
-}
-
-type bintree struct {
- Func func() (*asset, error)
- Children map[string]*bintree
-}
-
-var _bintree = &bintree{nil, map[string]*bintree{
- "deploy": {nil, map[string]*bintree{
- "spoke": {nil, map[string]*bintree{
- "appliedmanifestworks.crd.yaml": {deploySpokeAppliedmanifestworksCrdYaml, map[string]*bintree{}},
- "clusterrole.yaml": {deploySpokeClusterroleYaml, map[string]*bintree{}},
- "clusterrole_binding.yaml": {deploySpokeClusterrole_bindingYaml, map[string]*bintree{}},
- "clusterrole_binding_addition.yaml": {deploySpokeClusterrole_binding_additionYaml, map[string]*bintree{}},
- "component_namespace.yaml": {deploySpokeComponent_namespaceYaml, map[string]*bintree{}},
- "deployment.yaml": {deploySpokeDeploymentYaml, map[string]*bintree{}},
- "kustomization.yaml": {deploySpokeKustomizationYaml, map[string]*bintree{}},
- "service_account.yaml": {deploySpokeService_accountYaml, map[string]*bintree{}},
- }},
- }},
-}}
-
-// RestoreAsset restores an asset under the given directory
-func RestoreAsset(dir, name string) error {
- data, err := Asset(name)
- if err != nil {
- return err
- }
- info, err := AssetInfo(name)
- if err != nil {
- return err
- }
- err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
- if err != nil {
- return err
- }
- err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
- if err != nil {
- return err
- }
- err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
- if err != nil {
- return err
- }
- return nil
-}
-
-// RestoreAssets restores an asset under the given directory recursively
-func RestoreAssets(dir, name string) error {
- children, err := AssetDir(name)
- // File
- if err != nil {
- return RestoreAsset(dir, name)
- }
- // Dir
- for _, child := range children {
- err = RestoreAssets(dir, filepath.Join(name, child))
- if err != nil {
- return err
- }
- }
- return nil
-}
-
-func _filePath(dir, name string) string {
- cannonicalName := strings.Replace(name, "\\", "/", -1)
- return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
-}
diff --git a/test/e2e/deployer.go b/test/e2e/deployer.go
index 7d2c55e42..2e4994f7a 100644
--- a/test/e2e/deployer.go
+++ b/test/e2e/deployer.go
@@ -5,7 +5,6 @@ import (
"context"
"fmt"
"io/ioutil"
- "path/filepath"
"reflect"
"time"
@@ -29,19 +28,19 @@ import (
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
workclientset "open-cluster-management.io/api/client/work/clientset/versioned"
- "open-cluster-management.io/work/test/e2e/bindata"
+ "open-cluster-management.io/work/deploy"
)
var (
staticResourceFiles = []string{
- "deploy/spoke/appliedmanifestworks.crd.yaml",
- "deploy/spoke/clusterrole.yaml",
- "deploy/spoke/component_namespace.yaml",
- "deploy/spoke/service_account.yaml",
- "deploy/spoke/clusterrole_binding.yaml",
- "deploy/spoke/clusterrole_binding_addition.yaml",
+ "spoke/appliedmanifestworks.crd.yaml",
+ "spoke/clusterrole.yaml",
+ "spoke/component_namespace.yaml",
+ "spoke/service_account.yaml",
+ "spoke/clusterrole_binding.yaml",
+ "spoke/clusterrole_binding_addition.yaml",
}
- deploymentFile = "deploy/spoke/deployment.yaml"
+ deploymentFile = "spoke/deployment.yaml"
hubKubeconfigSecret = "hub-kubeconfig-secret"
defaultComponentNamespace = "open-cluster-management-agent"
)
@@ -92,7 +91,7 @@ func (d *defaultWorkAgentDeployer) Deploy() error {
clientHolder,
events.NewInMemoryRecorder(""),
func(name string) ([]byte, error) {
- return bindata.MustAsset(filepath.Join("", name)), nil
+ return deploy.SpokeManifestFiles.ReadFile(name)
},
staticResourceFiles...,
)
@@ -239,7 +238,11 @@ func (d *defaultWorkAgentDeployer) getHubKubeconfigSecretData() (map[string][]by
func assetToUnstructured(name string) (*unstructured.Unstructured, error) {
yamlDecoder := yaml.NewDecodingSerializer(unstructured.UnstructuredJSONScheme)
- raw := bindata.MustAsset(name)
+ raw, err := deploy.SpokeManifestFiles.ReadFile(name)
+ if err != nil {
+ return nil, err
+ }
+
reader := json.YAMLFramer.NewFrameReader(ioutil.NopCloser(bytes.NewReader(raw)))
d := streaming.NewDecoder(reader, yamlDecoder)
obj, _, err := d.Decode(nil, nil)
diff --git a/test/e2e/work_agent_test.go b/test/e2e/work_agent_test.go
index 50f1ff357..6ccc6b0f0 100644
--- a/test/e2e/work_agent_test.go
+++ b/test/e2e/work_agent_test.go
@@ -10,6 +10,7 @@ import (
"github.com/onsi/ginkgo"
"github.com/onsi/gomega"
+ batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
rbacv1 "k8s.io/api/rbac/v1"
"k8s.io/apimachinery/pkg/api/errors"
@@ -146,15 +147,6 @@ var _ = ginkgo.Describe("Work agent", func() {
var err error
ginkgo.BeforeEach(func() {
- ns1 = fmt.Sprintf("ns1-%s", nameSuffix)
- ns2 = fmt.Sprintf("ns2-%s", nameSuffix)
-
- // create ns2
- ns := &corev1.Namespace{}
- ns.Name = ns2
- _, err = spokeKubeClient.CoreV1().Namespaces().Create(context.Background(), ns, metav1.CreateOptions{})
- gomega.Expect(err).ToNot(gomega.HaveOccurred())
-
// make sure the api service v1.admission.cluster.open-cluster-management.io is available
gomega.Eventually(func() bool {
apiService, err := hubAPIServiceClient.APIServices().Get(context.TODO(), apiserviceName, metav1.GetOptions{})
@@ -169,14 +161,17 @@ var _ = ginkgo.Describe("Work agent", func() {
}, 60*time.Second, 1*time.Second).Should(gomega.BeTrue())
})
- ginkgo.AfterEach(func() {
- // delete ns2
- err = spokeKubeClient.CoreV1().Namespaces().Delete(context.Background(), ns2, metav1.DeleteOptions{})
- gomega.Expect(err).ToNot(gomega.HaveOccurred())
- })
-
ginkgo.It("Should create, update and delete manifestwork successfully", func() {
ginkgo.By("create manifestwork")
+ ns1 = fmt.Sprintf("ns1-%s", nameSuffix)
+ ns2 = fmt.Sprintf("ns2-%s", nameSuffix)
+
+ // create ns2
+ ns := &corev1.Namespace{}
+ ns.Name = ns2
+ _, err = spokeKubeClient.CoreV1().Namespaces().Create(context.Background(), ns, metav1.CreateOptions{})
+ gomega.Expect(err).ToNot(gomega.HaveOccurred())
+
cmFinalizers := []string{"cluster.open-cluster-management.io/testing"}
objects := []runtime.Object{
newConfigmap(ns1, "cm1", nil, nil),
@@ -230,8 +225,8 @@ var _ = ginkgo.Describe("Work agent", func() {
}
// check work status condition
- return meta.IsStatusConditionPresentAndEqual(work.Status.Conditions, workapiv1.WorkApplied, metav1.ConditionTrue) &&
- meta.IsStatusConditionPresentAndEqual(work.Status.Conditions, workapiv1.WorkAvailable, metav1.ConditionTrue)
+ return meta.IsStatusConditionTrue(work.Status.Conditions, workapiv1.WorkApplied) &&
+ meta.IsStatusConditionTrue(work.Status.Conditions, workapiv1.WorkAvailable)
}, eventuallyTimeout, eventuallyInterval).Should(gomega.BeTrue())
// get the corresponding AppliedManifestWork
@@ -378,6 +373,65 @@ var _ = ginkgo.Describe("Work agent", func() {
_, err = spokeKubeClient.CoreV1().ConfigMaps(ns2).Get(context.Background(), "cm3", metav1.GetOptions{})
gomega.Expect(errors.IsNotFound(err)).To(gomega.BeTrue())
+
+ err = spokeKubeClient.CoreV1().Namespaces().Delete(context.Background(), ns2, metav1.DeleteOptions{})
+ gomega.Expect(err).ToNot(gomega.HaveOccurred())
+ })
+
+ ginkgo.It("Should create, delete job in manifestwork successfully", func() {
+ ginkgo.By("create manifestwork")
+ objects := []runtime.Object{
+ newJob("job1"),
+ }
+ work := newManifestWork(clusterName, fmt.Sprintf("wjob2-%s", nameSuffix), objects...)
+ work, err = hubWorkClient.WorkV1().ManifestWorks(clusterName).Create(context.Background(), work, metav1.CreateOptions{})
+ gomega.Expect(err).ToNot(gomega.HaveOccurred())
+
+ // check status conditions in manifestwork status
+ gomega.Eventually(func() bool {
+ work, err = hubWorkClient.WorkV1().ManifestWorks(work.Namespace).Get(context.Background(), work.Name, metav1.GetOptions{})
+ if err != nil {
+ return false
+ }
+
+ fmt.Printf("work status %v", work.Status.ResourceStatus)
+
+ // check work status condition
+ return meta.IsStatusConditionTrue(work.Status.Conditions, workapiv1.WorkApplied) &&
+ meta.IsStatusConditionTrue(work.Status.Conditions, workapiv1.WorkAvailable)
+ }, eventuallyTimeout, eventuallyInterval).Should(gomega.BeTrue())
+
+ // Ensure pod is created
+ gomega.Eventually(func() bool {
+ pods, err := spokeKubeClient.CoreV1().Pods("default").List(context.Background(), metav1.ListOptions{})
+ if err != nil {
+ return false
+ }
+
+ if len(pods.Items) == 0 {
+ return false
+ }
+
+ return true
+ }, eventuallyTimeout, eventuallyInterval).Should(gomega.BeTrue())
+
+ ginkgo.By("delete manifestwork")
+ err = hubWorkClient.WorkV1().ManifestWorks(work.Namespace).Delete(context.Background(), work.Name, metav1.DeleteOptions{})
+ gomega.Expect(err).ToNot(gomega.HaveOccurred())
+
+ // pods should be all cleaned.
+ gomega.Eventually(func() bool {
+ pods, err := spokeKubeClient.CoreV1().Pods("default").List(context.Background(), metav1.ListOptions{})
+ if err != nil {
+ return false
+ }
+
+ if len(pods.Items) > 0 {
+ return false
+ }
+
+ return true
+ }, eventuallyTimeout, eventuallyInterval).Should(gomega.BeTrue())
})
})
@@ -441,8 +495,8 @@ var _ = ginkgo.Describe("Work agent", func() {
}
// check work status condition
- return meta.IsStatusConditionPresentAndEqual(work.Status.Conditions, workapiv1.WorkApplied, metav1.ConditionTrue) &&
- meta.IsStatusConditionPresentAndEqual(work.Status.Conditions, workapiv1.WorkAvailable, metav1.ConditionTrue)
+ return meta.IsStatusConditionTrue(work.Status.Conditions, workapiv1.WorkApplied) &&
+ meta.IsStatusConditionTrue(work.Status.Conditions, workapiv1.WorkAvailable)
}, eventuallyTimeout, eventuallyInterval).Should(gomega.BeTrue())
// Upgrade crd/cr and check if cr resource is recreated.
@@ -541,6 +595,43 @@ func newConfigmap(namespace, name string, data map[string]string, finalizers []s
return cm
}
+func newJob(name string) *batchv1.Job {
+ maunualSelector := true
+ job := &batchv1.Job{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "Job",
+ APIVersion: "batch/v1",
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: "default",
+ Name: name,
+ },
+ Spec: batchv1.JobSpec{
+ Selector: &metav1.LabelSelector{
+ MatchLabels: map[string]string{"job": name},
+ },
+ ManualSelector: &maunualSelector,
+ Template: corev1.PodTemplateSpec{
+ ObjectMeta: metav1.ObjectMeta{
+ Labels: map[string]string{"job": name},
+ },
+ Spec: corev1.PodSpec{
+ Containers: []corev1.Container{
+ {
+ Name: "pi",
+ Image: "perl",
+ Command: []string{"perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"},
+ },
+ },
+ RestartPolicy: corev1.RestartPolicyNever,
+ },
+ },
+ },
+ }
+
+ return job
+}
+
func newSecretBySize(namespace, name string, size int32) *corev1.Secret {
data := ""
for i := int32(0); i < size; i++ {
diff --git a/vendor/github.com/go-bindata/go-bindata/.gitignore b/vendor/github.com/go-bindata/go-bindata/.gitignore
deleted file mode 100644
index b9abe353d..000000000
--- a/vendor/github.com/go-bindata/go-bindata/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# Binaries for programs and plugins
-*.exe
-*.exe~
-*.dll
-*.so
-*.dylib
-
-# Test binary, build with `go test -c`
-*.test
-
-# Output of the go coverage tool, specifically when used with LiteIDE
-*.out
-
-# Goland project files
-.idea/
-*.iml
diff --git a/vendor/github.com/go-bindata/go-bindata/CONTRIBUTING.md b/vendor/github.com/go-bindata/go-bindata/CONTRIBUTING.md
deleted file mode 100644
index e0732f54e..000000000
--- a/vendor/github.com/go-bindata/go-bindata/CONTRIBUTING.md
+++ /dev/null
@@ -1,79 +0,0 @@
-## Contribution guidelines.
-
-So you wish to contribute to this project? Fantastic!
-Here are a few guidelines to help you do this in a
-streamlined fashion.
-
-
-## Bug reports
-
-When supplying a bug report, please consider the following guidelines.
-These serve to make it easier for us to address the issue and find a solution.
-Most of these are pretty self-evident, but sometimes it is still necessary
-to reiterate them.
-
-* Be clear in the way you express the problem. Use simple language and
- just enough of it to clearly define the issue. Not everyone is a native
- English speaker. And while most can handle themselves pretty well,
- it helps to stay away from more esoteric vocabulary.
-
- Be patient with non-native English speakers. If their bug reports
- or comments are hard to understand, just ask for clarification.
- Do not start guessing at their meaning, as this may just lead to
- more confusion and misunderstandings.
-* Clearly define any information which is relevant to the problem.
- This includes library versions, operating system and any other
- external dependencies which may be needed.
-* Where applicable, provide a step-by-step listing of the way to
- reproduce the problem. Make sure this is the simplest possible
- way to do so. Omit any and all unneccesary steps, because they may
- just complicate our understanding of the real problem.
- If need be, create a whole new code project on your local machine,
- which specifically tries to create the problem you are running into;
- nothing more, nothing less.
-
- Include this program in the bug report. It often suffices to paste
- the code in a [Gist](https://gist.github.com) or on the
- [Go playground](http://play.golang.org).
-* If possible, provide us with a listing of the steps you have already
- undertaken to solve the problem. This can save us a great deal of
- wasted time, trying out solutions you have already covered.
-
-
-## Pull requests
-
-Bug reports are great. Supplying fixes to bugs is even better.
-When submitting a pull request, the following guidelines are
-good to keep in mind:
-
-* `go fmt`: **Always** run your code through `go fmt`, before
- committing it. Code has to be readable by many different
- people. And the only way this will be as painless as possible,
- is if we all stick to the same code style.
-
- Some of our projects may have automated build-servers hooked up
- to commit hooks. These will vet any submitted code and determine
- if it meets a set of properties. One of which is code formatting.
- These servers will outright deny a submission which has not been
- run through `go fmt`, even if the code itself is correct.
-
- We try to maintain a zero-tolerance policy on this matter,
- because consistently formatted code makes life a great deal
- easier for everyone involved.
-* Commit log messages: When committing changes, do so often and
- clearly -- Even if you have changed only 1 character in a code
- comment. This means that commit log messages should clearly state
- exactly what the change does and why. If it fixes a known issue,
- then mention the issue number in the commit log. E.g.:
-
- > Fixes return value for `foo/boo.Baz()` to be consistent with
- > the rest of the API. This addresses issue #32
-
- Do not pile a lot of unrelated changes into a single commit.
- Pick and choose only those changes for a single commit, which are
- directly related. We would much rather see a hundred commits
- saying nothing but `"Runs go fmt"` in between any real fixes
- than have these style changes embedded in those real fixes.
- It creates a lot of noise when trying to review code.
-
-
diff --git a/vendor/github.com/go-bindata/go-bindata/LICENSE b/vendor/github.com/go-bindata/go-bindata/LICENSE
deleted file mode 100644
index c07a9311f..000000000
--- a/vendor/github.com/go-bindata/go-bindata/LICENSE
+++ /dev/null
@@ -1,3 +0,0 @@
-This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-license. Its contents can be found at:
-http://creativecommons.org/publicdomain/zero/1.0
diff --git a/vendor/github.com/go-bindata/go-bindata/Makefile b/vendor/github.com/go-bindata/go-bindata/Makefile
deleted file mode 100644
index 84b661cb2..000000000
--- a/vendor/github.com/go-bindata/go-bindata/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-all:
- make -C testdata
diff --git a/vendor/github.com/go-bindata/go-bindata/README.md b/vendor/github.com/go-bindata/go-bindata/README.md
deleted file mode 100644
index 155350532..000000000
--- a/vendor/github.com/go-bindata/go-bindata/README.md
+++ /dev/null
@@ -1,199 +0,0 @@
-## bindata
-
-[](https://goreportcard.com/report/github.com/go-bindata/bindata)
-
-This package converts any file into managable Go source code. Useful for
-embedding binary data into a go program. The file data is optionally gzip
-compressed before being converted to a raw byte slice.
-
-It comes with a command line tool in the `go-bindata` sub directory.
-This tool offers a set of command line options, used to customize the
-output being generated.
-
-
-### Installation
-
-To install the library and command line program, use the following:
-
- go get -u github.com/go-bindata/go-bindata/...
-
-
-### Usage
-
-Conversion is done on one or more sets of files. They are all embedded in a new
-Go source file, along with a table of contents and an `Asset` function,
-which allows quick access to the asset, based on its name.
-
-The simplest invocation generates a `bindata.go` file in the current
-working directory. It includes all assets from the `data` directory.
-
- $ go-bindata data/
-
-To include all input sub-directories recursively, use the elipsis postfix
-as defined for Go import paths. Otherwise it will only consider assets in the
-input directory itself.
-
- $ go-bindata data/...
-
-To specify the name of the output file being generated, we use the following:
-
- $ go-bindata -o myfile.go data/
-
-Multiple input directories can be specified if necessary.
-
- $ go-bindata dir1/... /path/to/dir2/... dir3
-
-
-The following paragraphs detail some of the command line options which can be
-supplied to `go-bindata`. Refer to the `testdata/out` directory for various
-output examples from the assets in `testdata/in`. Each example uses different
-command line options.
-
-To ignore files, pass in regexes using -ignore, for example:
-
- $ go-bindata -ignore=\\.gitignore data/...
-
-### Accessing an asset
-
-To access asset data, we use the `Asset(string) ([]byte, error)` function which
-is included in the generated output.
-
- data, err := Asset("pub/style/foo.css")
- if err != nil {
- // Asset was not found.
- }
-
- // use asset data
-
-
-### Debug vs Release builds
-
-When invoking the program with the `-debug` flag, the generated code does
-not actually include the asset data. Instead, it generates function stubs
-which load the data from the original file on disk. The asset API remains
-identical between debug and release builds, so your code will not have to
-change.
-
-This is useful during development when you expect the assets to change often.
-The host application using these assets uses the same API in both cases and
-will not have to care where the actual data comes from.
-
-An example is a Go webserver with some embedded, static web content like
-HTML, JS and CSS files. While developing it, you do not want to rebuild the
-whole server and restart it every time you make a change to a bit of
-javascript. You just want to build and launch the server once. Then just press
-refresh in the browser to see those changes. Embedding the assets with the
-`debug` flag allows you to do just that. When you are finished developing and
-ready for deployment, just re-invoke `go-bindata` without the `-debug` flag.
-It will now embed the latest version of the assets.
-
-
-### Lower memory footprint
-
-Using the `-nomemcopy` flag, will alter the way the output file is generated.
-It will employ a hack that allows us to read the file data directly from
-the compiled program's `.rodata` section. This ensures that when we call
-call our generated function, we omit unnecessary memcopies.
-
-The downside of this, is that it requires dependencies on the `reflect` and
-`unsafe` packages. These may be restricted on platforms like AppEngine and
-thus prevent you from using this mode.
-
-Another disadvantage is that the byte slice we create, is strictly read-only.
-For most use-cases this is not a problem, but if you ever try to alter the
-returned byte slice, a runtime panic is thrown. Use this mode only on target
-platforms where memory constraints are an issue.
-
-The default behaviour is to use the old code generation method. This
-prevents the two previously mentioned issues, but will employ at least one
-extra memcopy and thus increase memory requirements.
-
-For instance, consider the following two examples:
-
-This would be the default mode, using an extra memcopy but gives a safe
-implementation without dependencies on `reflect` and `unsafe`:
-
-```go
-func myfile() []byte {
- return []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a}
-}
-```
-
-Here is the same functionality, but uses the `.rodata` hack.
-The byte slice returned from this example can not be written to without
-generating a runtime error.
-
-```go
-var _myfile = "\x89\x50\x4e\x47\x0d\x0a\x1a"
-
-func myfile() []byte {
- var empty [0]byte
- sx := (*reflect.StringHeader)(unsafe.Pointer(&_myfile))
- b := empty[:]
- bx := (*reflect.SliceHeader)(unsafe.Pointer(&b))
- bx.Data = sx.Data
- bx.Len = len(_myfile)
- bx.Cap = bx.Len
- return b
-}
-```
-
-
-### Optional compression
-
-When the `-nocompress` flag is given, the supplied resource is *not* GZIP
-compressed before being turned into Go code. The data should still be accessed
-through a function call, so nothing changes in the usage of the generated file.
-
-This feature is useful if you do not care for compression, or the supplied
-resource is already compressed. Doing it again would not add any value and may
-even increase the size of the data.
-
-The default behaviour of the program is to use compression.
-
-
-### Path prefix stripping
-
-The keys used in the `_bindata` map, are the same as the input file name
-passed to `go-bindata`. This includes the path. In most cases, this is not
-desireable, as it puts potentially sensitive information in your code base.
-For this purpose, the tool supplies another command line flag `-prefix`.
-This accepts a portion of a path name, which should be stripped off from
-the map keys and function names.
-
-For example, running without the `-prefix` flag, we get:
-
- $ go-bindata /path/to/templates/
-
- _bindata["/path/to/templates/foo.html"] = path_to_templates_foo_html
-
-Running with the `-prefix` flag, we get:
-
- $ go-bindata -prefix "/path/to/" /path/to/templates/
-
- _bindata["templates/foo.html"] = templates_foo_html
-
-
-### Build tags
-
-With the optional `-tags` flag, you can specify any go build tags that
-must be fulfilled for the output file to be included in a build. This
-is useful when including binary data in multiple formats, where the desired
-format is specified at build time with the appropriate tags.
-
-The tags are appended to a `// +build` line in the beginning of the output file
-and must follow the build tags syntax specified by the go tool.
-
-### Serve assets with `net/http`
-
-With the `-fs` flag, `go-bindata` will add an `AssetFile()` method returning an `http.FileSystem` interface:
-
- $ go-bindata -fs -prefix "static/" static/
-
-Use `-prefix` flag to strip first level dir, then in your `net/http` router, you can use `AssetFile()` with `http.FileServer()` like:
-
-```go
-mux := http.NewServeMux()
-mux.Handle("/static", http.FileServer(AssetFile()))
-http.ListenAndServe(":8080", mux)
-```
diff --git a/vendor/github.com/go-bindata/go-bindata/_config.yml b/vendor/github.com/go-bindata/go-bindata/_config.yml
deleted file mode 100644
index c4192631f..000000000
--- a/vendor/github.com/go-bindata/go-bindata/_config.yml
+++ /dev/null
@@ -1 +0,0 @@
-theme: jekyll-theme-cayman
\ No newline at end of file
diff --git a/vendor/github.com/go-bindata/go-bindata/asset.go b/vendor/github.com/go-bindata/go-bindata/asset.go
deleted file mode 100644
index 95b6b94f3..000000000
--- a/vendor/github.com/go-bindata/go-bindata/asset.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package bindata
-
-// Asset holds information about a single asset to be processed.
-type Asset struct {
- Path string // Full file path.
- Name string // Key used in TOC -- name by which asset is referenced.
- Func string // Function name for the procedure returning the asset contents.
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/bytewriter.go b/vendor/github.com/go-bindata/go-bindata/bytewriter.go
deleted file mode 100644
index 05d6d6780..000000000
--- a/vendor/github.com/go-bindata/go-bindata/bytewriter.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package bindata
-
-import (
- "fmt"
- "io"
-)
-
-var (
- newline = []byte{'\n'}
- dataindent = []byte{'\t', '\t'}
- space = []byte{' '}
-)
-
-type ByteWriter struct {
- io.Writer
- c int
-}
-
-func (w *ByteWriter) Write(p []byte) (n int, err error) {
- if len(p) == 0 {
- return
- }
-
- for n = range p {
- if w.c%12 == 0 {
- w.Writer.Write(newline)
- w.Writer.Write(dataindent)
- w.c = 0
- } else {
- w.Writer.Write(space)
- }
-
- fmt.Fprintf(w.Writer, "0x%02x,", p[n])
- w.c++
- }
-
- n++
-
- return
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/config.go b/vendor/github.com/go-bindata/go-bindata/config.go
deleted file mode 100644
index 471c32f1b..000000000
--- a/vendor/github.com/go-bindata/go-bindata/config.go
+++ /dev/null
@@ -1,208 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package bindata
-
-import (
- "fmt"
- "os"
- "path/filepath"
- "regexp"
-)
-
-// InputConfig defines options on a asset directory to be convert.
-type InputConfig struct {
- // Path defines a directory containing asset files to be included
- // in the generated output.
- Path string
-
- // Recusive defines whether subdirectories of Path
- // should be recursively included in the conversion.
- Recursive bool
-}
-
-// Config defines a set of options for the asset conversion.
-type Config struct {
- // Name of the package to use. Defaults to 'main'.
- Package string
-
- // Tags specify a set of optional build tags, which should be
- // included in the generated output. The tags are appended to a
- // `// +build` line in the beginning of the output file
- // and must follow the build tags syntax specified by the go tool.
- Tags string
-
- // Input defines the directory path, containing all asset files as
- // well as whether to recursively process assets in any sub directories.
- Input []InputConfig
-
- // Output defines the output file for the generated code.
- // If left empty, this defaults to 'bindata.go' in the current
- // working directory.
- Output string
-
- // Prefix defines a path prefix which should be stripped from all
- // file names when generating the keys in the table of contents.
- // For example, running without the `-prefix` flag, we get:
- //
- // $ go-bindata /path/to/templates
- // go_bindata["/path/to/templates/foo.html"] = _path_to_templates_foo_html
- //
- // Running with the `-prefix` flag, we get:
- //
- // $ go-bindata -prefix "/path/to/" /path/to/templates/foo.html
- // go_bindata["templates/foo.html"] = templates_foo_html
- Prefix string
-
- // NoMemCopy will alter the way the output file is generated.
- //
- // It will employ a hack that allows us to read the file data directly from
- // the compiled program's `.rodata` section. This ensures that when we call
- // call our generated function, we omit unnecessary mem copies.
- //
- // The downside of this, is that it requires dependencies on the `reflect` and
- // `unsafe` packages. These may be restricted on platforms like AppEngine and
- // thus prevent you from using this mode.
- //
- // Another disadvantage is that the byte slice we create, is strictly read-only.
- // For most use-cases this is not a problem, but if you ever try to alter the
- // returned byte slice, a runtime panic is thrown. Use this mode only on target
- // platforms where memory constraints are an issue.
- //
- // The default behaviour is to use the old code generation method. This
- // prevents the two previously mentioned issues, but will employ at least one
- // extra memcopy and thus increase memory requirements.
- //
- // For instance, consider the following two examples:
- //
- // This would be the default mode, using an extra memcopy but gives a safe
- // implementation without dependencies on `reflect` and `unsafe`:
- //
- // func myfile() []byte {
- // return []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a}
- // }
- //
- // Here is the same functionality, but uses the `.rodata` hack.
- // The byte slice returned from this example can not be written to without
- // generating a runtime error.
- //
- // var _myfile = "\x89\x50\x4e\x47\x0d\x0a\x1a"
- //
- // func myfile() []byte {
- // var empty [0]byte
- // sx := (*reflect.StringHeader)(unsafe.Pointer(&_myfile))
- // b := empty[:]
- // bx := (*reflect.SliceHeader)(unsafe.Pointer(&b))
- // bx.Data = sx.Data
- // bx.Len = len(_myfile)
- // bx.Cap = bx.Len
- // return b
- // }
- NoMemCopy bool
-
- // NoCompress means the assets are /not/ GZIP compressed before being turned
- // into Go code. The generated function will automatically unzip
- // the file data when called. Defaults to false.
- NoCompress bool
-
- // HttpFileSystem means whether generate return http.FileSystem interface
- // instance's function.When true,will generate relate code.
- HttpFileSystem bool
-
- // Perform a debug build. This generates an asset file, which
- // loads the asset contents directly from disk at their original
- // location, instead of embedding the contents in the code.
- //
- // This is mostly useful if you anticipate that the assets are
- // going to change during your development cycle. You will always
- // want your code to access the latest version of the asset.
- // Only in release mode, will the assets actually be embedded
- // in the code. The default behaviour is Release mode.
- Debug bool
-
- // Perform a dev build, which is nearly identical to the debug option. The
- // only difference is that instead of absolute file paths in generated code,
- // it expects a variable, `rootDir`, to be set in the generated code's
- // package (the author needs to do this manually), which it then prepends to
- // an asset's name to construct the file path on disk.
- //
- // This is mainly so you can push the generated code file to a shared
- // repository.
- Dev bool
-
- // When true, size, mode and modtime are not preserved from files
- NoMetadata bool
- // When nonzero, use this as mode for all files.
- Mode uint
- // When nonzero, use this as unix timestamp for all files.
- ModTime int64
-
- // Ignores any filenames matching the regex pattern specified, e.g.
- // path/to/file.ext will ignore only that file, or \\.gitignore
- // will match any .gitignore file.
- //
- // This parameter can be provided multiple times.
- Ignore []*regexp.Regexp
-}
-
-// NewConfig returns a default configuration struct.
-func NewConfig() *Config {
- c := new(Config)
- c.Package = "main"
- c.NoMemCopy = false
- c.NoCompress = false
- c.HttpFileSystem = false
- c.Debug = false
- c.Output = "./bindata.go"
- c.Ignore = make([]*regexp.Regexp, 0)
- return c
-}
-
-// validate ensures the config has sane values.
-// Part of which means checking if certain file/directory paths exist.
-func (c *Config) validate() error {
- if len(c.Package) == 0 {
- return fmt.Errorf("Missing package name")
- }
-
- for _, input := range c.Input {
- _, err := os.Lstat(input.Path)
- if err != nil {
- return fmt.Errorf("Failed to stat input path '%s': %v", input.Path, err)
- }
- }
-
- if len(c.Output) == 0 {
- cwd, err := os.Getwd()
- if err != nil {
- return fmt.Errorf("Unable to determine current working directory.")
- }
-
- c.Output = filepath.Join(cwd, "bindata.go")
- }
-
- stat, err := os.Lstat(c.Output)
- if err != nil {
- if !os.IsNotExist(err) {
- return fmt.Errorf("Output path: %v", err)
- }
-
- // File does not exist. This is fine, just make
- // sure the directory it is to be in exists.
- dir, _ := filepath.Split(c.Output)
- if dir != "" {
- err = os.MkdirAll(dir, 0744)
-
- if err != nil {
- return fmt.Errorf("Create output directory: %v", err)
- }
- }
- }
-
- if stat != nil && stat.IsDir() {
- return fmt.Errorf("Output path is a directory.")
- }
-
- return nil
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/convert.go b/vendor/github.com/go-bindata/go-bindata/convert.go
deleted file mode 100644
index 8660ee9f4..000000000
--- a/vendor/github.com/go-bindata/go-bindata/convert.go
+++ /dev/null
@@ -1,261 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package bindata
-
-import (
- "bufio"
- "fmt"
- "os"
- "path/filepath"
- "regexp"
- "sort"
- "strings"
- "unicode"
-)
-
-// Translate reads assets from an input directory, converts them
-// to Go code and writes new files to the output specified
-// in the given configuration.
-func Translate(c *Config) error {
- var toc []Asset
-
- // Ensure our configuration has sane values.
- err := c.validate()
- if err != nil {
- return err
- }
-
- var knownFuncs = make(map[string]int)
- var visitedPaths = make(map[string]bool)
- // Locate all the assets.
- for _, input := range c.Input {
- err = findFiles(input.Path, c.Prefix, input.Recursive, &toc, c.Ignore, knownFuncs, visitedPaths)
- if err != nil {
- return err
- }
- }
-
- // Create output file.
- fd, err := os.Create(c.Output)
- if err != nil {
- return err
- }
-
- defer fd.Close()
-
- // Create a buffered writer for better performance.
- bfd := bufio.NewWriter(fd)
- defer bfd.Flush()
-
- // Write the header. This makes e.g. Github ignore diffs in generated files.
- if _, err = fmt.Fprintf(bfd, "// Code generated for package %s by go-bindata DO NOT EDIT. (@generated)\n", c.Package); err != nil {
- return err
- }
- if _, err = fmt.Fprint(bfd, "// sources:\n"); err != nil {
- return err
- }
-
- wd, err := os.Getwd()
- if err != nil {
- return err
- }
-
- for _, asset := range toc {
- relative, _ := filepath.Rel(wd, asset.Path)
- if _, err = fmt.Fprintf(bfd, "// %s\n", filepath.ToSlash(relative)); err != nil {
- return err
- }
- }
- //if _, err = fmt.Fprint(bfd, "// DO NOT EDIT!\n\n"); err != nil {
- // return err
- //}
-
- // Write build tags, if applicable.
- if len(c.Tags) > 0 {
- if _, err = fmt.Fprintf(bfd, "// +build %s\n\n", c.Tags); err != nil {
- return err
- }
- }
-
- // Write package declaration.
- _, err = fmt.Fprintf(bfd, "package %s\n\n", c.Package)
- if err != nil {
- return err
- }
-
- // Write assets.
- if c.Debug || c.Dev {
- err = writeDebug(bfd, c, toc)
- } else {
- err = writeRelease(bfd, c, toc)
- }
-
- if err != nil {
- return err
- }
-
- // Write table of contents
- if err := writeTOC(bfd, toc); err != nil {
- return err
- }
- // Write hierarchical tree of assets
- if err := writeTOCTree(bfd, toc); err != nil {
- return err
- }
-
- // Write restore procedure
- return writeRestore(bfd)
-}
-
-// ByName implements sort.Interface for []os.FileInfo based on Name()
-type ByName []os.FileInfo
-
-func (v ByName) Len() int { return len(v) }
-func (v ByName) Swap(i, j int) { v[i], v[j] = v[j], v[i] }
-func (v ByName) Less(i, j int) bool { return v[i].Name() < v[j].Name() }
-
-// findFiles recursively finds all the file paths in the given directory tree.
-// They are added to the given map as keys. Values will be safe function names
-// for each file, which will be used when generating the output code.
-func findFiles(dir, prefix string, recursive bool, toc *[]Asset, ignore []*regexp.Regexp, knownFuncs map[string]int, visitedPaths map[string]bool) error {
- dirpath := dir
- if len(prefix) > 0 {
- dirpath, _ = filepath.Abs(dirpath)
- prefix, _ = filepath.Abs(prefix)
- prefix = filepath.ToSlash(prefix)
- }
-
- fi, err := os.Stat(dirpath)
- if err != nil {
- return err
- }
-
- var list []os.FileInfo
-
- if !fi.IsDir() {
- dirpath = filepath.Dir(dirpath)
- list = []os.FileInfo{fi}
- } else {
- visitedPaths[dirpath] = true
- fd, err := os.Open(dirpath)
- if err != nil {
- return err
- }
-
- defer fd.Close()
-
- list, err = fd.Readdir(0)
- if err != nil {
- return err
- }
-
- // Sort to make output stable between invocations
- sort.Sort(ByName(list))
- }
-
- for _, file := range list {
- var asset Asset
- asset.Path = filepath.Join(dirpath, file.Name())
- asset.Name = filepath.ToSlash(asset.Path)
-
- ignoring := false
- for _, re := range ignore {
- if re.MatchString(asset.Path) {
- ignoring = true
- break
- }
- }
- if ignoring {
- continue
- }
-
- if file.IsDir() {
- if recursive {
- recursivePath := filepath.Join(dir, file.Name())
- visitedPaths[asset.Path] = true
- findFiles(recursivePath, prefix, recursive, toc, ignore, knownFuncs, visitedPaths)
- }
- continue
- } else if file.Mode()&os.ModeSymlink == os.ModeSymlink {
- var linkPath string
- if linkPath, err = os.Readlink(asset.Path); err != nil {
- return err
- }
- if !filepath.IsAbs(linkPath) {
- if linkPath, err = filepath.Abs(dirpath + "/" + linkPath); err != nil {
- return err
- }
- }
- if _, ok := visitedPaths[linkPath]; !ok {
- visitedPaths[linkPath] = true
- findFiles(asset.Path, prefix, recursive, toc, ignore, knownFuncs, visitedPaths)
- }
- continue
- }
-
- if strings.HasPrefix(asset.Name, prefix) {
- asset.Name = asset.Name[len(prefix):]
- } else {
- asset.Name = filepath.Join(dir, file.Name())
- }
-
- // If we have a leading slash, get rid of it.
- if len(asset.Name) > 0 && asset.Name[0] == '/' {
- asset.Name = asset.Name[1:]
- }
-
- // This shouldn't happen.
- if len(asset.Name) == 0 {
- return fmt.Errorf("Invalid file: %v", asset.Path)
- }
-
- asset.Func = safeFunctionName(asset.Name, knownFuncs)
- asset.Path, _ = filepath.Abs(asset.Path)
- *toc = append(*toc, asset)
- }
-
- return nil
-}
-
-var regFuncName = regexp.MustCompile(`[^a-zA-Z0-9_]`)
-
-// safeFunctionName converts the given name into a name
-// which qualifies as a valid function identifier. It
-// also compares against a known list of functions to
-// prevent conflict based on name translation.
-func safeFunctionName(name string, knownFuncs map[string]int) string {
- var inBytes, outBytes []byte
- var toUpper bool
-
- name = strings.ToLower(name)
- inBytes = []byte(name)
-
- for i := 0; i < len(inBytes); i++ {
- if regFuncName.Match([]byte{inBytes[i]}) {
- toUpper = true
- } else if toUpper {
- outBytes = append(outBytes, []byte(strings.ToUpper(string(inBytes[i])))...)
- toUpper = false
- } else {
- outBytes = append(outBytes, inBytes[i])
- }
- }
-
- name = string(outBytes)
-
- // Identifier can't start with a digit.
- if unicode.IsDigit(rune(name[0])) {
- name = "_" + name
- }
-
- if num, ok := knownFuncs[name]; ok {
- knownFuncs[name] = num + 1
- name = fmt.Sprintf("%s%d", name, num)
- } else {
- knownFuncs[name] = 2
- }
-
- return name
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/debug.go b/vendor/github.com/go-bindata/go-bindata/debug.go
deleted file mode 100644
index edb3270d6..000000000
--- a/vendor/github.com/go-bindata/go-bindata/debug.go
+++ /dev/null
@@ -1,108 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package bindata
-
-import (
- "fmt"
- "io"
-)
-
-// writeDebug writes the debug code file.
-func writeDebug(w io.Writer, c *Config, toc []Asset) error {
- err := writeDebugHeader(w, c)
- if err != nil {
- return err
- }
-
- err = writeAssetFS(w, c)
- if err != nil {
- return err
- }
-
- for i := range toc {
- err = writeDebugAsset(w, c, &toc[i])
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-// writeDebugHeader writes output file headers.
-// This targets debug builds.
-func writeDebugHeader(w io.Writer, c *Config) error {
- var header string
-
- if c.HttpFileSystem {
- header = `import (
- "bytes"
- "net/http"
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "time"`
- } else {
- header = `import (
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"`
- }
-
- _, err := fmt.Fprintf(w, `%s
-)
-
-// bindataRead reads the given file from disk. It returns an error on failure.
-func bindataRead(path, name string) ([]byte, error) {
- buf, err := ioutil.ReadFile(path)
- if err != nil {
- err = fmt.Errorf("Error reading asset %%s at %%s: %%v", name, path, err)
- }
- return buf, err
-}
-
-type asset struct {
- bytes []byte
- info os.FileInfo
-}
-
-`, header)
- return err
-}
-
-// writeDebugAsset write a debug entry for the given asset.
-// A debug entry is simply a function which reads the asset from
-// the original file (e.g.: from disk).
-func writeDebugAsset(w io.Writer, c *Config, asset *Asset) error {
- pathExpr := fmt.Sprintf("%q", asset.Path)
- if c.Dev {
- pathExpr = fmt.Sprintf("filepath.Join(rootDir, %q)", asset.Name)
- }
-
- _, err := fmt.Fprintf(w, `// %s reads file data from disk. It returns an error on failure.
-func %s() (*asset, error) {
- path := %s
- name := %q
- bytes, err := bindataRead(path, name)
- if err != nil {
- return nil, err
- }
-
- fi, err := os.Stat(path)
- if err != nil {
- err = fmt.Errorf("Error reading asset info %%s at %%s: %%v", name, path, err)
- }
-
- a := &asset{bytes: bytes, info: fi}
- return a, err
-}
-
-`, asset.Func, asset.Func, pathExpr, asset.Name)
- return err
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/doc.go b/vendor/github.com/go-bindata/go-bindata/doc.go
deleted file mode 100644
index 09ead1e3b..000000000
--- a/vendor/github.com/go-bindata/go-bindata/doc.go
+++ /dev/null
@@ -1,129 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-/*
-bindata converts any file into managable Go source code. Useful for
-embedding binary data into a go program. The file data is optionally gzip
-compressed before being converted to a raw byte slice.
-
-The following paragraphs cover some of the customization options
-which can be specified in the Config struct, which must be passed into
-the Translate() call.
-
-
-Debug vs Release builds
-
-When used with the `Debug` option, the generated code does not actually include
-the asset data. Instead, it generates function stubs which load the data from
-the original file on disk. The asset API remains identical between debug and
-release builds, so your code will not have to change.
-
-This is useful during development when you expect the assets to change often.
-The host application using these assets uses the same API in both cases and
-will not have to care where the actual data comes from.
-
-An example is a Go webserver with some embedded, static web content like
-HTML, JS and CSS files. While developing it, you do not want to rebuild the
-whole server and restart it every time you make a change to a bit of
-javascript. You just want to build and launch the server once. Then just press
-refresh in the browser to see those changes. Embedding the assets with the
-`debug` flag allows you to do just that. When you are finished developing and
-ready for deployment, just re-invoke `go-bindata` without the `-debug` flag.
-It will now embed the latest version of the assets.
-
-
-Lower memory footprint
-
-The `NoMemCopy` option will alter the way the output file is generated.
-It will employ a hack that allows us to read the file data directly from
-the compiled program's `.rodata` section. This ensures that when we call
-call our generated function, we omit unnecessary memcopies.
-
-The downside of this, is that it requires dependencies on the `reflect` and
-`unsafe` packages. These may be restricted on platforms like AppEngine and
-thus prevent you from using this mode.
-
-Another disadvantage is that the byte slice we create, is strictly read-only.
-For most use-cases this is not a problem, but if you ever try to alter the
-returned byte slice, a runtime panic is thrown. Use this mode only on target
-platforms where memory constraints are an issue.
-
-The default behaviour is to use the old code generation method. This
-prevents the two previously mentioned issues, but will employ at least one
-extra memcopy and thus increase memory requirements.
-
-For instance, consider the following two examples:
-
-This would be the default mode, using an extra memcopy but gives a safe
-implementation without dependencies on `reflect` and `unsafe`:
-
- func myfile() []byte {
- return []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a}
- }
-
-Here is the same functionality, but uses the `.rodata` hack.
-The byte slice returned from this example can not be written to without
-generating a runtime error.
-
- var _myfile = "\x89\x50\x4e\x47\x0d\x0a\x1a"
-
- func myfile() []byte {
- var empty [0]byte
- sx := (*reflect.StringHeader)(unsafe.Pointer(&_myfile))
- b := empty[:]
- bx := (*reflect.SliceHeader)(unsafe.Pointer(&b))
- bx.Data = sx.Data
- bx.Len = len(_myfile)
- bx.Cap = bx.Len
- return b
- }
-
-
-Optional compression
-
-The NoCompress option indicates that the supplied assets are *not* GZIP
-compressed before being turned into Go code. The data should still be accessed
-through a function call, so nothing changes in the API.
-
-This feature is useful if you do not care for compression, or the supplied
-resource is already compressed. Doing it again would not add any value and may
-even increase the size of the data.
-
-The default behaviour of the program is to use compression.
-
-
-Path prefix stripping
-
-The keys used in the `_bindata` map are the same as the input file name
-passed to `go-bindata`. This includes the path. In most cases, this is not
-desireable, as it puts potentially sensitive information in your code base.
-For this purpose, the tool supplies another command line flag `-prefix`.
-This accepts a portion of a path name, which should be stripped off from
-the map keys and function names.
-
-For example, running without the `-prefix` flag, we get:
-
- $ go-bindata /path/to/templates/
-
- _bindata["/path/to/templates/foo.html"] = path_to_templates_foo_html
-
-Running with the `-prefix` flag, we get:
-
- $ go-bindata -prefix "/path/to/" /path/to/templates/
-
- _bindata["templates/foo.html"] = templates_foo_html
-
-
-Build tags
-
-With the optional Tags field, you can specify any go build tags that
-must be fulfilled for the output file to be included in a build. This
-is useful when including binary data in multiple formats, where the desired
-format is specified at build time with the appropriate tags.
-
-The tags are appended to a `// +build` line in the beginning of the output file
-and must follow the build tags syntax specified by the go tool.
-
-*/
-package bindata
diff --git a/vendor/github.com/go-bindata/go-bindata/file.go b/vendor/github.com/go-bindata/go-bindata/file.go
deleted file mode 100644
index 8c83926c8..000000000
--- a/vendor/github.com/go-bindata/go-bindata/file.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package bindata
-
-import (
- "fmt"
- "io"
-)
-
-func writeAssetFS(w io.Writer, c *Config) error {
- if !c.HttpFileSystem {
- return nil
- }
-
- _, err := fmt.Fprintf(w, `
-type assetFile struct {
- *bytes.Reader
- name string
- childInfos []os.FileInfo
- childInfoOffset int
-}
-
-type assetOperator struct{}
-
-// Open implement http.FileSystem interface
-func (f *assetOperator) Open(name string) (http.File, error) {
- var err error
- if len(name) > 0 && name[0] == '/' {
- name = name[1:]
- }
- content, err := Asset(name)
- if err == nil {
- return &assetFile{name: name, Reader: bytes.NewReader(content)}, nil
- }
- children, err := AssetDir(name)
- if err == nil {
- childInfos := make([]os.FileInfo, 0, len(children))
- for _, child := range children {
- childPath := filepath.Join(name, child)
- info, errInfo := AssetInfo(filepath.Join(name, child))
- if errInfo == nil {
- childInfos = append(childInfos, info)
- } else {
- childInfos = append(childInfos, newDirFileInfo(childPath))
- }
- }
- return &assetFile{name: name, childInfos: childInfos}, nil
- } else {
- // If the error is not found, return an error that will
- // result in a 404 error. Otherwise the server returns
- // a 500 error for files not found.
- if strings.Contains(err.Error(), "not found") {
- return nil, os.ErrNotExist
- }
- return nil, err
- }
-}
-
-// Close no need do anything
-func (f *assetFile) Close() error {
- return nil
-}
-
-// Readdir read dir's children file info
-func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
- if len(f.childInfos) == 0 {
- return nil, os.ErrNotExist
- }
- if count <= 0 {
- return f.childInfos, nil
- }
- if f.childInfoOffset+count > len(f.childInfos) {
- count = len(f.childInfos) - f.childInfoOffset
- }
- offset := f.childInfoOffset
- f.childInfoOffset += count
- return f.childInfos[offset : offset+count], nil
-}
-
-// Stat read file info from asset item
-func (f *assetFile) Stat() (os.FileInfo, error) {
- if len(f.childInfos) != 0 {
- return newDirFileInfo(f.name), nil
- }
- return AssetInfo(f.name)
-}
-
-// newDirFileInfo return default dir file info
-func newDirFileInfo(name string) os.FileInfo {
- return &bindataFileInfo{
- name: name,
- size: 0,
- mode: os.FileMode(2147484068), // equal os.FileMode(0644)|os.ModeDir
- modTime: time.Time{}}
-}
-
-// AssetFile return a http.FileSystem instance that data backend by asset
-func AssetFile() http.FileSystem {
- return &assetOperator{}
-}
-
-`)
- return err
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/go-bindata/.gitignore b/vendor/github.com/go-bindata/go-bindata/go-bindata/.gitignore
deleted file mode 100644
index 099edf6f9..000000000
--- a/vendor/github.com/go-bindata/go-bindata/go-bindata/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-go-bindata
diff --git a/vendor/github.com/go-bindata/go-bindata/go-bindata/AppendSliceValue.go b/vendor/github.com/go-bindata/go-bindata/go-bindata/AppendSliceValue.go
deleted file mode 100644
index f5da49596..000000000
--- a/vendor/github.com/go-bindata/go-bindata/go-bindata/AppendSliceValue.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package main
-
-import "strings"
-
-// borrowed from https://github.com/hashicorp/serf/blob/master/command/agent/flag_slice_value.go
-
-// AppendSliceValue implements the flag.Value interface and allows multiple
-// calls to the same variable to append a list.
-type AppendSliceValue []string
-
-func (s *AppendSliceValue) String() string {
- return strings.Join(*s, ",")
-}
-
-func (s *AppendSliceValue) Set(value string) error {
- if *s == nil {
- *s = make([]string, 0, 1)
- }
-
- *s = append(*s, value)
- return nil
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/go-bindata/main.go b/vendor/github.com/go-bindata/go-bindata/go-bindata/main.go
deleted file mode 100644
index f0155a5d0..000000000
--- a/vendor/github.com/go-bindata/go-bindata/go-bindata/main.go
+++ /dev/null
@@ -1,108 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package main
-
-import (
- "flag"
- "fmt"
- "os"
- "path/filepath"
- "regexp"
- "strings"
-
- "github.com/go-bindata/go-bindata"
-)
-
-func main() {
- cfg := parseArgs()
- err := bindata.Translate(cfg)
-
- if err != nil {
- fmt.Fprintf(os.Stderr, "bindata: %v\n", err)
- os.Exit(1)
- }
-}
-
-// parseArgs create s a new, filled configuration instance
-// by reading and parsing command line options.
-//
-// This function exits the program with an error, if
-// any of the command line options are incorrect.
-func parseArgs() *bindata.Config {
- var version bool
-
- c := bindata.NewConfig()
-
- flag.Usage = func() {
- fmt.Printf("Usage: %s [options] \n\n", os.Args[0])
- flag.PrintDefaults()
- }
-
- flag.BoolVar(&c.Debug, "debug", c.Debug, "Do not embed the assets, but provide the embedding API. Contents will still be loaded from disk.")
- flag.BoolVar(&c.Dev, "dev", c.Dev, "Similar to debug, but does not emit absolute paths. Expects a rootDir variable to already exist in the generated code's package.")
- flag.StringVar(&c.Tags, "tags", c.Tags, "Optional set of build tags to include.")
- flag.StringVar(&c.Prefix, "prefix", c.Prefix, "Optional path prefix to strip off asset names.")
- flag.StringVar(&c.Package, "pkg", c.Package, "Package name to use in the generated code.")
- flag.BoolVar(&c.NoMemCopy, "nomemcopy", c.NoMemCopy, "Use a .rodata hack to get rid of unnecessary memcopies. Refer to the documentation to see what implications this carries.")
- flag.BoolVar(&c.NoCompress, "nocompress", c.NoCompress, "Assets will *not* be GZIP compressed when this flag is specified.")
- flag.BoolVar(&c.NoMetadata, "nometadata", c.NoMetadata, "Assets will not preserve size, mode, and modtime info.")
- flag.BoolVar(&c.HttpFileSystem, "fs", c.HttpFileSystem, "Whether generate instance http.FileSystem interface code.")
- flag.UintVar(&c.Mode, "mode", c.Mode, "Optional file mode override for all files.")
- flag.Int64Var(&c.ModTime, "modtime", c.ModTime, "Optional modification unix timestamp override for all files.")
- flag.StringVar(&c.Output, "o", c.Output, "Optional name of the output file to be generated.")
- flag.BoolVar(&version, "version", false, "Displays version information.")
-
- ignore := make([]string, 0)
- flag.Var((*AppendSliceValue)(&ignore), "ignore", "Regex pattern to ignore")
-
- flag.Parse()
-
- patterns := make([]*regexp.Regexp, 0)
- for _, pattern := range ignore {
- patterns = append(patterns, regexp.MustCompile(pattern))
- }
- c.Ignore = patterns
-
- if version {
- fmt.Printf("%s\n", Version())
- os.Exit(0)
- }
-
- // Make sure we have input paths.
- if flag.NArg() == 0 {
- fmt.Fprintf(os.Stderr, "Missing \n\n")
- flag.Usage()
- os.Exit(1)
- }
-
- // Create input configurations.
- c.Input = make([]bindata.InputConfig, flag.NArg())
- for i := range c.Input {
- c.Input[i] = parseInput(flag.Arg(i))
- }
-
- return c
-}
-
-// parseRecursive determines whether the given path has a recrusive indicator and
-// returns a new path with the recursive indicator chopped off if it does.
-//
-// ex:
-// /path/to/foo/... -> (/path/to/foo, true)
-// /path/to/bar -> (/path/to/bar, false)
-func parseInput(path string) bindata.InputConfig {
- if strings.HasSuffix(path, "/...") {
- return bindata.InputConfig{
- Path: filepath.Clean(path[:len(path)-4]),
- Recursive: true,
- }
- } else {
- return bindata.InputConfig{
- Path: filepath.Clean(path),
- Recursive: false,
- }
- }
-
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/go-bindata/version.go b/vendor/github.com/go-bindata/go-bindata/go-bindata/version.go
deleted file mode 100644
index 5a4cfb794..000000000
--- a/vendor/github.com/go-bindata/go-bindata/go-bindata/version.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package main
-
-import (
- "fmt"
- "runtime"
-)
-
-const (
- AppName = "go-bindata"
- AppVersionMajor = 3
- AppVersionMinor = 1
-)
-
-// revision part of the program version.
-// This will be set automatically at build time like so:
-//
-// go build -ldflags "-X main.AppVersionRev `date -u +%s`"
-var AppVersionRev string
-
-func Version() string {
- if len(AppVersionRev) == 0 {
- AppVersionRev = "2"
- }
-
- return fmt.Sprintf("%s %d.%d.%s (Go runtime %s).\nCopyright (c) 2010-2013, Jim Teeuwen.",
- AppName, AppVersionMajor, AppVersionMinor, AppVersionRev, runtime.Version())
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/release.go b/vendor/github.com/go-bindata/go-bindata/release.go
deleted file mode 100644
index d1bef160f..000000000
--- a/vendor/github.com/go-bindata/go-bindata/release.go
+++ /dev/null
@@ -1,473 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package bindata
-
-import (
- "bytes"
- "compress/gzip"
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "unicode/utf8"
-)
-
-// writeRelease writes the release code file.
-func writeRelease(w io.Writer, c *Config, toc []Asset) error {
- err := writeReleaseHeader(w, c)
- if err != nil {
- return err
- }
-
- err = writeAssetFS(w, c)
- if err != nil {
- return err
- }
-
- for i := range toc {
- err = writeReleaseAsset(w, c, &toc[i])
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-// writeReleaseHeader writes output file headers.
-// This targets release builds.
-func writeReleaseHeader(w io.Writer, c *Config) error {
- var err error
- if c.NoCompress {
- if c.NoMemCopy {
- err = header_uncompressed_nomemcopy(w, c)
- } else {
- err = header_uncompressed_memcopy(w, c)
- }
- } else {
- if c.NoMemCopy {
- err = header_compressed_nomemcopy(w, c)
- } else {
- err = header_compressed_memcopy(w, c)
- }
- }
- if err != nil {
- return err
- }
- return header_release_common(w)
-}
-
-// writeReleaseAsset write a release entry for the given asset.
-// A release entry is a function which embeds and returns
-// the file's byte content.
-func writeReleaseAsset(w io.Writer, c *Config, asset *Asset) error {
- fd, err := os.Open(asset.Path)
- if err != nil {
- return err
- }
-
- defer fd.Close()
-
- if c.NoCompress {
- if c.NoMemCopy {
- err = uncompressed_nomemcopy(w, asset, fd)
- } else {
- err = uncompressed_memcopy(w, asset, fd)
- }
- } else {
- if c.NoMemCopy {
- err = compressed_nomemcopy(w, asset, fd)
- } else {
- err = compressed_memcopy(w, asset, fd)
- }
- }
- if err != nil {
- return err
- }
- return asset_release_common(w, c, asset)
-}
-
-// sanitize prepares a valid UTF-8 string as a raw string constant.
-// Based on https://code.google.com/p/go/source/browse/godoc/static/makestatic.go?repo=tools
-func sanitize(b []byte) []byte {
- // Replace ` with `+"`"+`
- b = bytes.Replace(b, []byte("`"), []byte("`+\"`\"+`"), -1)
-
- // Replace BOM with `+"\xEF\xBB\xBF"+`
- // (A BOM is valid UTF-8 but not permitted in Go source files.
- // I wouldn't bother handling this, but for some insane reason
- // jquery.js has a BOM somewhere in the middle.)
- return bytes.Replace(b, []byte("\xEF\xBB\xBF"), []byte("`+\"\\xEF\\xBB\\xBF\"+`"), -1)
-}
-
-func header_compressed_nomemcopy(w io.Writer, c *Config) error {
- var header string
-
- if c.HttpFileSystem {
- header = `import (
- "bytes"
- "compress/gzip"
- "fmt"
- "net/http"
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "time"`
- } else {
- header = `import (
- "bytes"
- "compress/gzip"
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "time"`
- }
-
- _, err := fmt.Fprintf(w, `%s
-)
-
-func bindataRead(data, name string) ([]byte, error) {
- gz, err := gzip.NewReader(strings.NewReader(data))
- if err != nil {
- return nil, fmt.Errorf("Read %%q: %%v", name, err)
- }
-
- var buf bytes.Buffer
- _, err = io.Copy(&buf, gz)
- clErr := gz.Close()
-
- if err != nil {
- return nil, fmt.Errorf("Read %%q: %%v", name, err)
- }
- if clErr != nil {
- return nil, err
- }
-
- return buf.Bytes(), nil
-}
-
-`, header)
- return err
-}
-
-func header_compressed_memcopy(w io.Writer, c *Config) error {
- var header string
-
- if c.HttpFileSystem {
- header = `import (
- "bytes"
- "compress/gzip"
- "fmt"
- "net/http"
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "time"`
- } else {
- header = `import (
- "bytes"
- "compress/gzip"
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "time"`
- }
-
- _, err := fmt.Fprintf(w, `%s
-)
-
-func bindataRead(data []byte, name string) ([]byte, error) {
- gz, err := gzip.NewReader(bytes.NewBuffer(data))
- if err != nil {
- return nil, fmt.Errorf("Read %%q: %%v", name, err)
- }
-
- var buf bytes.Buffer
- _, err = io.Copy(&buf, gz)
- clErr := gz.Close()
-
- if err != nil {
- return nil, fmt.Errorf("Read %%q: %%v", name, err)
- }
- if clErr != nil {
- return nil, err
- }
-
- return buf.Bytes(), nil
-}
-
-`, header)
- return err
-}
-
-func header_uncompressed_nomemcopy(w io.Writer, c *Config) error {
- var header string
-
- if c.HttpFileSystem {
- header = `import (
- "bytes"
- "fmt"
- "net/http"
- "io/ioutil"
- "os"
- "path/filepath"
- "reflect"
- "strings"
- "time"
- "unsafe"`
- } else {
- header = `import (
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "reflect"
- "strings"
- "time"
- "unsafe"`
- }
-
- _, err := fmt.Fprintf(w, `%s
-)
-
-func bindataRead(data, name string) ([]byte, error) {
- var empty [0]byte
- sx := (*reflect.StringHeader)(unsafe.Pointer(&data))
- b := empty[:]
- bx := (*reflect.SliceHeader)(unsafe.Pointer(&b))
- bx.Data = sx.Data
- bx.Len = len(data)
- bx.Cap = bx.Len
- return b, nil
-}
-
-`, header)
- return err
-}
-
-func header_uncompressed_memcopy(w io.Writer, c *Config) error {
- var header string
-
- if c.HttpFileSystem {
- header = `import (
- "bytes"
- "fmt"
- "net/http"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "time"`
- } else {
- header = `import (
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "time"`
- }
-
- _, err := fmt.Fprintf(w, `%s
-)
-`, header)
- return err
-}
-
-func header_release_common(w io.Writer) error {
- _, err := fmt.Fprintf(w, `type asset struct {
- bytes []byte
- info os.FileInfo
-}
-
-type bindataFileInfo struct {
- name string
- size int64
- mode os.FileMode
- modTime time.Time
-}
-
-// Name return file name
-func (fi bindataFileInfo) Name() string {
- return fi.name
-}
-
-// Size return file size
-func (fi bindataFileInfo) Size() int64 {
- return fi.size
-}
-
-// Mode return file mode
-func (fi bindataFileInfo) Mode() os.FileMode {
- return fi.mode
-}
-
-// Mode return file modify time
-func (fi bindataFileInfo) ModTime() time.Time {
- return fi.modTime
-}
-
-// IsDir return file whether a directory
-func (fi bindataFileInfo) IsDir() bool {
- return fi.mode&os.ModeDir != 0
-}
-
-// Sys return file is sys mode
-func (fi bindataFileInfo) Sys() interface{} {
- return nil
-}
-
-`)
- return err
-}
-
-func compressed_nomemcopy(w io.Writer, asset *Asset, r io.Reader) error {
- _, err := fmt.Fprintf(w, `var _%s = "`, asset.Func)
- if err != nil {
- return err
- }
-
- gz := gzip.NewWriter(&StringWriter{Writer: w})
- _, err = io.Copy(gz, r)
- gz.Close()
-
- if err != nil {
- return err
- }
-
- _, err = fmt.Fprintf(w, `"
-
-func %sBytes() ([]byte, error) {
- return bindataRead(
- _%s,
- %q,
- )
-}
-
-`, asset.Func, asset.Func, asset.Name)
- return err
-}
-
-func compressed_memcopy(w io.Writer, asset *Asset, r io.Reader) error {
- _, err := fmt.Fprintf(w, `var _%s = []byte("`, asset.Func)
- if err != nil {
- return err
- }
-
- gz := gzip.NewWriter(&StringWriter{Writer: w})
- _, err = io.Copy(gz, r)
- gz.Close()
-
- if err != nil {
- return err
- }
-
- _, err = fmt.Fprintf(w, `")
-
-func %sBytes() ([]byte, error) {
- return bindataRead(
- _%s,
- %q,
- )
-}
-
-`, asset.Func, asset.Func, asset.Name)
- return err
-}
-
-func uncompressed_nomemcopy(w io.Writer, asset *Asset, r io.Reader) error {
- _, err := fmt.Fprintf(w, `var _%s = "`, asset.Func)
- if err != nil {
- return err
- }
-
- _, err = io.Copy(&StringWriter{Writer: w}, r)
- if err != nil {
- return err
- }
-
- _, err = fmt.Fprintf(w, `"
-
-func %sBytes() ([]byte, error) {
- return bindataRead(
- _%s,
- %q,
- )
-}
-
-`, asset.Func, asset.Func, asset.Name)
- return err
-}
-
-func uncompressed_memcopy(w io.Writer, asset *Asset, r io.Reader) error {
- _, err := fmt.Fprintf(w, `var _%s = []byte(`, asset.Func)
- if err != nil {
- return err
- }
-
- b, err := ioutil.ReadAll(r)
- if err != nil {
- return err
- }
- if utf8.Valid(b) && !bytes.Contains(b, []byte{0}) {
- fmt.Fprintf(w, "`%s`", sanitize(b))
- } else {
- fmt.Fprintf(w, "%+q", b)
- }
-
- _, err = fmt.Fprintf(w, `)
-
-func %sBytes() ([]byte, error) {
- return _%s, nil
-}
-
-`, asset.Func, asset.Func)
- return err
-}
-
-func asset_release_common(w io.Writer, c *Config, asset *Asset) error {
- fi, err := os.Stat(asset.Path)
- if err != nil {
- return err
- }
-
- mode := uint(fi.Mode())
- modTime := fi.ModTime().Unix()
- size := fi.Size()
- if c.NoMetadata {
- mode = 0
- modTime = 0
- size = 0
- }
- if c.Mode > 0 {
- mode = uint(os.ModePerm) & c.Mode
- }
- if c.ModTime > 0 {
- modTime = c.ModTime
- }
- _, err = fmt.Fprintf(w, `func %s() (*asset, error) {
- bytes, err := %sBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: %q, size: %d, mode: os.FileMode(%d), modTime: time.Unix(%d, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-`, asset.Func, asset.Func, asset.Name, size, mode, modTime)
- return err
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/restore.go b/vendor/github.com/go-bindata/go-bindata/restore.go
deleted file mode 100644
index 268ec7464..000000000
--- a/vendor/github.com/go-bindata/go-bindata/restore.go
+++ /dev/null
@@ -1,62 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package bindata
-
-import (
- "fmt"
- "io"
-)
-
-func writeRestore(w io.Writer) error {
- _, err := fmt.Fprintf(w, `
-// RestoreAsset restores an asset under the given directory
-func RestoreAsset(dir, name string) error {
- data, err := Asset(name)
- if err != nil {
- return err
- }
- info, err := AssetInfo(name)
- if err != nil {
- return err
- }
- err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
- if err != nil {
- return err
- }
- err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
- if err != nil {
- return err
- }
- err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
- if err != nil {
- return err
- }
- return nil
-}
-
-// RestoreAssets restores an asset under the given directory recursively
-func RestoreAssets(dir, name string) error {
- children, err := AssetDir(name)
- // File
- if err != nil {
- return RestoreAsset(dir, name)
- }
- // Dir
- for _, child := range children {
- err = RestoreAssets(dir, filepath.Join(name, child))
- if err != nil {
- return err
- }
- }
- return nil
-}
-
-func _filePath(dir, name string) string {
- cannonicalName := strings.Replace(name, "\\", "/", -1)
- return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
-}
-`)
- return err
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/stringwriter.go b/vendor/github.com/go-bindata/go-bindata/stringwriter.go
deleted file mode 100644
index 77daa04cb..000000000
--- a/vendor/github.com/go-bindata/go-bindata/stringwriter.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package bindata
-
-import (
- "io"
-)
-
-const lowerHex = "0123456789abcdef"
-
-type StringWriter struct {
- io.Writer
- c int
-}
-
-func (w *StringWriter) Write(p []byte) (n int, err error) {
- if len(p) == 0 {
- return
- }
-
- buf := []byte(`\x00`)
- var b byte
-
- for n, b = range p {
- buf[2] = lowerHex[b/16]
- buf[3] = lowerHex[b%16]
- w.Writer.Write(buf)
- w.c++
- }
-
- n++
-
- return
-}
diff --git a/vendor/github.com/go-bindata/go-bindata/toc.go b/vendor/github.com/go-bindata/go-bindata/toc.go
deleted file mode 100644
index be4a01654..000000000
--- a/vendor/github.com/go-bindata/go-bindata/toc.go
+++ /dev/null
@@ -1,288 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package bindata
-
-import (
- "fmt"
- "io"
- "sort"
- "strings"
-)
-
-type assetTree struct {
- Asset Asset
- Children map[string]*assetTree
-}
-
-func newAssetTree() *assetTree {
- tree := &assetTree{}
- tree.Children = make(map[string]*assetTree)
- return tree
-}
-
-func (node *assetTree) child(name string) *assetTree {
- rv, ok := node.Children[name]
- if !ok {
- rv = newAssetTree()
- node.Children[name] = rv
- }
- return rv
-}
-
-func (root *assetTree) Add(route []string, asset Asset) {
- for _, name := range route {
- root = root.child(name)
- }
- root.Asset = asset
-}
-
-func ident(w io.Writer, n int) {
- for i := 0; i < n; i++ {
- w.Write([]byte{'\t'})
- }
-}
-
-func (root *assetTree) funcOrNil() string {
- if root.Asset.Func == "" {
- return "nil"
- } else {
- return root.Asset.Func
- }
-}
-
-func getFillerSize(tokenIndex int, lengths []int, nident int) int {
- var (
- curlen int = lengths[tokenIndex]
- maxlen int = 0
- substart int = 0
- subend int = 0
- spacediff int = 0
- )
-
- if curlen > 0 {
- substart = tokenIndex
- for (substart-1) >= 0 && lengths[substart-1] > 0 {
- substart -= 1
- }
-
- subend = tokenIndex
- for (subend+1) < len(lengths) && lengths[subend+1] > 0 {
- subend += 1
- }
-
- var candidate int
- for j := substart; j <= subend; j += 1 {
- candidate = lengths[j]
- if candidate > maxlen {
- maxlen = candidate
- }
- }
-
- spacediff = maxlen - curlen
- }
-
- return spacediff
-}
-
-func (root *assetTree) writeGoMap(w io.Writer, nident int) {
- fmt.Fprintf(w, "&bintree{%s, map[string]*bintree{", root.funcOrNil())
-
- if len(root.Children) > 0 {
- io.WriteString(w, "\n")
-
- // Sort to make output stable between invocations
- filenames := make([]string, len(root.Children))
- hasChildren := make(map[string]bool)
- i := 0
- for filename, node := range root.Children {
- filenames[i] = filename
- hasChildren[filename] = len(node.Children) > 0
- i++
- }
- sort.Strings(filenames)
-
- lengths := make([]int, len(root.Children))
- for i, filename := range filenames {
- if hasChildren[filename] {
- lengths[i] = 0
- } else {
- lengths[i] = len(filename)
- }
- }
-
- for i, p := range filenames {
- ident(w, nident+1)
- filler := strings.Repeat(" ", getFillerSize(i, lengths, nident))
- fmt.Fprintf(w, `"%s": %s`, p, filler)
- root.Children[p].writeGoMap(w, nident+1)
- }
- ident(w, nident)
- }
-
- io.WriteString(w, "}}")
- if nident > 0 {
- io.WriteString(w, ",")
- }
- io.WriteString(w, "\n")
-}
-
-func (root *assetTree) WriteAsGoMap(w io.Writer) error {
- _, err := fmt.Fprint(w, `type bintree struct {
- Func func() (*asset, error)
- Children map[string]*bintree
-}
-
-var _bintree = `)
- root.writeGoMap(w, 0)
- return err
-}
-
-func writeTOCTree(w io.Writer, toc []Asset) error {
- _, err := fmt.Fprintf(w, `// AssetDir returns the file names below a certain
-// directory embedded in the file by go-bindata.
-// For example if you run go-bindata on data/... and data contains the
-// following hierarchy:
-// data/
-// foo.txt
-// img/
-// a.png
-// b.png
-// then AssetDir("data") would return []string{"foo.txt", "img"}
-// AssetDir("data/img") would return []string{"a.png", "b.png"}
-// AssetDir("foo.txt") and AssetDir("notexist") would return an error
-// AssetDir("") will return []string{"data"}.
-func AssetDir(name string) ([]string, error) {
- node := _bintree
- if len(name) != 0 {
- cannonicalName := strings.Replace(name, "\\", "/", -1)
- pathList := strings.Split(cannonicalName, "/")
- for _, p := range pathList {
- node = node.Children[p]
- if node == nil {
- return nil, fmt.Errorf("Asset %%s not found", name)
- }
- }
- }
- if node.Func != nil {
- return nil, fmt.Errorf("Asset %%s not found", name)
- }
- rv := make([]string, 0, len(node.Children))
- for childName := range node.Children {
- rv = append(rv, childName)
- }
- return rv, nil
-}
-
-`)
- if err != nil {
- return err
- }
- tree := newAssetTree()
- for i := range toc {
- pathList := strings.Split(toc[i].Name, "/")
- tree.Add(pathList, toc[i])
- }
- return tree.WriteAsGoMap(w)
-}
-
-// writeTOC writes the table of contents file.
-func writeTOC(w io.Writer, toc []Asset) error {
- err := writeTOCHeader(w)
- if err != nil {
- return err
- }
-
- var maxlen = 0
- for i := range toc {
- l := len(toc[i].Name)
- if l > maxlen {
- maxlen = l
- }
- }
-
- for i := range toc {
- err = writeTOCAsset(w, &toc[i], maxlen)
- if err != nil {
- return err
- }
- }
-
- return writeTOCFooter(w)
-}
-
-// writeTOCHeader writes the table of contents file header.
-func writeTOCHeader(w io.Writer) error {
- _, err := fmt.Fprintf(w, `// Asset loads and returns the asset for the given name.
-// It returns an error if the asset could not be found or
-// could not be loaded.
-func Asset(name string) ([]byte, error) {
- cannonicalName := strings.Replace(name, "\\", "/", -1)
- if f, ok := _bindata[cannonicalName]; ok {
- a, err := f()
- if err != nil {
- return nil, fmt.Errorf("Asset %%s can't read by error: %%v", name, err)
- }
- return a.bytes, nil
- }
- return nil, fmt.Errorf("Asset %%s not found", name)
-}
-
-// MustAsset is like Asset but panics when Asset would return an error.
-// It simplifies safe initialization of global variables.
-func MustAsset(name string) []byte {
- a, err := Asset(name)
- if err != nil {
- panic("asset: Asset(" + name + "): " + err.Error())
- }
-
- return a
-}
-
-// AssetInfo loads and returns the asset info for the given name.
-// It returns an error if the asset could not be found or
-// could not be loaded.
-func AssetInfo(name string) (os.FileInfo, error) {
- cannonicalName := strings.Replace(name, "\\", "/", -1)
- if f, ok := _bindata[cannonicalName]; ok {
- a, err := f()
- if err != nil {
- return nil, fmt.Errorf("AssetInfo %%s can't read by error: %%v", name, err)
- }
- return a.info, nil
- }
- return nil, fmt.Errorf("AssetInfo %%s not found", name)
-}
-
-// AssetNames returns the names of the assets.
-func AssetNames() []string {
- names := make([]string, 0, len(_bindata))
- for name := range _bindata {
- names = append(names, name)
- }
- return names
-}
-
-// _bindata is a table, holding each asset generator, mapped to its name.
-var _bindata = map[string]func() (*asset, error){
-`)
- return err
-}
-
-// writeTOCAsset write a TOC entry for the given asset.
-func writeTOCAsset(w io.Writer, asset *Asset, maxlen int) error {
- spacediff := maxlen - len(asset.Name)
- filler := strings.Repeat(" ", spacediff)
-
- _, err := fmt.Fprintf(w, "\t%q: %s%s,\n", asset.Name, filler, asset.Func)
- return err
-}
-
-// writeTOCFooter writes the table of contents file footer.
-func writeTOCFooter(w io.Writer) error {
- _, err := fmt.Fprintf(w, `}
-
-`)
- return err
-}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index c600a119d..9587e4699 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -29,10 +29,6 @@ github.com/felixge/httpsnoop
github.com/fsnotify/fsnotify
# github.com/ghodss/yaml v1.0.0
github.com/ghodss/yaml
-# github.com/go-bindata/go-bindata v3.1.2+incompatible
-## explicit
-github.com/go-bindata/go-bindata
-github.com/go-bindata/go-bindata/go-bindata
# github.com/go-logr/logr v0.4.0
github.com/go-logr/logr
# github.com/go-logr/zapr v0.4.0