From 0a4850b9509247679da2e40346c9fbd3a604c4fe Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Mon, 25 Oct 2021 11:34:48 +0800 Subject: [PATCH] Set default propagation policy to background (#101) Signed-off-by: Jian Qiu --- Makefile | 3 - deploy/fs.go | 6 + go.mod | 1 - go.sum | 1 - pkg/dependencymagnet/doc.go | 1 - pkg/helper/helpers.go | 6 + test/e2e/bindata/bindata.go | 601 ------------------ test/e2e/deployer.go | 25 +- test/e2e/work_agent_test.go | 129 +++- .../go-bindata/go-bindata/.gitignore | 16 - .../go-bindata/go-bindata/CONTRIBUTING.md | 79 --- .../github.com/go-bindata/go-bindata/LICENSE | 3 - .../github.com/go-bindata/go-bindata/Makefile | 2 - .../go-bindata/go-bindata/README.md | 199 ------ .../go-bindata/go-bindata/_config.yml | 1 - .../github.com/go-bindata/go-bindata/asset.go | 12 - .../go-bindata/go-bindata/bytewriter.go | 44 -- .../go-bindata/go-bindata/config.go | 208 ------ .../go-bindata/go-bindata/convert.go | 261 -------- .../github.com/go-bindata/go-bindata/debug.go | 108 ---- .../github.com/go-bindata/go-bindata/doc.go | 129 ---- .../github.com/go-bindata/go-bindata/file.go | 102 --- .../go-bindata/go-bindata/.gitignore | 1 - .../go-bindata/go-bindata/AppendSliceValue.go | 22 - .../go-bindata/go-bindata/go-bindata/main.go | 108 ---- .../go-bindata/go-bindata/version.go | 31 - .../go-bindata/go-bindata/release.go | 473 -------------- .../go-bindata/go-bindata/restore.go | 62 -- .../go-bindata/go-bindata/stringwriter.go | 36 -- .../github.com/go-bindata/go-bindata/toc.go | 288 --------- vendor/modules.txt | 4 - 31 files changed, 136 insertions(+), 2826 deletions(-) create mode 100644 deploy/fs.go delete mode 100644 test/e2e/bindata/bindata.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/.gitignore delete mode 100644 vendor/github.com/go-bindata/go-bindata/CONTRIBUTING.md delete mode 100644 vendor/github.com/go-bindata/go-bindata/LICENSE delete mode 100644 vendor/github.com/go-bindata/go-bindata/Makefile delete mode 100644 vendor/github.com/go-bindata/go-bindata/README.md delete mode 100644 vendor/github.com/go-bindata/go-bindata/_config.yml delete mode 100644 vendor/github.com/go-bindata/go-bindata/asset.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/bytewriter.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/config.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/convert.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/debug.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/doc.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/file.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/go-bindata/.gitignore delete mode 100644 vendor/github.com/go-bindata/go-bindata/go-bindata/AppendSliceValue.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/go-bindata/main.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/go-bindata/version.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/release.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/restore.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/stringwriter.go delete mode 100644 vendor/github.com/go-bindata/go-bindata/toc.go 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 - -[![Go Report Card](https://goreportcard.com/badge/github.com/go-bindata/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