From c8ffef98902e854be529211fdad7a7536bdf11c2 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Mon, 8 Feb 2021 15:42:29 -0500 Subject: [PATCH 01/20] Replace Kustomize with a new hypershift CLI Kustomize was being used for: 1. Installation 2. Example cluster generation In these narrow use cases, it's not clear Kustomize makes things easier, and it also propagates dependencies downstream as we move into the CI system. This commit replaces Kustomize entirely by providing a new `hypershift` CLI tool which knows how to install the application and also generate example clusters. This approach should enable a more portable integration point with CI and also remove dependencies for users wanting to kick the tires of HyperShift. Here are some other ways users can take advantage: 1. Use the `hypershift` binary directly through a release or (potentially) `go get` 2. Run `hypershift` using a container engine 3. Run `hypershift` in an OpenShift cluster using `oc run` Another side effect of the move to a 100% native Go solution is that the fixtures representing things like an example cluster can be more clearly shared with the e2e test infrastructure, which this commit also implements. As a further simplification and cleanup, the external Ginkgo binary is removed and the `go test` tool is now the entrypoint for all testing. Lastly, this commit adds support for looking up the OCP release image so that reliable defaults can be used in all contexts (while providing easy flags to override it.) --- Makefile | 15 +- config/cluster-api/kustomization.yaml | 15 - config/hypershift-operator/kustomization.yaml | 29 - .../operator-clusterrolebinding.yaml | 12 - .../operator-namespace.yaml | 4 - .../operator-serviceaccount.yaml | 5 - config/install/development/kustomization.yaml | 20 - config/install/production/kustomization.yaml | 11 - internal/cmd/install/assets/bindata.go | 715 ++++++++++++++++++ .../cluster.x-k8s.io_clusters.yaml | 2 - .../cluster.x-k8s.io_machinedeployments.yaml | 2 - .../cluster.x-k8s.io_machinehealthchecks.yaml | 2 - .../cluster.x-k8s.io_machines.yaml | 2 - .../cluster.x-k8s.io_machinesets.yaml | 2 - ...tructure.cluster.x-k8s.io_awsclusters.yaml | 2 - ...ture.cluster.x-k8s.io_awsmachinepools.yaml | 2 - ...tructure.cluster.x-k8s.io_awsmachines.yaml | 2 - ....cluster.x-k8s.io_awsmachinetemplates.yaml | 2 - ...e.cluster.x-k8s.io_awsmanagedclusters.yaml | 2 - ...uster.x-k8s.io_awsmanagedmachinepools.yaml | 2 - internal/cmd/install/assets/cluster_api.go | 69 ++ ...ft.openshift.io_externalinfraclusters.yaml | 2 - ...ypershift.openshift.io_hostedclusters.yaml | 2 - ...hift.openshift.io_hostedcontrolplanes.yaml | 2 - .../hypershift.openshift.io_nodepools.yaml | 2 - .../operator-clusterrole.yaml | 0 .../operator-deployment.yaml | 0 .../cmd/install/assets/hypershift_operator.go | 133 ++++ internal/cmd/install/assets/util.go | 41 + internal/cmd/install/install.go | 184 +++++ main.go | 42 + 31 files changed, 1196 insertions(+), 129 deletions(-) delete mode 100644 config/cluster-api/kustomization.yaml delete mode 100644 config/hypershift-operator/kustomization.yaml delete mode 100644 config/hypershift-operator/operator-clusterrolebinding.yaml delete mode 100644 config/hypershift-operator/operator-namespace.yaml delete mode 100644 config/hypershift-operator/operator-serviceaccount.yaml delete mode 100644 config/install/development/kustomization.yaml delete mode 100644 config/install/production/kustomization.yaml create mode 100644 internal/cmd/install/assets/bindata.go rename {config => internal/cmd/install/assets}/cluster-api/cluster.x-k8s.io_clusters.yaml (99%) rename {config => internal/cmd/install/assets}/cluster-api/cluster.x-k8s.io_machinedeployments.yaml (99%) rename {config => internal/cmd/install/assets}/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml (99%) rename {config => internal/cmd/install/assets}/cluster-api/cluster.x-k8s.io_machines.yaml (99%) rename {config => internal/cmd/install/assets}/cluster-api/cluster.x-k8s.io_machinesets.yaml (99%) rename {config => internal/cmd/install/assets}/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml (99%) rename {config => internal/cmd/install/assets}/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml (99%) rename {config => internal/cmd/install/assets}/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml (99%) rename {config => internal/cmd/install/assets}/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml (99%) rename {config => internal/cmd/install/assets}/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml (99%) rename {config => internal/cmd/install/assets}/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml (99%) create mode 100644 internal/cmd/install/assets/cluster_api.go rename {config => internal/cmd/install/assets}/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml (99%) rename {config => internal/cmd/install/assets}/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml (99%) rename {config => internal/cmd/install/assets}/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml (99%) rename {config => internal/cmd/install/assets}/hypershift-operator/hypershift.openshift.io_nodepools.yaml (99%) rename {config => internal/cmd/install/assets}/hypershift-operator/operator-clusterrole.yaml (100%) rename {config => internal/cmd/install/assets}/hypershift-operator/operator-deployment.yaml (100%) create mode 100644 internal/cmd/install/assets/hypershift_operator.go create mode 100644 internal/cmd/install/assets/util.go create mode 100644 internal/cmd/install/install.go create mode 100644 main.go diff --git a/Makefile b/Makefile index 09c26da466fc..b374cd802be4 100644 --- a/Makefile +++ b/Makefile @@ -28,25 +28,31 @@ endif all: build manifests -build: hypershift-operator control-plane-operator hosted-cluster-config-operator +build: hypershift-operator control-plane-operator hosted-cluster-config-operator hypershift verify: build fmt vet # Generate code generate: + $(BINDATA) -mode 420 -modtime 1 -pkg assets \ + -o ./internal/cmd/install/assets/bindata.go \ + --prefix internal/cmd/install/assets \ + --ignore bindata.go \ + ./internal/cmd/install/assets/... + gofmt -s -w ./internal/cmd/install/assets/bindata.go + $(BINDATA) -mode 420 -modtime 1 -pkg assets \ -o ./hypershift-operator/controllers/hostedcluster/assets/bindata.go \ --prefix hypershift-operator/controllers/hostedcluster/assets \ --ignore bindata.go \ ./hypershift-operator/controllers/hostedcluster/assets/... + gofmt -s -w ./hypershift-operator/controllers/hostedcluster/assets/bindata.go $(BINDATA) -mode 420 -modtime 1 -pkg assets \ -o ./control-plane-operator/controllers/hostedcontrolplane/assets/bindata.go \ --prefix control-plane-operator/controllers/hostedcontrolplane/assets \ --ignore bindata.go \ ./control-plane-operator/controllers/hostedcontrolplane/assets/... - - gofmt -s -w ./hypershift-operator/controllers/hostedcluster/assets/bindata.go gofmt -s -w ./control-plane-operator/controllers/hostedcontrolplane/assets/bindata.go $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." @@ -62,6 +68,9 @@ control-plane-operator: generate hosted-cluster-config-operator: generate $(GO_BUILD_RECIPE) -o bin/hosted-cluster-config-operator ./hosted-cluster-config-operator +hypershift: generate + $(GO_BUILD_RECIPE) -o bin/hypershift . + # Run tests test: build $(GO) test ./... -coverprofile cover.out diff --git a/config/cluster-api/kustomization.yaml b/config/cluster-api/kustomization.yaml deleted file mode 100644 index 4c2acf0e8158..000000000000 --- a/config/cluster-api/kustomization.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: -- cluster.x-k8s.io_clusters.yaml -- cluster.x-k8s.io_machinesets.yaml -- cluster.x-k8s.io_machines.yaml -- cluster.x-k8s.io_machinedeployments.yaml -- cluster.x-k8s.io_machinehealthchecks.yaml -- infrastructure.cluster.x-k8s.io_awsclusters.yaml -- infrastructure.cluster.x-k8s.io_awsmachinepools.yaml -- infrastructure.cluster.x-k8s.io_awsmachines.yaml -- infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml -- infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml -- infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml diff --git a/config/hypershift-operator/kustomization.yaml b/config/hypershift-operator/kustomization.yaml deleted file mode 100644 index 3712483a4799..000000000000 --- a/config/hypershift-operator/kustomization.yaml +++ /dev/null @@ -1,29 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: - - hypershift.openshift.io_hostedclusters.yaml - - hypershift.openshift.io_hostedcontrolplanes.yaml - - hypershift.openshift.io_externalinfraclusters.yaml - - hypershift.openshift.io_nodepools.yaml - - operator-namespace.yaml - - operator-serviceaccount.yaml - - operator-clusterrole.yaml - - operator-clusterrolebinding.yaml - - operator-deployment.yaml - -patchesStrategicMerge: -- |- - apiVersion: apiextensions.k8s.io/v1 - kind: CustomResourceDefinition - metadata: - name: externalinfraclusters.hypershift.openshift.io - labels: - cluster.x-k8s.io/v1alpha4: v1alpha1 -- |- - apiVersion: apiextensions.k8s.io/v1 - kind: CustomResourceDefinition - metadata: - name: hostedcontrolplanes.hypershift.openshift.io - labels: - cluster.x-k8s.io/v1alpha4: v1alpha1 diff --git a/config/hypershift-operator/operator-clusterrolebinding.yaml b/config/hypershift-operator/operator-clusterrolebinding.yaml deleted file mode 100644 index 4d52f725c3c6..000000000000 --- a/config/hypershift-operator/operator-clusterrolebinding.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: hypershift-operator -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: hypershift-operator -subjects: -- kind: ServiceAccount - name: operator - namespace: hypershift diff --git a/config/hypershift-operator/operator-namespace.yaml b/config/hypershift-operator/operator-namespace.yaml deleted file mode 100644 index 40f416f36507..000000000000 --- a/config/hypershift-operator/operator-namespace.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: hypershift diff --git a/config/hypershift-operator/operator-serviceaccount.yaml b/config/hypershift-operator/operator-serviceaccount.yaml deleted file mode 100644 index 6527f95d495f..000000000000 --- a/config/hypershift-operator/operator-serviceaccount.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - namespace: hypershift - name: operator diff --git a/config/install/development/kustomization.yaml b/config/install/development/kustomization.yaml deleted file mode 100644 index ed6e6d491f06..000000000000 --- a/config/install/development/kustomization.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: -- ../../cluster-api -- ../../hypershift-operator - -images: -- name: hypershift - newName: registry.ci.openshift.org/hypershift/hypershift - newTag: latest - -patches: -- patch: |- - - op: replace - path: /spec/replicas - value: 0 - target: - kind: Deployment - name: operator diff --git a/config/install/production/kustomization.yaml b/config/install/production/kustomization.yaml deleted file mode 100644 index 53eedff9c5b9..000000000000 --- a/config/install/production/kustomization.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: -- ../../cluster-api -- ../../hypershift-operator - -images: -- name: hypershift - newName: registry.ci.openshift.org/hypershift/hypershift - newTag: latest diff --git a/internal/cmd/install/assets/bindata.go b/internal/cmd/install/assets/bindata.go new file mode 100644 index 000000000000..526191e1f0cb --- /dev/null +++ b/internal/cmd/install/assets/bindata.go @@ -0,0 +1,715 @@ +// Code generated by go-bindata. DO NOT EDIT. +// sources: +// internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml (25.281kB) +// internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml (49.917kB) +// internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml (13.35kB) +// internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml (35.413kB) +// internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml (44.842kB) +// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml (49.873kB) +// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml (20.329kB) +// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml (33.445kB) +// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml (28.198kB) +// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml (4.268kB) +// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml (10.107kB) +// internal/cmd/install/assets/cluster_api.go (3.319kB) +// internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml (2.916kB) +// internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml (4.157kB) +// internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml (4.494kB) +// internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml (5.227kB) +// internal/cmd/install/assets/hypershift-operator/operator-clusterrole.yaml (1.421kB) +// internal/cmd/install/assets/hypershift-operator/operator-deployment.yaml (644B) +// internal/cmd/install/assets/hypershift_operator.go (3.817kB) +// internal/cmd/install/assets/util.go (989B) + +package assets + +import ( + "bytes" + "compress/gzip" + "crypto/sha256" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("read %q: %w", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("read %q: %w", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo + digest [sha256.Size]byte +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _clusterApiClusterXK8sIo_clustersYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5d\x5f\x73\xdb\x36\x12\x7f\xf7\xa7\xd8\x49\x1f\xd2\xce\x58\x94\xe3\xa4\xed\x8d\x66\xee\x21\x97\x34\x1d\xdf\x35\x89\xc6\x76\xf3\xd2\xe9\xc3\x8a\x58\x8a\xa8\x41\x80\x07\x80\x72\xd4\x4e\xbf\xfb\xcd\x02\x20\x45\xc9\xd4\x9f\xb8\xd7\xde\x5d\x8f\x7c\x49\x04\x82\xc0\xfe\xdf\x1f\x80\xc5\x18\x6b\xf9\x81\xac\x93\x46\xcf\x00\x6b\x49\x1f\x3d\x69\xfe\xe5\xb2\xbb\xbf\xb8\x4c\x9a\xe9\xea\xd9\xd9\x9d\xd4\x62\x06\xaf\x1a\xe7\x4d\x75\x4d\xce\x34\x36\xa7\xd7\x54\x48\x2d\xbd\x34\xfa\xac\x22\x8f\x02\x3d\xce\xce\x00\x50\x6b\xe3\x91\x9b\x1d\xff\x04\xc8\x8d\xf6\xd6\x28\x45\x76\xb2\x24\x9d\xdd\x35\x0b\x5a\x34\x52\x09\xb2\x61\xf0\x76\xea\xd5\x45\xf6\x22\x7b\x36\xb9\xc8\x2e\x2f\x2e\x2f\x9e\x5d\x5c\x5c\x5e\x5c\x5c\x7c\x7d\x79\x31\xf9\xf2\xeb\xcb\x2f\x2f\x10\xf3\x67\x5f\x17\x5f\x9d\x01\xe4\x96\xc2\xe0\xb7\xb2\x22\xe7\xb1\xaa\x67\xa0\x1b\xa5\xce\x00\x34\x56\x34\x83\x5c\x35\xce\x93\x75\x59\xfa\x4f\xf6\x71\x12\xd9\x38\x73\x35\xe5\x4c\xd1\xd2\x9a\xa6\xee\x3a\x6e\xde\xc7\x11\x5a\xa2\xd1\xd3\xd2\x58\xd9\xfe\x9e\xb4\xfd\x27\x58\xcb\xd0\x92\x44\x12\x5b\x43\x8b\x92\xce\xff\xa3\xdf\xfa\x9d\x74\x3e\xbc\xa9\x55\x63\x51\x6d\x88\x0b\x8d\xae\x34\xd6\xbf\xdb\x4c\xc9\x53\xc4\x17\x52\x2f\x1b\x85\xb6\xeb\x7f\x06\xe0\x72\x53\xd3\x0c\x42\xf7\x1a\x73\x12\x67\x00\x49\x74\xe1\xf3\x09\xa0\x10\x41\x19\xa8\xe6\x56\x6a\x4f\xf6\x95\x51\x4d\xa5\xbb\xc1\x05\xb9\xdc\xca\xda\x07\x61\x27\x02\xc1\x79\xf4\x8d\x03\xd7\xe4\x25\xa0\x83\x39\x69\x21\xf5\x72\x3a\xb7\x66\x25\x79\xec\xad\x1f\x24\xa6\xaf\x49\x91\xe7\xc6\x37\x28\x55\x20\x82\x9f\x9f\x9c\xd1\x73\xf4\xe5\x0c\xb2\x38\x60\x56\x97\xe8\x28\xbd\x8d\x7a\x99\xf7\x5a\xfc\x9a\x79\x71\xde\x4a\xbd\x3c\xdb\x74\x59\x3d\x43\x55\x97\xf8\x3c\x0a\x21\x2f\xa9\xc2\x59\xfa\xc2\xd4\xa4\x5f\xce\xaf\x3e\x3c\xbf\xd9\x6a\x86\x61\xae\xa4\x03\x5f\x12\xc4\xbe\x50\x18\x1b\x7e\xb6\xc2\x87\x97\xf3\xab\xee\xfb\xda\x9a\x9a\xac\xef\xf4\x1c\x9f\x9e\x4b\xf4\x5a\x77\x66\x7b\xca\x04\xc5\x5e\x20\xd8\x17\x28\x4e\x9b\xd4\x42\x22\xf1\x00\xa6\x00\x5f\x4a\x07\x96\x6a\x4b\x8e\x74\xf4\x0e\x6e\x46\x0d\x66\xf1\x13\xe5\x3e\x83\x1b\xb2\xfc\x21\x5b\x45\xa3\x04\x3b\xcd\x8a\xac\x07\x4b\xb9\x59\x6a\xf9\x73\x37\x9a\x03\x6f\xc2\x34\x0a\x3d\x39\x0f\x41\xd5\x1a\x15\xac\x50\x35\x74\x0e\xa8\x05\x54\xb8\x06\x4b\x3c\x2e\x34\xba\x37\x42\xe8\xe2\x32\x78\x6b\x2c\x81\xd4\x85\x99\x41\xe9\x7d\xed\x66\xd3\xe9\x52\xfa\xd6\xdd\x73\x53\x55\x8d\x96\x7e\x3d\x0d\x9e\x2b\x17\x8d\x37\xd6\x4d\x05\xad\x48\x4d\x9d\x5c\x4e\xd0\xe6\xa5\xf4\x94\xfb\xc6\xd2\x14\x6b\x39\x09\xc4\xea\xe0\xf2\x59\x25\x3e\xb3\x29\x40\xb8\xa7\x5b\xc2\x7b\xa0\xf5\xf8\x04\x3f\x3a\x20\x65\xf6\x28\xd6\x28\xa6\x4f\x23\x17\x1b\x61\x72\x13\xcb\xe3\xfa\x9b\x9b\x5b\x68\xa7\x8e\x02\x8f\xb2\xdd\x74\x75\x1b\x31\xb3\x88\xa4\x2e\xc8\xc6\x9e\x85\x35\x55\x18\x85\xb4\xa8\x8d\xd4\x3e\x59\x8c\x24\xed\xc1\x35\x8b\x4a\x7a\xd6\xdf\x3f\x1b\x72\x9e\x35\x90\xc1\xab\x10\xe7\x60\x41\xd0\xd4\x02\x3d\x89\x0c\xae\x34\xbc\xc2\x8a\xd4\x2b\x74\xf4\xbb\x0b\x99\xa5\xe9\x26\x2c\xbc\xd3\xc4\xdc\x0f\xd1\xbb\x9d\xa3\x9c\x7a\x2f\xda\x50\xb9\x47\x27\xc9\xcf\x6e\x6a\xca\xb7\x2c\x5f\x90\x93\x96\x2d\xd5\xa3\x27\xb6\xef\x7e\x74\x3c\xec\x71\xfc\x24\x07\x7d\x47\xfe\xde\xd8\xbb\xdd\xb7\x7b\x7c\x5d\xc7\xde\xec\x30\x85\x5c\x36\x36\xf8\x56\xf6\xe0\xdb\xfd\xb3\x42\xf4\xf7\x68\x18\x73\x63\xfd\x50\x87\x9d\xc9\x5f\xce\xaf\x36\xfd\x83\xb4\x64\x21\x93\x10\x6a\x6e\xe2\xff\xbc\x9c\x5f\x25\x73\x6b\x9d\x7a\xc1\xa6\xcc\xc6\xf3\x9a\x0a\x6c\x54\xb0\x24\xf8\xea\xc5\x8b\xe7\x0f\xe9\xe5\xa7\x30\xb6\x42\x3f\x63\x17\x7f\x7e\x39\xd8\x23\xaa\x8f\x43\xc0\x72\x47\xca\x89\x6b\x23\x06\xf9\xdd\x61\xe7\xb6\xa4\x4e\x8e\x16\xf5\x92\x92\x43\xdc\x97\x32\x2f\x61\x6e\x44\xfb\xd6\x01\x5a\x02\x54\xca\xe4\xc1\xe4\x07\x87\x3e\x2c\x6a\x7e\x72\x29\xec\xdf\x94\xc9\xef\xf6\xf6\x00\x90\x9e\xaa\x03\xaf\xf7\xda\xf9\x50\x27\xb4\x16\xd7\x83\x7d\xd8\xa5\xd9\x64\x87\x27\x9a\xf4\x28\x3d\x20\xff\x07\xee\xd3\x3e\x8e\xec\x4a\xe6\xf4\xda\x54\x28\xf5\x09\x7a\x88\x1d\x43\x36\x0c\x59\x2b\x7d\xef\x86\xe5\x7c\x44\x00\xed\xc7\xbf\x59\xff\x69\x20\xf8\x70\x35\x1f\xf5\x3f\x34\xfc\x1e\xfd\x1f\x78\x99\x20\xf1\x5c\xa1\xa6\x6f\x52\xc6\x39\x16\xef\x06\x3e\xe9\x65\xb6\xed\xe4\xd5\x38\xe2\x40\x03\x29\xcb\xb0\xb2\xe0\x5e\xfa\x32\x66\xb5\x38\x12\xd4\x3c\xd4\xa7\x46\xca\xd2\xb8\x53\x02\x24\x5b\x14\x77\x0d\xa6\x6c\x74\xb2\xa4\x36\x2a\xba\x18\x15\xa5\x8b\xb6\xa5\x97\x8f\x32\xf0\xfa\xb4\x58\x7d\xdb\xc6\xe4\xc7\x92\xf1\x5b\xc3\xf0\x7e\x1b\x9b\x04\x19\x0d\x34\x33\xbd\x8f\xb5\xa7\x6b\x2a\x3e\xc1\x94\xae\xa9\x08\xe0\x4a\x83\xa9\xe3\xea\x01\x2c\x15\x64\x49\x33\x88\x32\x80\x6c\x0f\x2b\x29\xc8\x4e\x52\x9a\xcb\xfb\x20\x0b\x3d\x94\x46\x89\x36\xfd\x7b\x94\xca\x85\xd0\x55\xf7\x56\x10\xe1\x65\x9a\x14\xc2\xac\xa1\x0b\xb6\x39\xfc\x11\xd9\x7a\x10\x9d\x0f\x32\xcb\x8a\x4e\x88\x3c\x02\x71\x6a\x19\xf4\x8f\xb2\xba\x42\x92\x12\x61\xb1\x73\x7c\xee\xa7\x57\x45\x9c\x2c\xe0\xd6\x28\x4d\x49\x39\x6d\x41\x7f\x90\xda\x79\x42\x91\x1a\x19\xe2\x59\x4a\xef\xce\x23\x3a\x4d\xc0\x77\xb3\x34\xf0\x9c\x26\x90\x91\xb0\x14\xf0\xf7\x9b\xf7\xef\xa6\xdf\x9a\x48\x19\x60\x9e\x93\x73\x11\x82\x55\xa4\xfd\x79\xb7\xb8\x4b\xe8\xec\x86\xdf\x64\x15\x6a\x59\x90\xf3\x59\x1a\x8d\xac\xfb\xe1\xf2\xc7\x0c\xde\x18\x0b\xf4\x11\xab\x5a\xd1\x39\xc8\x28\xaf\x0e\x46\xb7\x76\x21\x5d\x64\xa6\xfb\x36\x04\x97\x40\x52\x6d\x44\x22\xfa\x3e\x10\xeb\xf1\x2e\x04\x00\x4c\xb0\x5d\xc9\x3b\x9a\xc1\x13\xb6\xa5\xde\xd4\xbf\x70\x9c\xf8\xf5\x09\x7c\x7e\x5f\x92\x25\x78\xc2\x3f\x9f\xc4\x09\xbb\xf5\x4e\x0c\x25\x45\x17\xc2\xe2\xc4\xc1\x04\xbd\x95\xcb\x25\x31\xf2\x0c\x51\x90\x61\xf2\x17\x60\x2c\xd3\xaf\x4d\xaf\x73\x18\x82\xe5\x99\x00\x9b\x78\x40\xc8\x0f\x97\x3f\x3e\x81\xcf\xb7\xf9\x02\xa9\x05\x7d\x84\x4b\x90\x3a\x72\x56\x1b\xf1\x45\x06\xb7\x41\x33\x6b\xed\xf1\x23\x8f\x99\x97\xc6\x91\x06\xa3\xd5\x9a\x29\x2e\x71\x45\xe0\x4c\x45\x70\x4f\x4a\x4d\x22\x4a\x16\x70\x8f\x6b\xe6\xa1\x15\x25\x6b\x15\xa1\x46\x8e\x4e\x5b\xab\xc1\xdb\xf7\xaf\xdf\xcf\xe2\x6c\xac\xb6\xa5\xe6\x29\x78\xbd\x51\x48\x76\x51\x5e\xe4\xc5\x75\x4b\xd0\x39\x13\xd2\x44\x25\x71\xd0\x2f\x39\x85\x47\x6a\x09\x8a\x86\x57\x10\xd9\xd3\xc7\xd8\xfa\xc3\xa5\xd9\xb0\x99\x87\x25\xda\xae\x73\xfd\xc7\x16\x40\x27\x32\x17\xf6\x1c\x4e\x60\xee\x5d\xcf\xee\x0e\x32\x77\xd7\x2c\xc8\x6a\xf2\x14\xf8\x13\x26\x77\xcc\x5a\x4e\xb5\x77\x53\xb3\xe2\x0c\x43\xf7\x53\xc6\x58\x52\x2f\x27\x6c\x58\x93\xa8\x6d\x37\x0d\xfb\x4e\xd3\xcf\xc2\x3f\x8f\xe6\x25\x6c\x0b\x9d\xca\x50\xe8\xfc\x47\x70\xc5\xf3\xb8\xe9\xa3\x98\x6a\xd3\xcc\xe9\xb1\xfe\xe9\xcd\x6e\x8a\x6a\xf7\x67\xbc\xe9\x72\x7f\xd8\x88\xe9\x45\xb2\x0a\x45\x0c\x75\xa8\xd7\xbf\xbb\xd1\xb2\xe8\x1a\xcb\x73\xaf\x27\x29\x69\x4f\x50\x0b\xfe\xbf\x93\xce\x73\xfb\xa3\x64\xd5\xc8\x93\x1c\xf5\xfb\xab\xd7\x7f\x8c\x29\x37\xf2\x51\x5e\x79\x00\xe2\x48\x5d\x58\x74\xde\x36\x41\xb6\xc7\x41\xce\xd5\x6e\xff\xb8\x87\xf4\xef\x07\x37\xdb\x84\x25\x64\x93\xb7\x3b\x91\x1a\x1c\x4a\xd1\xcd\x33\x42\x9d\x11\xea\x8c\x50\x67\x84\x3a\x23\xd4\x19\xa1\x4e\xef\x19\xa1\xce\xe9\xb2\xfa\xf3\x43\x9d\x1a\x1b\x37\xb4\x5d\xb4\xc5\xe0\x3c\x74\x82\x1c\x75\x38\x83\x4a\x1b\x7e\xb5\x0d\x29\xa1\x77\xe6\x9e\xb6\x72\x6b\x6b\x38\x59\x76\xbb\x31\x09\x9f\x70\x74\x45\xa5\x40\x7a\x07\xe8\x9c\xc9\x25\x7a\x12\x89\xac\x81\x7d\xe7\x48\xf5\xc2\x18\x45\xa8\x4f\x3a\x49\x0a\xe7\xc1\x27\x9c\x25\xc5\x83\xe8\xfe\x69\x92\x59\x84\x0d\xba\xc7\x1f\x27\x19\x1d\x4f\xc4\x07\x90\xd5\xee\x7e\x58\xea\xd8\xcd\x1f\x2d\xd7\x77\x7b\xdf\x1d\x09\xbd\x83\xe4\x87\xd2\xd9\xbb\x67\x3d\x3c\x5d\x37\x5b\xc8\x86\x3c\xd5\xe6\x60\xb8\xd3\x10\x83\xba\x0e\x93\x32\xab\x98\xb6\xe9\x02\x49\x43\xb8\xee\xd8\xfe\xbb\x42\xe7\x6f\x2d\x6a\x27\xdb\x3a\x8a\x7d\xdb\xec\x5b\x64\x7f\x87\xce\x83\x97\x15\xb5\xb0\x24\x31\xe1\xbb\xa1\x48\x44\x5b\x33\x9a\xda\xc2\x02\xc6\x4e\xda\xf8\x92\x6c\x8b\x22\xd2\x49\x18\xc1\x7d\x49\x31\x6d\x37\x5a\x90\x55\x6b\x36\xcd\xcd\xa8\x31\xb3\x8b\x0c\xae\x8a\x08\x7c\x12\x28\xb8\xd3\xe6\x5e\x33\xec\x22\x0d\x4d\x67\xce\x81\xac\x6e\x40\x16\x59\x44\x0b\x69\x94\x00\xfd\x73\xf6\x69\x5c\xa8\x41\x99\x41\x6f\x9f\x57\xa0\xa7\x09\x8f\xb8\xa7\xdf\xd1\x83\x87\x8a\x9c\xc3\xe5\x69\x52\x7d\x09\x65\x53\xa1\x06\x4b\x28\x98\xb8\xf6\x63\x46\x62\x32\xc7\x70\xba\xdd\x2e\x3d\x70\x61\x9a\x78\xb4\xb8\x91\x79\x12\x6b\x64\xb7\xc2\x35\x4b\x96\xaa\xda\xaf\xf7\x71\x79\x94\x7a\x4b\xe8\xf6\xa5\xa0\x81\xad\xf5\xd8\x7d\x53\x64\xd1\x6a\xf0\xa9\x0b\x86\xd6\x23\x95\x61\x5a\xef\x7c\x9c\x3f\xee\x56\x5d\xac\x32\xa6\x3e\x2f\x8d\x71\x41\x95\x6c\x33\x0c\x6c\x59\xe9\xdb\xf8\x2f\x24\x10\x11\x30\x30\xc2\xb2\x41\x8b\xda\x13\x09\x1e\xe3\x81\x34\xd2\x11\xfd\x6f\x93\x88\xa3\x15\x59\xe9\xd7\x27\xc9\xe4\x26\x75\x6e\x97\x7c\xc1\xbb\xe9\x63\xad\x64\x2e\x3d\xe4\x0a\x9d\x63\x8e\x3b\x4f\xbf\x8e\xf2\xcb\x0d\xa7\x66\x17\xf1\x7f\xe3\x38\x6e\x1b\x0b\x15\xe6\x65\x8c\x47\xa8\x41\x56\x15\x09\x8e\xcf\x6a\x1d\x7d\xc6\xf9\x08\x8e\x69\x13\xae\xa4\x6f\xe2\xc8\x21\xb0\xe7\x9e\xcd\xde\x58\x21\xf5\x52\xad\xa3\xc8\x3b\xfa\xa2\x90\xde\x7e\x7f\x73\xcb\x12\x72\xe4\x23\xa0\x0f\x5e\x14\xa3\xf1\x5f\xdf\xa0\x72\x7b\xdd\xe5\xb8\xd8\x06\x42\xff\x3e\xa1\xc5\x68\xb1\x59\xf2\x44\x1b\x3a\x0f\xa1\xc4\x14\x70\x6b\x1b\x3a\x87\x40\xce\x39\x7c\xaf\x43\x10\x78\x34\x5d\xa1\xc3\x49\xe6\xbd\xae\xc3\xec\x9b\xa8\xd4\xb7\xe0\xb0\xea\x62\xc3\x37\x59\x5a\x45\x66\xb9\xa9\xa6\xfd\x0a\x10\xd4\x6b\xc8\xba\xaf\x33\x9e\x38\xd5\xe0\x84\x73\xd4\x0e\x09\xb1\x9a\xac\x71\xae\x0b\xf4\x2e\x2c\x1e\xe1\xe5\x0a\xa5\xe2\xa8\x70\x0e\x8b\x86\x0d\x39\xe7\xa4\x0f\x68\x17\xd2\x5b\xb4\xeb\x5e\x8a\xeb\x01\x81\xa2\x51\xf0\xb9\x23\x82\x4c\x1b\x41\x6d\x45\xd6\xa6\xeb\x17\x21\x7c\x02\x2e\xa4\x62\x3b\xf0\x06\x04\xe5\x46\x17\x4a\xe6\x21\xcc\xca\xaa\x36\xd6\xe3\xbe\x4d\x83\x13\xc0\xec\xfe\x33\xd5\x49\xb2\x8a\xc1\x57\x3c\xee\xc0\x8b\x13\x0e\x59\x87\x0e\x78\xfb\x67\x62\x57\x5a\x7a\x89\x4a\xfe\x7c\x14\x56\xbd\x1a\xfe\xaa\x4b\xd5\xb2\x78\x78\x86\x0a\x25\x3a\x58\x10\xb1\x7d\x74\x5f\x7c\x0a\x76\xda\x3d\xc0\x43\x31\x10\x6b\x0e\x1c\xe1\xa1\x58\x1f\x26\x30\x2c\x04\x50\x0c\x84\xc0\x43\x44\x15\x28\x55\x63\x53\xf9\xc2\x80\x23\xf7\x2b\x0e\x0f\x41\x8e\x2d\xca\xdf\xf4\x07\x0d\x15\x44\x0f\xab\xf5\xfa\xd8\x27\x11\x01\x22\x52\x91\xc1\x95\x0f\x05\x08\xf7\x6e\x0b\xe4\x7a\xd3\x8f\x89\xa5\xb9\x87\x8a\xbd\x6f\xe7\xeb\xde\xce\x5c\xde\x3b\xf2\x54\x6b\x70\x35\xea\xe4\x85\x8f\xc1\x54\xe8\xe3\x12\x69\x7f\xcd\xc3\xa9\xc2\xea\xab\xe5\x60\x71\xc3\x36\x8c\xe8\xe6\x8f\xdb\x9c\x85\xa5\xb0\x15\x59\x41\x85\x75\x00\x94\x9b\x0e\x9c\x4a\xb6\xf7\x2c\xdb\xdd\x49\xa8\xe4\xb2\x0c\xd5\x03\x1c\xdc\x92\x1f\x1f\x8e\x02\x7b\x6b\x5f\xb6\x6d\xfa\xa4\x78\xdb\x37\x6a\x06\x3d\x64\xab\x8d\x49\x73\x5a\xdf\x52\x66\xdc\x0a\x92\x01\xd2\x05\xab\x61\xb2\x17\xeb\x1d\xcb\x6f\x33\xe8\x61\x2e\x86\xed\xff\x28\x97\xfb\x0d\x3b\xa9\xc1\x29\x19\xf7\x1e\x76\x48\x4f\xeb\x2b\x70\x6b\x9d\xb7\xa8\x99\x7d\x60\x8f\x5e\xf6\xb9\xed\x20\x59\x69\xaa\xb7\xfb\x40\xe8\x10\xd1\x6f\xb7\x41\x67\x58\x80\x61\x80\x9a\x96\x92\x41\xa1\x47\xc5\x04\x2d\x14\x55\xa1\x2a\x55\xe7\x52\xb5\xf8\x3b\xac\x45\x62\xed\xe9\xbd\x54\xaa\x05\x14\x61\xe7\xb4\x9b\x6f\x45\x40\xd6\x32\xaa\x89\xb3\xed\xe3\x6a\xd0\xea\x13\x57\xd7\x7b\xc0\xe9\x10\x53\x09\x59\xfd\x1e\x3c\x79\x73\x47\x3a\x6d\xf3\x6e\xd9\x60\x6d\xcd\xd2\x62\x55\xa1\x97\x79\x2c\xcd\xad\x2d\xf9\x3d\x35\x89\x07\xd8\xdd\x3d\xed\x38\x9e\x11\x76\xcf\x3b\x38\x27\xa4\xc8\xba\xb5\x78\xfd\x44\x13\x1b\xf6\x8c\x76\x69\xfe\x2d\xe9\xb4\x20\x3d\x42\xdd\xfb\x07\x1f\xb4\xc4\xa5\x32\xe6\xe5\xe6\x45\xb7\xee\x5f\xac\xfb\xa9\x4c\x0d\x11\xd9\xab\xcd\xf9\xea\xc5\x1e\x16\x86\xeb\x72\x42\x85\xfa\xb1\x3d\x16\xee\xb3\x5b\x64\xd5\x62\xed\x30\x40\x80\x87\xed\x5e\x4a\x9e\xc0\x77\x06\xdf\x64\xcb\xac\x2d\xa6\x3f\x87\xeb\x46\xeb\xf0\x9f\xdb\x10\xd1\xc2\xa2\xee\x1c\x62\x05\x3d\x90\xcf\x3f\xc1\x32\x06\xfd\xfe\x41\x63\x94\xdf\x0c\xbc\x6d\x22\xa0\x72\xde\x58\x0e\x06\x50\x30\x84\x8e\x4d\xcd\xa2\x43\x9b\xad\x18\x12\x62\x87\x5f\x7e\xfd\x73\xdd\x28\x88\x96\x31\xde\x28\x18\x6f\x14\x8c\x37\x0a\xc6\x1b\x05\x47\x68\x18\x6f\x14\x8c\x37\x0a\xfe\x4b\x2b\xca\xc7\x1b\x05\xff\xdf\xfa\x1f\x6f\x14\x8c\x37\x0a\x60\xbc\x51\x30\xde\x28\x18\xcb\xec\xc6\x32\xbb\xb1\xcc\x6e\x2c\xb3\x1b\xcb\xec\x3e\x89\xa9\xb1\xcc\xee\x74\x59\xfd\xf9\xcb\xec\xc6\x1b\x05\x47\xd5\x3b\x42\x9d\x11\xea\x8c\x50\x67\x84\x3a\x0f\x9e\x11\xea\x8c\x50\x67\x84\x3a\xff\x33\x50\x67\xbc\x51\x30\xde\x28\x18\x6f\x14\x8c\x37\x0a\xc6\x1b\x05\xe3\x8d\x82\xf1\x46\xc1\x78\xa3\x60\xbc\x51\x30\xde\x28\x18\x6f\x14\x8c\x37\x0a\x0e\x48\x75\xbc\x51\x30\xde\x28\x48\xcf\x78\xa3\x60\xbc\x51\x30\xde\x28\xe8\xb1\x30\xde\x28\xd8\xdc\x28\xd8\xb4\x1c\xbe\x50\xb0\xc1\xee\x71\xdd\x4c\xa2\xf7\xa7\x0f\xe2\xdf\x52\x78\xf2\x24\xfc\x68\xff\x58\x42\xf8\xd9\xdb\x72\x81\x1f\x7e\x3c\x8b\x13\x93\xf8\xd0\xfe\xe9\x03\x6e\xfc\x57\x00\x00\x00\xff\xff\xa7\x54\x9e\xd8\xc1\x62\x00\x00") + +func clusterApiClusterXK8sIo_clustersYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiClusterXK8sIo_clustersYaml, + "cluster-api/cluster.x-k8s.io_clusters.yaml", + ) +} + +func clusterApiClusterXK8sIo_clustersYaml() (*asset, error) { + bytes, err := clusterApiClusterXK8sIo_clustersYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/cluster.x-k8s.io_clusters.yaml", size: 25281, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x99, 0xe7, 0x93, 0x27, 0xa, 0x85, 0x51, 0xa6, 0x33, 0x92, 0xf5, 0x4a, 0x9a, 0x83, 0x31, 0xb3, 0x4a, 0xc8, 0x12, 0x28, 0x88, 0x27, 0x10, 0xae, 0xa3, 0xb7, 0x44, 0xae, 0xab, 0x2c, 0xb, 0x63}} + return a, nil +} + +var _clusterApiClusterXK8sIo_machinedeploymentsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3d\xed\x8e\x1b\xb9\x91\xff\xfd\x14\xc4\x04\x0b\xdb\x80\xa4\x91\xbd\xbb\xd9\xdc\x00\xf7\x63\xe2\xf1\xe6\xe6\xe2\xb5\x0d\x8f\x37\x87\x43\x36\xb8\x50\xdd\x25\x89\x19\x36\xd9\x21\xd9\xa3\xd1\x06\x01\xee\x35\xee\xf5\xee\x49\x0e\x55\x45\xf6\x87\xd4\xfa\x1a\x8f\x73\x6b\xa4\xf5\xc7\x9e\x6e\x36\x3f\x8a\xf5\x5d\x45\x96\x2c\xd5\x1f\xc0\x79\x65\xcd\x85\x90\xa5\x82\xfb\x00\x06\xff\xf2\x93\xdb\xdf\xf8\x89\xb2\xe7\x77\x2f\x9e\xdc\x2a\x93\x5f\x88\x57\x95\x0f\xb6\xf8\x00\xde\x56\x2e\x83\x2b\x98\x2b\xa3\x82\xb2\xe6\x49\x01\x41\xe6\x32\xc8\x8b\x27\x42\x48\x63\x6c\x90\xf8\xd8\xe3\x9f\x42\x64\xd6\x04\x67\xb5\x06\x37\x5e\x80\x99\xdc\x56\x33\x98\x55\x4a\xe7\xe0\xa8\xf3\x34\xf4\xdd\x74\xf2\xcd\xe4\xc5\x78\x3a\x79\x39\x7d\x39\x7d\x31\x9d\xbe\x9c\x4e\xa7\xdf\xbd\x9c\x8e\xbf\xfd\xee\xe5\xb7\x53\x29\xb3\x17\xdf\xcd\x7f\xfd\x44\x88\xcc\x01\x75\xfe\x51\x15\xe0\x83\x2c\xca\x0b\x61\x2a\xad\x9f\x08\x61\x64\x01\x17\xa2\x90\xd9\x52\x19\xc8\xa1\xd4\x76\x5d\x80\x09\x7e\x92\xe9\xca\x07\x70\x93\xfb\x31\x2f\xe8\x89\x2f\x21\xc3\xb9\x2d\x9c\xad\xca\x0b\xb1\xf5\x9e\xfb\x4a\xd3\x97\x01\x16\xd6\xa9\xf4\xf7\x38\xb5\x1f\xcb\x52\xd1\x13\x06\xce\x0f\x3c\xf0\x55\x3d\x30\xbd\xd3\xca\x87\xdf\xf7\xbf\x7f\xa3\x3c\xb7\x29\x75\xe5\xa4\xee\x9b\x3a\xbd\xf6\x4b\xeb\xc2\xdb\x66\x42\x63\x51\xe4\xfc\x42\x99\x45\xa5\xa5\xeb\xf9\xf2\x89\x10\x3e\xb3\x25\x5c\x08\xfa\xb0\x94\x19\xe0\x37\x11\xd8\xd4\xd1\x58\xc8\x3c\xa7\xed\x93\xfa\xbd\x53\x26\x80\x7b\x65\x75\x55\x98\x7a\x98\x1c\x7c\xe6\x54\x19\x68\x7b\xb6\xa6\x2f\x7c\x90\xa1\xf2\xc2\x57\xd9\x52\x48\x2f\x6e\x32\xa9\x95\x59\xfc\x58\x9e\xc7\xff\x5d\xd9\x95\x39\xff\x50\x19\xa3\xcc\xe2\xfc\x7b\xa9\x34\xe4\xe7\x3f\x9a\x5b\x63\x57\x86\x06\x10\xe2\x2f\xde\x9a\xf7\x32\x2c\x2f\xc4\x84\x3b\x9b\x94\x4b\xe9\x21\xbe\xe5\xfd\x7c\xdf\x7a\x12\xd6\xb8\x22\x1f\x9c\x32\x8b\xbe\x39\x7e\xb4\x41\x6a\x61\xaa\x62\x06\x4e\xd8\xb9\x30\xd6\x8c\x03\xb8\x42\x19\x19\x20\x4f\x50\xf2\x22\x48\xb7\x00\x7c\x32\x5b\x8b\xb0\x54\x7e\xc7\xde\xf5\x4d\xd0\x41\xa9\x55\x26\x7d\x67\x8e\x1f\xba\x0f\x79\x9a\x08\xd1\x05\xb8\x63\xe6\xe9\x40\xe6\xeb\x47\x9a\x9e\xcc\xd7\x1f\xfa\xe7\x28\xf3\xf5\x43\x27\x78\x34\x20\x1b\x0c\x14\x61\x29\x83\x58\xca\x3b\x10\x61\x09\xd8\xbd\x72\x90\x8b\x00\x45\xa9\x65\x00\x81\x34\xb8\x73\x19\x55\x99\xe3\x40\xbd\x0b\xf9\x91\xdf\x3d\x74\x29\x95\x91\x77\x52\x69\x39\xd3\xf0\x28\x10\x6f\xf5\xd7\x3f\xdd\xe6\xfd\xce\x29\x73\xcb\xbb\x17\x52\x97\x4b\xf9\x35\xd3\x76\xb6\x84\x42\x5e\xc4\x4f\x6c\x09\xe6\xf2\xfd\xf5\x1f\xbe\xbe\xe9\x3c\x16\x87\x48\x54\x79\x02\x3e\x7f\x25\xe6\xd6\xd1\x9f\xdb\x7c\x46\x5c\xbe\xbf\xae\xfb\x2c\x9d\x2d\xc1\x85\x9a\xe1\xf1\xaf\x25\x25\x5a\x4f\x37\x66\xf0\x14\x27\xc9\xad\x44\x8e\xe2\x01\x78\x02\x91\xef\x40\x1e\xd7\x85\x1b\x41\x70\x76\x50\x3a\xf0\x60\x58\x60\xe0\x63\x69\x84\x9d\xfd\x05\xb2\x30\x11\x37\xe0\xf0\x43\x64\x80\x95\xce\x51\x8e\xdc\x81\x0b\xc2\x41\x66\x17\x46\xfd\x5c\xf7\xe6\x45\xb0\x34\x0c\x22\x96\x0f\x04\x5a\x67\xa4\x16\x77\x52\x57\x30\x12\xd2\x20\xca\xae\x85\x03\xec\x57\x54\xa6\xd5\x03\x35\xf1\x13\xf1\x83\x75\x20\x94\x99\xdb\x0b\xb1\x0c\xa1\xf4\x17\xe7\xe7\x0b\x15\x92\x04\xcc\x6c\x51\x54\x46\x85\xf5\x39\x09\x33\x35\xab\x82\x75\xfe\x3c\x87\x3b\xd0\xe7\x5e\x2d\xc6\xd2\x65\x4b\x15\x20\x0b\x95\x83\x73\x59\xaa\x31\x4d\xd6\x90\x14\x9c\x14\xf9\xaf\x5c\x94\x99\xfe\x69\x07\x78\x5b\x0c\x8d\x7f\x24\x50\xf6\x40\x19\x05\x0a\xee\xad\x8c\x9f\xf2\x2a\x1a\x60\xe2\x23\x84\xc7\x87\xd7\x37\x1f\x45\x1a\x9a\x01\xce\xb0\x6d\x9a\xfa\x06\xcc\x08\x22\x65\xe6\xe0\xb8\xe5\xdc\xd9\x82\x7a\x01\x93\x97\x56\x11\x45\x83\xc8\xb4\x22\xde\x5f\xcd\x0a\x15\x70\xff\xfe\x5a\x81\x0f\xb8\x03\x13\xf1\x8a\x44\xbf\x98\x81\x88\xf4\x3b\x11\xd7\x46\xbc\x92\x05\xe8\x57\xd2\xc3\x67\x07\x32\x42\xd3\x8f\x11\x78\xc7\x81\xb9\xad\xb5\x6c\x36\x66\x38\xb5\x5e\x24\x9d\x61\xc7\x9e\x6c\xd1\xde\x4d\x09\x59\x87\x06\x12\x07\x44\xbe\x01\x88\xe9\xbb\x78\xcc\x3e\x2a\xc4\x5f\x54\x3f\x50\xb0\x6f\xbe\xda\x98\xd4\xab\xa6\x65\x62\x05\xc8\x6a\x98\xfa\x20\xbd\xee\x20\xc6\x0c\xb4\x35\x0b\xda\xcf\xad\xbe\x0b\x65\xde\x80\x59\x20\xf7\x7b\xb1\xf5\x72\x07\x8c\xe3\x77\x24\x7d\x6e\x20\xb3\x26\xdf\x5a\xcf\x26\x24\x95\x51\x45\x55\xb4\x58\xb6\xe7\xef\x88\x7f\xad\x96\x0a\xd5\x0d\x61\x60\xa5\xd7\xac\x0c\x36\x02\x29\x71\x8a\x19\xb0\x48\x9d\x88\x2b\x98\xcb\x4a\x13\x7e\x8a\xa9\x78\x96\xda\xad\x94\xd6\xd8\x2a\xb3\xc6\xab\x1c\x70\x5b\x1a\xa9\x20\xbd\xf0\xd6\x1a\xfc\x57\x11\x0b\xa5\xbe\x9e\x6f\xcd\x7a\x6e\x5d\x21\x03\x71\xf2\xaf\x5f\xee\x80\x47\x9b\xcb\xb7\xf6\x56\x56\x1e\xf2\x03\x70\xb8\x36\xb9\x42\xdd\xd3\xb3\x24\x65\x14\x6a\x73\x76\xee\x65\x7b\x9b\x78\xe4\x99\xb5\x1a\xa4\xd9\x1c\xd9\xd9\x85\x03\xef\xaf\x40\xe6\x5a\x19\x38\x6e\x4b\x3e\x92\xd0\xb8\xa7\x6d\x09\x0a\x91\xc9\x74\x36\x45\x76\xe4\xbe\x15\x85\xbc\x85\x7a\x28\x31\x83\x39\xd1\x3d\x4d\xba\x05\xf1\x60\x71\x0b\xe6\xa4\x18\x4e\x68\x8c\x56\x2f\x8d\xd1\xc0\x9b\x85\x7f\x2b\x53\x01\x7e\x55\x3a\x9b\x61\xc7\xfc\xa9\x68\xcb\x31\x64\xf5\x12\x1b\xb3\x66\x2b\x56\x2a\x20\xb6\xbc\xdf\x58\xf6\xeb\xfb\x0c\x20\x87\x1c\xb7\xd6\x53\x33\xc6\x07\x5f\xb9\x39\xaa\xca\xb8\xc0\x0d\x80\x47\x71\x2f\xde\xda\x00\xbc\x23\xf5\x02\xe9\xeb\xc8\xf9\xc0\x07\x55\x10\x4e\xe6\x95\x4b\x7c\x98\x60\x26\xfb\xb7\xaf\x83\xa2\xbf\x9e\x4e\xfd\xf6\x86\x3e\x1c\xd1\x92\xb6\x7a\x60\x7f\xdf\xd6\xa4\x96\x98\x54\xd2\x8c\xba\xd3\x7b\x81\xdb\xa4\x3c\x8b\x1e\x92\x09\xc8\x3d\xac\xc8\x95\x47\x99\x53\x29\xbf\x14\x33\x08\x2b\x00\x23\xe0\x1e\x87\x56\x41\xfc\x0c\xce\xd2\xbe\x20\x84\x90\x8b\xaa\xb9\xea\x43\xdb\x4f\x59\xe5\x9d\x42\xf5\xe2\xdf\x94\x0f\xd6\xad\xdf\xa8\x42\x85\x23\x30\xba\x61\x30\x56\xe7\x89\x1b\xdf\x00\x2f\xd5\x41\x90\x88\x04\x56\x48\xad\xed\x4a\x20\x2e\xce\x64\x76\xfb\x88\x10\xd8\x00\xed\x23\x02\xc4\x83\x86\x2c\x58\x77\x00\x08\x6f\xe4\x0c\x74\xdd\x98\x28\xb9\xd9\xf7\xd7\xf7\xbc\xa4\x0e\x60\x56\x4b\xeb\x5b\x6a\xb3\x74\x10\x3f\x6f\xa9\xce\x89\x96\x10\xf1\x2d\xb5\x9a\xcf\xbb\x2d\x1a\x3a\x98\x88\xeb\x20\x8a\xca\x07\x51\xc8\x90\x2d\xdb\xda\x69\x6d\x29\x3c\xf5\x42\xe3\x44\x7b\x08\x63\xb7\x8c\xc4\x1f\x75\xf9\xfa\x1e\x15\x1d\xdf\x78\x23\xf6\x42\x64\xf3\x13\xde\x67\xb4\xe1\x11\x4d\x74\x17\x5e\xa8\xfb\x28\x07\xec\x63\x20\x8c\x6a\x3f\x21\xe0\x5c\xbe\xbd\xea\x43\x75\xfc\xa9\x00\xc5\x8e\x29\x6d\x4c\xea\x72\xcf\xc0\x51\x0b\x4c\x6f\x88\x2f\x21\xab\x94\xca\xf8\xa8\xdb\x8e\x84\x14\xb7\xb0\x66\x35\x18\xb5\xeb\x12\x9c\xac\x1b\x3b\xd0\x51\xc6\x00\xb6\xa2\x46\x51\x27\xde\x31\xb7\xfd\x40\xe7\xdf\x2d\xac\x77\xbf\xdc\x58\x1e\x8e\x1a\x95\x13\x5e\x27\x3e\xa8\x45\x5e\xbd\x34\x59\x96\x5a\x41\xbf\x62\xd2\xfc\xf6\x68\x21\xcd\x2f\x41\xe0\xe8\x29\xd6\x20\x6b\xd4\x66\x06\xea\x53\xcf\x00\x44\x5c\x59\xaa\x92\xd8\x85\xf0\x40\xd8\x92\x2c\x8b\x3f\x48\xad\xf2\xba\x0b\xc6\x8b\x6b\x33\x42\x41\x82\xff\x10\x9d\xb1\xe0\xba\xb2\xe0\xdf\xda\x40\x4f\x3e\x79\x91\x3c\xfc\xd1\x4b\xe4\xe6\x84\x4e\x46\x48\xe7\xe4\x9a\x34\xaf\x96\x79\xe1\x27\xe2\x9a\xf5\xc6\x1a\x1c\xca\xa3\x82\x6f\x5d\x5a\x0b\x99\x7a\xdc\x11\x77\x41\xa4\x3d\x03\xf2\x1f\x40\x51\x86\x75\x6f\x1f\x11\x04\xd6\x75\x20\xb0\xa7\xbb\xd8\x15\x71\x62\x7e\xc3\xa6\xa4\x26\xd9\x1d\x05\x2f\x19\x47\x32\xc0\x42\x65\xa2\x00\xb7\x00\x51\x22\x75\xef\x03\xec\x5e\x9a\x3c\x01\xf6\xa9\x19\xcd\x6d\x47\xab\x48\xc4\x3d\x5a\x20\xff\xc6\x88\x5f\x3b\xdf\x25\xf0\xed\x68\xb0\xc3\x86\x39\x76\x7e\xc4\x06\x49\x3a\xec\x80\x46\xdb\x73\x78\x88\x1b\x1c\x84\xd8\x36\x07\xe6\xa1\x99\xb7\x15\xb2\x44\x4c\xfc\x1b\xb2\x30\x42\x86\xbf\x8b\x52\x2a\xe7\x27\xe2\x92\x1c\xa0\x1a\x3a\xef\xa2\xe2\xd6\xee\x06\x7b\x50\x5e\x20\xbc\xef\xa4\x8e\x2a\xaa\x34\x02\x34\xb3\x50\x3b\xdf\xe2\xfb\xa3\x28\xe9\x90\x15\xcd\x15\x68\xb2\xb6\xcf\x6e\x61\x7d\x36\xda\xc2\xde\xb3\x6b\x73\xc6\xcc\x75\x0b\x5f\x6b\x4e\x6c\x8d\x5e\x8b\x33\x7a\x77\x76\xba\xa8\xd8\xbb\x9b\x7b\x5e\x46\xfc\xef\x61\xc5\x5b\xba\x50\x47\xd1\xe5\xaf\x10\x4a\x95\x07\x56\x86\x88\xb4\x04\x24\x9d\xa0\xd6\x00\x48\xbf\x36\xb0\x22\x49\x7f\xaa\x80\x46\x9d\x8a\x3c\xc6\xb9\x0c\x3d\xa6\xec\xd6\x44\x3f\x70\xfb\xe8\x5d\x40\xe8\xce\xd5\x42\x94\xd2\xc9\xc2\x4f\xc4\x7b\xe6\xcc\x0c\x6b\xd5\x63\x5e\xdf\xc4\x85\x7d\x5c\x97\x20\xfe\x35\xf5\xc6\xa3\xf7\x03\xfe\xb0\xa8\x2b\xe4\xfd\x4d\xe5\x16\x3b\x66\x8f\x3f\x69\xd6\xef\xe6\xbb\x5f\x8f\xf7\x2a\x72\xdb\xed\x0e\x70\x9e\xae\x9f\xa8\x6d\xb7\x35\xda\x6e\xe3\xf5\x24\x6d\x41\x1a\xb2\x7c\xb2\x25\xe4\x15\x9a\x53\x72\x66\x37\x7c\xb6\xdb\x9f\x92\x54\xab\x20\x7d\x8c\x22\x63\xe6\xad\xae\x42\xad\x55\x3f\x83\xfb\x0b\xf1\xed\x73\x41\xd6\x61\x09\x2e\x03\x13\xe4\x02\xfa\x6c\x0c\x6e\xfb\x62\xfa\xd5\xf3\xc8\xd2\xb1\xd7\x68\x4e\x4d\x79\x27\xef\x5b\x5e\x54\xa4\xb9\xe9\x44\x5c\x6e\x0c\x48\xdf\xe9\xac\xd2\x64\x7c\x91\xf3\xaa\x35\xec\x6c\x2d\x9c\xad\x4c\xce\xe8\xb3\x65\xd5\xbc\xbe\x97\x45\xa9\xe1\x42\xac\x96\x60\x58\x49\x55\x9e\x04\x79\xb0\xe2\xeb\xe9\x57\x4c\xf5\x88\xe7\x8d\x36\xdc\x40\x4e\x22\xd8\xaa\x52\xa8\xa2\x80\x5c\xc9\x00\x7a\x9d\x3a\x82\x84\xe4\x09\x69\x7d\x90\x2e\xf8\x11\x47\x4d\x6a\x2d\x27\x6c\x38\xa9\xd1\x20\x21\x83\x01\x56\x0d\x98\x72\x4b\x50\x01\xb2\x5d\xc5\x8b\xaf\xa7\x5f\xf5\x5b\x6c\xef\x4c\x06\xd4\x43\xfd\x25\x79\xe1\x67\x68\x93\xdc\x2a\xad\x21\x1f\x1d\x5c\xca\xbc\x72\x61\x09\x6e\x24\xc0\xf8\x64\xc7\xe2\x5c\x37\xe6\x59\x8f\xe0\x38\xcc\x23\x64\x40\x84\x67\x83\xb7\x65\x00\xc7\xc5\x23\x43\x0f\xa2\xb0\x3e\xec\x9e\xfe\xd3\x9d\xb8\x7d\x3f\xbe\xad\x66\xe0\x0c\x04\xf0\x63\x65\xc2\xd8\xba\x31\x93\xc3\x85\x08\xae\x82\xdd\x24\xda\xc2\x9e\x2f\x9e\x50\xdb\xf1\x8b\x2d\x08\x7f\x36\xba\x7c\x38\xb5\xe5\x76\x65\x76\xd3\x35\x31\xcf\x48\xd1\x1d\x5f\xdd\xb1\x34\xd9\x35\xdd\x37\x10\x19\xc7\xc6\xd6\xdf\xf5\xe3\xda\x09\x04\x1b\xa9\xaa\x43\x8f\x28\xb5\xc9\x35\x38\x3a\x62\x16\x35\x41\xcd\xad\xd6\x76\xc5\xd6\xb0\xe7\x40\x29\x12\xdc\x36\x7f\xd9\xa2\xbd\x1e\x3e\xd1\xcc\xa5\xf1\x5e\x06\x21\xb5\x26\x0a\xf4\x3b\x49\x50\x83\xf4\x61\x17\x58\x1e\x9b\x04\x0f\x28\xa3\xf4\xfa\xb0\xf0\x27\xa9\x4d\xb3\x6d\x9c\x07\xaf\x2a\xe7\xc0\x04\xbd\x8e\xce\x06\xbd\x16\xbe\x2a\x4b\xeb\x02\xf9\xd9\xa3\x1e\x83\x3a\x5a\x47\xd8\x9f\xd5\xb8\x86\xef\x8e\xd0\x03\xf6\x52\xf4\x9e\xe5\x25\x17\xc6\x21\x05\x2c\xc5\x44\xf9\xe9\x2c\x9a\xe3\x5d\xf2\xaf\x5d\xd6\xec\xf2\x3e\xd9\x19\xd2\x1b\xeb\xe8\x9d\xce\xd3\x9b\x20\x4d\x2e\x5d\x1e\x17\xf5\xf4\xa9\xaf\x3f\xff\xec\x31\x9c\x34\x50\x3f\x0e\x1e\x56\xc8\xb6\xb2\x4f\x7a\x1b\x9d\x60\xbe\x88\x63\x8d\xbe\x8d\x40\x68\x33\x8f\x68\x54\x57\xc6\x07\x57\xd1\xc2\x73\x32\x2c\x38\x68\x87\xd6\x89\x0f\x16\x1f\x46\x67\x75\x2b\x60\x87\xd2\x52\xae\x89\x97\x40\x40\x8e\x01\xf7\x31\xb4\x19\xac\xd5\xc4\x29\xe9\x5b\x52\x16\x1c\x04\xa7\xe0\x0e\x84\x74\x33\x15\x9c\x74\xeb\xd6\xb6\x7d\x5c\xc2\x9a\x38\x16\x32\xe0\xbf\x56\xe0\xd6\xcc\x2d\x4c\xde\x0a\x9a\x90\x73\xc3\xdd\xe1\x54\x90\x1b\x16\x36\x57\xf3\x35\x32\x10\x46\x84\xed\x30\xe9\xc5\xf9\x79\xc3\x10\x70\xff\x73\x9b\xf9\xf3\xca\x83\x1b\x2f\x2a\x95\xc3\x79\x6b\x3b\x76\x73\x95\x83\xd6\xaa\x10\x0b\x30\x68\x71\x41\x7f\xd0\xab\x77\x0b\xce\x7e\xd7\xfa\x26\xee\x81\x2d\x79\xdb\x71\xa5\x73\x75\x3f\x42\x03\x27\xfa\x25\x11\xc4\xee\x0e\x39\x74\xb0\xf5\x70\x42\x8a\xca\xa8\xbf\x56\x31\x6e\xf6\xee\xed\x9b\xff\x14\xd7\xdf\x53\x6b\xea\x95\x6d\xc3\xa5\xf4\x51\xae\x81\x41\x14\xbd\x53\x39\xc5\x3e\x63\x8c\xbb\x36\x20\x71\xb0\x51\x13\x85\x73\x10\x2a\x67\x38\x10\xd2\x0a\xad\x26\x42\xcf\xd5\x7c\x0e\x2e\x66\x52\x98\xe6\xb3\x52\x7a\xcf\x01\x13\x15\x5d\x7c\xfc\x89\xd4\xde\x72\x4c\xab\x98\x29\xd3\xa0\x53\x5c\x80\xaf\xe6\x73\x75\xcf\xc6\x67\x9a\x63\xfc\x1c\xe7\x4f\x00\xc0\xee\xef\xa4\x56\x39\x47\xe3\x5d\xa5\x51\xb4\xf8\x8d\xf5\x36\x01\xf5\x19\x20\xd7\x37\x99\x0c\x0d\x14\x35\x45\x08\x53\x88\x91\x47\xad\x9d\x1d\x75\x70\xa8\x36\x95\xd3\xf4\xac\x69\xed\xc1\x44\xfc\x64\xb6\xc1\x57\x7b\xce\x6b\x63\x3b\x6d\x53\xce\x90\x21\xf3\xd4\x8f\x5a\x1d\x31\x64\xde\xbe\xfb\x18\x81\x2d\xa4\xf8\x66\xfa\x2f\x62\x2c\x94\xf1\x01\x64\x3e\x12\x2a\x02\x1c\x14\x8a\xe7\xd4\xec\xe5\xf4\x85\x78\x15\x63\x8b\xd6\x89\x6f\xa7\x53\x86\xe6\x07\x0e\x17\x71\xc4\xfc\xa3\x2a\xc0\x56\x41\x28\x0e\xd4\xb1\xcf\xa9\x8d\x2e\x19\xd1\x55\xd4\x78\xe6\xa8\x10\x25\xf7\x04\x07\x84\xb4\xb6\x21\x40\xde\x38\x0f\x52\x70\x9d\x09\x12\xe9\x79\x2d\x9e\x25\x9c\xd5\x6b\x21\xe7\x1c\xae\x85\x14\x85\xe3\x08\x61\xdd\xed\x07\xfc\x62\x7c\x49\xad\x96\x20\x73\x70\xcf\x09\x94\x97\xe4\x3b\xcd\x6b\xd3\x38\x51\xc4\x46\x3c\xe2\x33\xb3\x76\x95\x43\x51\xda\x00\x26\x5b\x9f\x1d\xe0\x05\x7b\x59\xad\xde\xe3\x98\x12\xff\x18\xee\xfe\x03\x3b\xa5\xa2\x7b\xf4\x16\xd6\xbe\xe5\x38\xef\xaa\xeb\x9e\xb1\xde\xba\x85\x34\xea\x67\xe6\xb8\x29\xa5\xf0\x67\x10\xcf\x28\x4d\x8f\xf9\x30\xb9\xba\x9f\xb7\x98\xad\x5c\xc7\xb8\x48\xf2\x82\x7b\xce\x16\xa3\xa0\x1e\x91\x68\x13\x26\xf5\xb1\x0f\x77\xa7\xb2\x9e\x84\x96\x83\x9c\x9a\xa1\xfa\x49\x4c\xda\x1c\xcf\x9c\x9f\x12\x0a\x26\x7f\x6e\x24\x1a\x24\x31\x85\x34\x6a\x52\xce\xe2\x44\x5c\xfb\x86\x79\x90\x50\xe2\xfc\x4f\xb3\xa8\xc5\xa4\x1f\x09\xa9\xc3\xd2\x56\x8b\xa5\xf0\x96\xf8\x6a\x7c\x41\x3c\x8a\xc3\x77\x32\xd1\x16\x79\xb3\x28\x67\xa5\xcd\x41\x9a\xdc\x23\x59\xa2\x8e\xe1\xd0\x28\x60\x22\x96\x55\xb0\x85\x0c\x2a\x43\x0a\x9c\xd4\xa4\x53\x3a\x55\x48\xa7\x90\x9e\x4c\x00\x83\xcc\x74\x6e\x5d\x9d\x9d\x2a\x1a\x64\x8f\x5b\x4e\xce\xaa\x2a\x8e\x95\xd7\xa9\xb3\xbd\x59\x33\xa7\xee\x9d\xca\x91\xcc\xe6\x0a\x9c\xff\x15\xc1\xee\xd0\x36\xee\x45\xf6\x1a\xfa\xc7\x0a\xda\x3a\xc5\xb4\x93\xef\xc2\x4f\xe2\x9e\x82\xcc\x96\x0c\xcf\xee\x9e\x4f\xc4\xa5\x61\x77\x7e\x33\xec\xb6\xb3\x16\xbb\xfb\xe9\x2c\x67\x9d\xfd\xa7\xb3\xa6\xe9\x48\xcc\xaa\xd0\x79\x15\x23\x49\x99\x34\xd6\xe0\x9e\x6d\x64\x98\x51\xfc\x9e\x0c\xa4\x48\x65\xd1\x8a\x6b\xc4\x13\xd9\x6d\xb6\xe4\x3f\x5a\xa8\x88\x86\x7d\x2d\xb4\x6c\x47\x36\x71\x5e\x9d\xf5\x50\x77\x9a\x64\x78\x0c\x54\xfc\x64\xc4\x0f\x71\xd9\x52\x5c\xbd\xbd\xf9\xaf\x37\x97\xbf\x7d\xfd\xe6\x51\xb6\xbe\x9e\x9f\xff\x24\x9e\x6a\x57\x06\xdc\x07\x20\x85\x23\xdb\xc7\x2e\xbb\x01\xe4\x18\x18\x4d\xcb\xce\xa1\x64\x52\x48\x91\xde\x94\xc9\x77\x3d\x17\x97\x6f\xde\xd4\xed\xa2\xb8\xa2\xb8\x6a\xe3\x9b\xca\x41\x43\x60\x0d\xa9\xc9\x47\x4a\x90\x5c\x48\x37\x93\x0b\x94\xa9\x9a\xe3\xcd\x8d\x7e\x15\x5b\x2a\xa4\x77\x23\x17\x3c\xbc\x6c\xb1\x46\xd2\x08\x0c\xb9\xfc\x0d\x8a\x54\x15\xdd\x09\x34\x3e\x0d\x10\xf3\xdb\x2c\x3f\x6f\x7f\x49\x62\x9f\x30\xaa\x49\x48\xe1\x5d\x8f\x9e\x08\x34\x7b\x49\xab\x72\x84\x75\x71\x3f\x0b\xdc\x46\xd2\xdb\xac\x01\x9e\x17\xf2\xac\xa6\x93\xdd\x61\xa8\x83\x41\xa8\xce\x16\xbc\xeb\x6c\x5c\x13\x71\x00\x43\x0c\x11\x31\xc9\x15\xcc\x74\x82\x15\x1a\x82\x58\xdb\x4a\x44\x86\xb1\x26\x9d\x78\x65\x1a\x15\x9f\xe8\xb1\xf3\xa4\x26\xd8\xb8\x69\xa4\x24\x36\x54\x21\x53\x72\x1b\xed\xbc\x09\x23\xd4\x97\x50\x0b\x8d\x39\xf2\x4c\x4b\x23\xe1\x89\x8a\x5d\x54\x3b\x5a\x1d\x10\x30\xf7\x05\xe5\x8e\x89\x37\x8b\x3d\x09\xaa\x07\x00\x78\xf9\xfe\x3a\xa5\xa7\x26\xa5\xd5\x31\x38\xf7\xc6\x60\xc5\xf1\xb1\x40\x21\x66\xda\x66\xb7\xb4\x53\x57\x88\xe3\xa7\x4e\x11\x11\xdd\x55\x30\x12\x97\x6f\xaf\x50\x7d\x23\x67\x07\xf6\x56\x6b\xee\x67\x73\xeb\x60\x41\x3e\xb7\x34\xc2\x99\x98\x2b\x23\xb5\xfa\xb9\xc6\xff\xe6\xb3\x06\x4f\x23\xcd\x35\xc9\x9e\xb7\xb0\x1e\x33\x8f\x63\xc3\xb2\x32\x41\xe9\x94\xab\x9b\xb0\x8c\xfe\x28\xec\xdd\x66\x12\xcb\x5c\x6a\x8f\xc4\x60\x99\x38\x6a\x0e\x39\x42\xc5\xd8\x83\x13\x06\x20\xf7\xe2\x8c\x47\x3d\x13\x25\xb8\x42\xf9\x36\xe8\x69\x7e\x23\x61\x11\x57\x56\xca\x83\xf8\xe6\xe5\x4b\xf1\xec\x47\x13\x53\xbe\xc8\x66\x7d\x6d\x82\x0a\xeb\xe7\x35\x6b\x48\x76\xd4\x71\xdb\xd5\x9f\x17\xd7\xfd\x35\x64\xfa\xb0\x7d\xda\x00\x17\x71\x97\x3a\x49\xf9\x24\x66\x70\xea\xcc\xb7\x33\x87\x0f\xcc\x99\x73\x89\x37\x11\xff\xff\x2d\x53\x77\xd7\xda\x8f\x20\xb2\xfd\xda\x67\xdf\xd2\xdf\xb6\x72\x61\x77\x2e\xfd\x31\x95\xaf\x13\x57\x54\xa9\x13\xf7\xf2\xc7\xeb\xab\xc7\x5d\x4f\xa5\x1e\x6d\x83\x0e\xe5\x3b\x08\x8a\x9d\x34\x4c\x7c\x6f\x33\xc4\x9c\xbd\x0d\x70\x23\xf6\x36\xa8\xd4\xbe\x0e\x8e\x30\x76\x0e\xe7\x78\x1c\xe8\x64\x3b\xa1\x3c\xfd\x36\xbc\xb1\x6c\xa0\x67\xb5\x95\xd2\x0e\xcd\xce\x60\x29\xef\x94\x75\xe9\x79\xf4\x19\x7f\x76\x02\xc6\xc9\x8f\xa5\xc9\xc7\x9c\x16\xfb\x50\x6f\xed\xcc\xda\xe0\x83\x93\xe5\x91\x0a\xe7\x6f\x53\x7b\xce\x0d\x69\x58\x2c\xe9\xea\xda\xa2\xc2\xcf\x5e\xd6\x98\x28\x0e\x26\x93\xa5\xaf\x38\xc7\x8d\x64\x11\xf1\xe1\x64\x8d\xb1\x23\x2a\xc6\x5c\xfe\xf7\xbf\xff\xc7\x37\x33\x2a\x29\xcf\x01\xb2\xa5\x34\xca\x17\xbb\x39\xf4\x71\xea\x09\x0f\xf8\x01\xf6\x04\x18\xb7\x16\xfb\x2a\x7d\xd3\xbb\xd8\x7a\xa2\xc9\x9b\xe7\xc6\xd1\x95\x93\x6d\x78\x90\x97\x16\x57\xbd\x69\x80\x06\xa9\x74\x9d\xb6\xd8\x12\xec\xb5\x8b\xb4\x4e\x7d\x45\xde\xe0\xcf\x9b\x04\xb6\x60\xa3\xd3\x68\xdd\xec\xc7\xe4\x4a\x06\x49\xca\xb2\xad\x42\x0c\x66\x01\xc9\x15\x79\xb4\x9c\x3b\x56\xd1\x3b\x45\xd5\x7b\x3c\x65\xef\x04\xbe\x2d\x18\xd3\xe8\x9c\xd8\x69\xf3\x7b\x7a\x3d\xe7\x09\x71\xd8\x0e\xf7\xb9\x54\x90\x41\xe7\x60\x54\x72\x5e\xc6\x87\x48\x95\x2e\x99\x9e\x51\xf7\x88\x8e\xa9\xe6\xe0\x14\x25\x33\x4b\x76\xee\x8a\x7f\xbf\x79\xf7\xf6\xfc\x77\x36\xda\x31\x32\xa3\x64\x7a\x3a\x96\x52\x90\x06\x9f\x4e\x74\x46\x26\x73\x83\x6f\x26\x85\x34\x6a\x0e\x3e\x4c\x62\x6f\xe0\xfc\x1f\x5f\xfe\x69\x22\xbe\xb7\x4e\x00\x87\x6a\x47\xb5\x72\x9a\x0e\x19\xb5\xf0\x8a\x16\x53\x7f\xdb\xf8\x7a\x4a\x9b\x2c\xbe\x15\x4d\x36\xc8\x5b\xf2\x06\xcb\x68\x6a\x6b\x75\x0b\x17\xe2\x0c\x31\xae\x35\xf4\xdf\x90\xc1\xff\xfd\x4c\x3c\x5b\x91\x51\x71\x86\x7f\x9e\xf1\x80\xb5\xa2\xd5\x3e\xea\xd2\x0c\xcc\xb1\x54\xa7\x16\x0b\x3e\x84\xb0\x04\x01\xc8\xd9\x28\x24\xae\xe6\x68\x9c\x34\x8d\x4d\xf4\xf6\x34\xae\xe7\xcd\x89\xfc\xf1\xe5\x9f\xce\xc4\xb3\xee\xba\x84\x32\x39\xdc\x8b\x97\xb5\xa1\x59\xda\x3c\xe5\xb6\xf8\xb5\x09\xf2\x9e\xe2\xe7\x4b\xeb\xc1\xb0\x4f\x36\x58\xb6\x83\xc9\x7f\xb5\x02\xad\xc7\xec\x49\xc9\xc5\x8a\x13\x31\x13\x28\xd9\xc9\x5c\x4a\x17\x36\xce\xca\x7d\x7c\x77\xf5\xee\x22\xa5\x57\x7b\xb5\x30\xc9\xbf\x4b\x56\x40\xf4\x30\x77\xbc\xe9\x15\x6f\x12\x72\xc3\xa5\x34\x8b\xda\xc0\x9b\x57\xc8\xf4\xf7\x04\x81\x1f\x40\x0f\xc7\xa8\xa5\x5f\x9a\x62\x7a\x12\x00\x8e\x51\x4e\x1f\xa4\x9e\xfa\x7e\x7d\x2e\xb3\x26\x83\x32\xf8\x73\x7b\x07\xee\x4e\xc1\xea\x7c\x65\xdd\xad\x32\x8b\x31\x22\xe8\x38\x3a\x62\xd8\x7b\x74\x7e\x9c\xda\x7a\xf2\x7a\x0f\xf8\x10\x77\x2f\x9a\x1d\x03\xff\x80\x95\x93\xdf\xec\xfc\x51\x17\x9e\x44\xef\xc3\xe4\x53\xad\xec\x6d\xf6\x83\x64\xca\x1a\xcd\xb6\x29\x5e\xc8\x9c\x59\xaf\x34\xeb\xcf\x4e\x20\x08\x5e\xca\xba\xc8\xd6\xe3\x28\xd8\x49\x0f\xa4\x73\x5d\x9e\x82\x3b\x8f\x0a\xcf\x23\x6c\xa0\x87\x58\x41\x8f\x42\x36\xc7\x58\x47\x27\x2c\xf6\x28\xa3\x43\x88\xdd\x59\x1c\xbd\xe0\x38\x23\xcd\xac\xf6\x0b\x22\x54\x1a\xd5\x11\xfb\x6a\xe4\x7d\xa6\x6d\x95\x8f\x95\x51\x21\xe9\x87\x82\x3b\xe2\xd4\x7f\xa3\xf4\xa8\xad\x2f\x37\x71\xca\x02\xb5\x8b\x28\x3e\xde\x03\xe7\x7d\x91\x3e\x41\xae\xef\x2b\x28\x1d\x50\x9c\xf2\x82\x65\x60\x13\x35\x8f\x7e\xdf\xf4\x1e\xfb\x48\xa7\xe0\x49\x64\x35\x2e\x1e\xf2\x36\x09\xd2\x18\x58\x40\x25\x3d\x6e\x22\x6e\x56\x8a\xce\x0e\x59\x81\x4b\xbd\x81\xcc\x01\x5d\x97\x31\xd9\xed\x11\x3f\x61\x5f\xf2\x4e\x9f\x27\x00\xbe\x3b\x99\xbe\xf3\xb7\x9e\xde\xb2\x46\x42\xde\xb6\xbe\xed\x89\x5b\xf0\xe0\x1d\xf8\x74\x18\x1c\x81\x97\x7b\x8f\x24\xf7\x42\xe7\x91\x8f\x26\xa7\xdf\xde\x23\xca\x27\xac\x7a\x2e\x95\xae\x1c\x5c\x59\x04\xec\x91\x4b\xfa\xbe\xfd\x4d\x5a\x54\xec\x48\xe4\xfc\xb4\x7d\xc0\x6d\x23\xa3\x4b\x28\x33\xe1\x30\x11\xc7\x7c\x25\x9f\x8c\xe2\x6f\x3a\x7d\xfb\x76\xd2\x50\x4c\x9c\x88\x3b\x90\xf4\xc1\x4f\x59\xbb\x32\x73\x27\xeb\x5c\xa5\xbd\x36\xeb\xc6\x81\xe5\x8d\xef\x92\xdd\x1a\x83\x6b\x1b\x06\x6c\x46\x97\x09\x35\xb6\xaa\xa5\x74\x17\x0e\xde\x98\x8d\x49\xd4\x36\xee\xa7\xda\xe1\xc7\x5a\x8e\x8f\x63\x35\x1e\xc9\x62\x8e\xb4\x16\x07\x4b\x71\xb0\x14\xbf\x3c\x4b\xf1\x48\x1a\x38\x6c\x21\x7e\x49\xd6\xe1\x91\x8b\x3e\x6c\x15\xfe\x82\x2d\xc2\x13\xd6\x78\x84\x25\xf8\x0b\xb7\x02\x8f\x0e\x72\x9c\x60\xfd\xfd\xb3\x59\x7e\x47\xc2\xf0\xa0\xc5\xf7\x8b\xb5\xf6\x1e\x4b\x9b\x36\x36\x87\x2b\x27\x95\x89\x19\xa6\x47\xe7\xd4\x6d\x7c\x97\x74\x50\x3e\x35\x22\x0b\x5b\xf1\x69\x57\x4a\x1e\xad\xcf\x94\x6c\xde\xb4\xe2\x4b\x30\xa4\x56\xe6\xd8\x15\x8b\x11\x9c\x51\xba\xa2\x85\x0f\x4e\xb0\xc8\x55\x5e\x4c\x47\xa2\x00\x69\x3a\xc7\x54\xb0\x79\x4a\x80\xa4\x5e\x62\x36\x32\xce\xa9\x3e\x1e\xa6\x55\xa1\x62\x6a\xf8\x44\xbc\x7d\xf7\xf1\xf5\x85\xe8\x5b\x40\x93\x06\x4d\x39\x0a\x7f\xc6\x7d\xcc\x82\xe6\x7e\xc5\x78\x1c\xb8\xe9\x9f\x3f\x29\xe5\x2d\xa9\x97\xd7\x57\x47\xc2\xfa\x7d\xfd\x41\x02\x72\x0a\x9b\xc6\x38\x5d\x83\x95\x49\xdd\xaf\x93\xae\x63\xa2\x74\xad\xd2\xb6\x8d\xe2\x8d\xbb\x30\x52\x1b\xec\x4e\x7a\xe1\x81\xd4\x80\x06\xc6\x51\x7d\xca\xac\x73\xe0\x4b\xcb\x76\x5f\x4a\x63\xaa\x63\x81\x1f\x3b\xe2\xbc\xd6\xc7\x67\x6b\xb1\x54\x8b\x25\x38\xa1\x91\x09\xd0\xd5\x3c\x55\x01\x9c\x64\xda\xba\xe3\xb2\x3e\x8a\x45\xc7\x81\x33\xe9\x69\xdf\x93\xc1\x21\xab\x60\xe9\xa0\x53\xd4\x68\x5a\x1f\xe2\x94\x9b\x55\xbe\xd2\x20\xcd\xb8\x2a\x85\xb6\x0b\x95\x25\x1d\xa2\xf5\x79\x66\x8b\x52\x3a\xf0\xad\x83\x2f\x96\x96\xc9\xb9\x25\x24\xf0\xab\xd0\x3a\xf3\x14\x1a\xf8\x30\x87\x6c\x12\xae\x17\x80\x4a\xe5\x02\xf9\x12\x5d\xee\xe4\xc5\xef\x6b\xfa\xe7\x3e\x27\xe2\x3f\x7a\xa6\x2b\x39\x23\x54\x65\x38\xd4\xd8\xce\xc7\xc1\x41\x6b\x1b\xe8\xb2\xa3\x7a\xc6\xa3\x0d\x45\xa9\x0d\xd9\xd6\xba\x38\xa9\x90\x52\x57\x92\xf6\x26\x9b\x2e\x91\xef\x24\x54\x49\x17\x8d\x34\x67\x39\x2f\x0d\xa5\xc2\xd4\x6f\x18\x1c\xca\xd3\x11\x0e\xd5\x49\xdc\xf9\x8d\x47\xeb\x26\xe6\xbd\xc7\x8c\x72\x43\x9a\x34\x82\x55\x79\x4b\x8a\x5e\x6e\x0d\x74\xc0\x59\x99\x16\x9c\x1a\xd8\x9a\x9c\x32\x23\x0b\xe9\x6e\x63\x6a\x2b\x27\xed\x74\xb0\xa9\xbe\x36\x89\x0f\xa7\xd0\x7e\x66\xa1\x8a\xf7\x5c\x70\xd6\x2b\xa2\xd4\x36\xae\x21\xad\xa0\xad\x46\x4a\x7b\x07\x58\xed\xb3\x4e\x74\xbd\xce\x5c\x92\x2e\xdb\x87\x5c\x69\xaf\x0e\x5b\x87\x47\xf0\x80\xbb\x43\x32\xbb\xc3\x00\xfa\x6e\x39\x4c\x41\xf9\x16\xaa\xd5\x4e\xaa\x2e\x0d\x22\xc7\x0c\x11\x31\x5a\xf9\xfd\xe9\x34\xca\x76\x6c\x77\xe7\x6d\x2c\x47\x2c\x6d\x7f\xe6\xc5\xb8\x19\x6d\xc7\xfb\x96\x73\x67\x47\x8b\x2d\x8f\xc1\xe9\xf9\x10\x3b\x5f\xf6\xcf\x7e\xf7\xac\xc6\x75\xb2\xfc\xc6\xe3\x74\x18\xef\xc9\x11\xc3\x72\x56\xc3\x49\xd7\xfd\xf1\x65\xb8\x6d\x74\xb0\xb3\x78\x98\xea\x93\x6f\xfc\xdb\xba\x61\xf4\xd0\x81\xc2\x8d\x63\xa2\x3d\x37\x9e\x3e\xe3\x3b\x67\x89\xa1\xa5\xf3\xa0\x1b\xf7\xf4\x3d\xdf\x77\xbd\xeb\x63\x5e\x57\x95\x00\xf5\xbb\x3a\x19\xff\x88\x1b\x2b\xda\x99\xfb\x09\xd0\x91\x07\xf5\x5e\x23\xb7\x77\xc2\xbf\xfe\xe6\xa4\x09\xd3\x2d\xc5\x07\xe6\x48\xf7\x16\xb7\x2f\x0c\x22\x5d\x8b\x0f\xac\x72\x07\x9c\x1d\xb1\x7d\x69\xeb\xb3\xfa\x26\xe5\x91\x68\x5d\xa5\x3c\x12\xf1\x2e\xe5\x91\xe0\xcb\x94\x29\xd5\x36\x5e\xa8\xfc\x7c\xd7\x35\x80\xbd\x7c\xa1\x73\x4b\xf0\x89\xb8\x74\xe8\xae\xe2\xcf\x83\x22\x47\x5e\x64\xf7\x18\xf7\x16\x3f\x0b\x4b\x50\x2e\x9e\x32\x6a\xe9\x62\x89\xad\xf4\x80\xfa\xb3\xdf\xd4\xf6\xf4\x26\x5d\x83\xa5\x5a\x47\xf5\x64\xfb\xd6\xac\xfa\xa2\xac\x19\x1d\x49\xe3\x56\xec\xdc\xe3\xe9\x91\x5f\xed\xce\xaa\x1c\xa7\xe2\xac\x2f\x21\x23\xea\x99\xad\xe3\xd9\x98\x98\x0d\x14\x3f\x6a\x64\x70\x33\x60\xec\x28\x8e\x4b\xa7\x48\xc7\x74\xfd\x4a\x74\x56\xb5\x0c\x2f\x21\x67\xa8\x5d\x74\xe7\xe6\x4f\x3a\x8b\xf4\x2b\xfa\x67\x5c\x7f\xbc\xad\xe1\xef\x41\xf1\x9e\x6b\x99\x4f\xc4\x9d\xe3\x2e\x8a\x6e\x1f\x47\x4f\x37\x03\xee\x3d\xa9\x4f\x0a\x0e\x5d\x9c\x17\x10\xc2\xb5\xce\x98\x2e\x67\xee\xde\xa4\x49\xda\xe2\x8b\xe9\xf4\xab\x16\x0f\xcf\x64\x29\x33\xc5\x17\x60\xc1\x9a\x0e\x39\xc5\xd3\x8b\xb3\xcd\x43\xe3\x74\xb8\x25\x5e\xcd\x81\x78\x81\xaa\xf1\x1a\x42\xab\xb3\xd6\x9d\x7f\x29\x10\x85\xd3\xa2\x71\xeb\x33\xad\x3b\xcf\x9c\x3f\x1c\xf1\x37\x6e\xf8\xfe\x07\xd0\xf5\x11\xf7\x91\x3f\xde\x02\x7b\xf5\x8a\xad\x87\x2c\xb6\x5a\x57\x27\xf8\x60\x9d\x5c\xc0\x05\x67\xd2\xf3\xa3\x6a\x56\x1f\x68\x4b\x50\x22\x5d\xb9\x01\x19\xd1\x49\xe2\x10\xdd\xdb\xc9\xb7\x74\x21\x5c\x66\x02\x7a\x6a\x8a\x2b\xdf\xb8\xd7\x3e\xa9\x40\x9b\x4d\x7b\x2f\xc1\x8f\xda\x92\xf8\xdb\xdf\x87\xb2\x02\x43\x59\x81\xa1\xac\xc0\x2f\xb2\xac\x00\x6b\xb8\x43\x59\x81\xa1\xac\xc0\x4e\x28\x0f\x65\x05\x86\xb2\x02\x43\x59\x81\xa1\xac\xc0\x50\x56\x60\x28\x2b\x30\x94\x15\x18\xca\x0a\x0c\x65\x05\x86\xb2\x02\x43\x59\x01\x31\x94\x15\x68\xfd\x86\xb2\x02\x43\x59\x81\xa1\xac\xc0\x50\x56\x60\x28\x2b\x30\x94\x15\x18\xca\x0a\x0c\x65\x05\x86\xb2\x02\x43\x59\x81\xa1\xac\xc0\x50\x56\x60\x28\x2b\x30\x94\x15\xd8\x0f\xe9\xa1\xac\xc0\xe6\x6f\x28\x2b\x30\x94\x15\x18\xca\x0a\x0c\x65\x05\x86\xb2\x02\x43\x59\x81\xa1\xac\xc0\x50\x56\x60\x28\x2b\x30\x94\x15\x18\xca\x0a\x0c\x65\x05\x86\xb2\x02\x43\x59\x81\xa1\xac\xc0\x50\x56\x60\x28\x2b\x30\x94\x15\x18\xca\x0a\x0c\x65\x05\x4e\xea\x64\x28\x2b\x30\x94\x15\xd8\xbb\xd8\xa1\xac\xc0\xae\xdf\x50\x56\x60\xb8\x2c\x72\xb8\x2c\x72\x28\x2b\x30\x94\x15\x18\xca\x0a\x0c\x65\x05\xbe\xac\xcb\x25\x4f\x84\xe7\x50\x56\x60\x6b\xb1\xff\x14\x65\x05\xbe\x19\xca\x0a\x0c\x65\x05\x86\xb2\x02\x43\x59\x81\xa1\xac\x40\xef\x9c\x06\x4b\x71\xb0\x14\xbf\x08\x4b\x71\x28\x2b\xb0\xbb\xd9\x50\x56\x60\xcf\x42\x7f\x51\x56\xe0\x50\x56\x60\x28\x2b\x30\x94\x15\x18\xca\x0a\x0c\x65\x05\x86\xb2\x02\x43\x59\x81\xa1\xac\xc0\x50\x56\xa0\xdd\x62\x28\x2b\x30\x94\x15\x18\xca\x0a\x0c\x65\x05\x86\xb2\x02\x43\x59\x81\xa1\xac\xc0\xfe\x93\xfa\x43\x59\x01\xde\x9f\xa1\xac\xc0\xbe\xb2\x02\xcd\x93\x2f\xaa\xaa\x40\xa3\x37\xc9\x2c\x83\x32\x40\x4e\x9e\x3c\x9e\x2b\xb9\x78\xc5\x19\x47\x65\x4b\x5d\x39\xa9\xe3\x9f\xf5\x7d\xad\xfe\x42\xfc\xf1\x4f\x4f\x44\x8c\x6d\x45\x1d\x9b\x1f\xfe\x5f\x00\x00\x00\xff\xff\xb1\x5d\xb9\x1c\xfd\xc2\x00\x00") + +func clusterApiClusterXK8sIo_machinedeploymentsYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiClusterXK8sIo_machinedeploymentsYaml, + "cluster-api/cluster.x-k8s.io_machinedeployments.yaml", + ) +} + +func clusterApiClusterXK8sIo_machinedeploymentsYaml() (*asset, error) { + bytes, err := clusterApiClusterXK8sIo_machinedeploymentsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/cluster.x-k8s.io_machinedeployments.yaml", size: 49917, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9, 0xda, 0x9, 0x8d, 0xca, 0xf5, 0x7e, 0x2, 0xd5, 0xdc, 0xa1, 0x84, 0xa, 0x62, 0xca, 0x96, 0x3d, 0xa5, 0x75, 0x5f, 0xd1, 0xf5, 0x9f, 0x8d, 0x14, 0xa3, 0xb2, 0xbf, 0xc1, 0xc5, 0xdb, 0x72}} + return a, nil +} + +var _clusterApiClusterXK8sIo_machinehealthchecksYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x5f\x6f\xe3\xb8\x11\x7f\xcf\xa7\x18\xb8\x0f\xf7\x12\x29\x4e\x76\xef\xb6\xf0\x5b\xe0\x5d\xf4\x82\xee\x66\x17\x9b\xdc\xf6\xa1\xe8\x03\x2d\x8d\x2d\x5e\x28\x52\x25\x47\x4e\xdc\xc3\x7d\xf7\x62\x48\xfd\xb5\x24\x3b\x8b\xe2\x8a\xa2\x90\x5e\x12\x91\x14\x67\xf8\x9b\xe1\x6f\x86\x1c\x58\x14\xf2\x1b\x5a\x27\x8d\x5e\x81\x28\x24\xbe\x10\x6a\x7e\x73\xf1\xd3\x9f\x5d\x2c\xcd\xd5\xfe\xfa\xe2\x49\xea\x74\x05\xeb\xd2\x91\xc9\xbf\xa2\x33\xa5\x4d\xf0\x3d\x6e\xa5\x96\x24\x8d\xbe\xc8\x91\x44\x2a\x48\xac\x2e\x00\x84\xd6\x86\x04\x37\x3b\x7e\x05\x48\x8c\x26\x6b\x94\x42\x1b\xed\x50\xc7\x4f\xe5\x06\x37\xa5\x54\x29\x5a\x3f\x79\x2d\x7a\xbf\x8c\xdf\xc6\xd7\xd1\x32\xbe\x59\xde\x2c\xaf\x97\xcb\x9b\xe5\x72\xf9\xee\x66\x19\xfd\xf8\xee\xe6\xc7\xa5\x10\xc9\xf5\xbb\xed\x4f\x17\x00\x89\x45\x3f\xf9\xa3\xcc\xd1\x91\xc8\x8b\x15\xe8\x52\xa9\x0b\x00\x2d\x72\x5c\x41\x2e\x92\x4c\x6a\xcc\x50\x28\xca\x92\x0c\x93\x27\x17\x27\xaa\x74\x84\x36\x7e\x89\xc2\x8a\x2e\x5c\x81\x09\x2b\xb7\xb3\xa6\x2c\x56\x30\xe8\x0f\x93\xd5\xfa\x0b\xc2\x9d\xb1\xb2\x7e\x8f\xea\xf1\x91\x28\xa4\x6f\x09\xe8\x7c\x0a\x92\x7f\xf6\x92\xd7\x2c\xd9\x77\x2a\xe9\xe8\xaf\x13\x03\x3e\x4a\x47\x7e\x50\xa1\x4a\x2b\xd4\xa8\xf6\xbe\xdf\x65\xc6\xd2\x7d\xab\x53\x04\x79\x96\xb4\xff\x55\x83\xa4\xde\x95\x4a\xd8\xb1\x69\x2e\x00\x5c\x62\x0a\x5c\x81\x9f\xa5\x10\x09\xa6\x17\x00\x15\xfa\x7e\xd6\x08\x44\x9a\x7a\x7b\x0a\xf5\xc5\x4a\x4d\x68\xd7\x46\x95\xb9\x6e\x64\xa6\xe8\x12\x2b\x0b\xf2\xf6\xfa\x24\x5e\x64\x5e\xe6\xa0\xcb\x7c\x83\x16\xcc\x16\x4a\x1d\x04\x1e\x6a\xf9\x0e\x84\x52\xe6\xd9\x4b\xe2\xe7\x57\x67\xf4\x17\x41\xd9\x0a\x62\xb6\x40\x9c\x8b\x97\x5f\xea\x6f\xaa\x21\xc1\x88\x9f\x86\x1d\x74\x60\xe5\x1d\x59\xa9\x77\x63\xea\xdc\x37\x6a\x34\xc2\x93\xd2\x5a\xd4\xa4\x0e\x90\x1b\x2d\xc9\xd8\x51\x45\x48\x50\xe9\x62\x7c\x29\x30\x21\x4c\x2b\x1b\xb9\x9e\x3a\x1f\xc6\x3b\x83\x4a\x0c\xd4\x0e\xed\x98\x4e\xeb\xa0\x00\x98\x8d\x43\xbb\xc7\x14\x8e\xf1\x99\x54\xa7\x52\xfd\xe7\x11\x6c\xd6\x63\x5d\x43\x55\xc2\xe0\xfd\xb5\x50\x45\x26\xde\x04\xff\x48\x32\xcc\xc5\xaa\xfa\xc4\x14\xa8\x6f\xbf\xdc\x7d\x7b\xf3\xd0\x6b\x86\x63\x2b\x1f\xfb\x2c\x48\x07\x94\x21\x84\xcf\x60\x6b\xac\x7f\x1d\xf1\x5c\xb8\xfd\x72\xd7\xcc\x5a\x58\x53\xa0\xa5\x66\x17\x85\xa7\xc3\x3d\x9d\xd6\x23\x1d\x7e\x60\x35\xc3\x28\x48\x99\x74\x30\x68\x50\x39\x2f\xa6\xd5\xca\xd8\xf8\x94\x49\x07\x16\x0b\x8b\x0e\x75\xa0\x21\x6e\x16\x1a\xcc\xe6\x57\x4c\x28\x86\x07\x36\x85\x75\xbc\xa5\x4a\x95\x32\x3b\xed\xd1\x12\x58\x4c\xcc\x4e\xcb\x7f\x35\xb3\x39\x20\xe3\xc5\x28\x41\xe8\xc8\x83\x6b\xb5\x50\xb0\x17\xaa\xc4\x4b\x10\x3a\x85\x5c\x1c\xc0\x22\xcf\x0b\xa5\xee\xcc\xe0\x87\xb8\x18\x3e\x19\x8b\x20\xf5\xd6\xac\x20\x23\x2a\xdc\xea\xea\x6a\x27\xa9\xe6\xd5\xc4\xe4\x79\xa9\x25\x1d\xae\x3c\x45\xca\x4d\x49\xc6\xba\xab\x14\xf7\xa8\xae\x9c\xdc\x45\xc2\x26\x99\x24\x4c\xa8\xb4\x78\x25\x0a\x19\x79\x65\xb5\xe7\xd6\x38\x4f\xff\x64\x2b\x26\x76\x3f\xf4\xc0\x1b\x6c\x95\xf0\x78\x96\x3a\x81\x32\x93\x14\x1b\x57\x54\x9f\x86\x55\xb4\x60\x72\x13\xe3\xf1\xf5\xc3\xc3\x23\xd4\xa2\x03\xe0\x01\xdb\x76\xa8\x6b\x61\x66\x88\xa4\xde\xa2\x0d\x23\xb7\xd6\xe4\x7e\x16\xd4\x69\x61\xa4\x26\xff\x92\x28\xc9\xfb\xc4\x95\x9b\x5c\x12\xdb\xef\x9f\x25\x3a\x62\x0b\xc4\xb0\xf6\x01\x05\x36\x08\x65\x91\x0a\xc2\x34\x86\x3b\x0d\x6b\x91\xa3\x5a\x0b\x87\x7f\x38\xc8\x8c\xa6\x8b\x18\xbc\xd7\xc1\xdc\x8d\x85\xc7\x83\x03\x4e\x9d\x8e\x3a\x10\x4d\xd8\xe4\xa1\xc0\x44\x6e\x65\xd2\xf8\x71\xb5\xcb\x2a\x22\x01\xbf\xcf\xa0\x30\x4a\x26\x87\xde\x2c\xe3\xbb\x8d\x9f\x2a\x76\x71\x14\x38\xee\x3a\x12\xbe\x6e\x47\xd6\x7b\x9e\x49\x25\xec\x32\xac\xbb\x7b\x0e\xb0\x41\x65\xf4\xce\xdb\x6d\x30\x77\x2e\xf5\x47\xd4\x3b\x66\xb9\xeb\x41\xe7\x04\x96\xfe\xbb\x4e\x2c\x18\x6a\x2c\xf4\xe1\xf3\x76\xd8\x1c\x8d\x30\xe2\x58\xff\xa8\xc4\x23\x1c\x6e\xf5\x01\xb6\xa5\xa5\x0c\x2d\x58\xcc\x31\x95\xc1\x1c\xbc\x6c\xad\x0e\x75\x8c\x03\xb9\x05\x41\x90\x1b\x47\xb0\xe8\x06\xb0\x45\x1b\x91\x1c\x2a\x1f\x48\x60\x73\x80\x45\x78\x31\x76\x01\xc2\x22\xb0\x8f\x57\x1f\x0c\xb1\x7b\x89\x38\x6b\xb2\x1a\x09\x5d\x24\x35\x45\xc6\x46\x41\xf5\x15\x90\x2d\xf1\xe8\x03\x6d\x52\x7c\x20\x61\xa9\x2c\x38\x4d\x32\x25\x9d\x31\x75\x1d\xd8\xc0\x70\x5a\x06\x94\x09\x1d\xec\x9a\x96\x36\x2c\xf6\x59\x52\x66\x4a\x02\xe1\x27\x87\x67\xa9\x14\x6f\xc9\xc4\x68\x27\x53\xb4\x98\x32\x5b\x66\x62\x8f\xb0\x15\x52\x61\xea\xe9\xb1\x1e\x55\xa3\x86\xe9\x70\x69\x27\xec\x50\x03\x74\x46\xf9\x8f\x62\x83\xaa\x19\xcc\x7a\xe4\x82\x92\xac\x45\xfd\x39\x33\xae\xd9\x32\xb5\x4e\xf8\x82\x36\x91\xae\x49\x09\xda\x67\x7a\xef\x80\x77\x47\x4a\xb2\x0f\x2f\x4c\x74\xae\xcd\x71\x4f\x2a\x78\xfc\x49\x20\x59\xce\x0b\x79\x2f\xa9\xbe\xfa\xcc\x7d\x92\x01\xf3\x2c\xfa\x98\x61\xaf\xc5\xbb\xca\xed\xfd\xfb\x31\x24\xf9\x91\x84\xf9\x84\x4a\xc7\x5e\x7d\x42\x70\x15\x05\x1a\x44\x33\x41\x3e\x8b\x17\x52\xbb\x2a\xb6\x5d\x82\x80\x27\x3c\x84\x30\xc8\xd1\xb5\x40\x2b\x9a\xc1\x16\x7d\xd0\xf4\x3c\xf1\x84\x07\x3f\xa8\x8a\x89\x13\xba\x9d\x06\x3d\x3c\x4f\x38\x42\x00\x13\xcb\x63\xa9\x15\x69\x85\x75\x72\x83\xd7\x8d\x9b\x9a\xa5\x89\xa2\x50\x12\xc7\x09\xab\x7d\x4e\x72\x45\xfd\xd4\x08\xbc\x5a\xc5\x06\xb2\x36\x6c\x06\x50\x7f\x70\x01\x40\xf6\x95\x4c\x16\xec\xd1\x6c\x0d\xef\x2d\x75\x66\xf1\x4d\x28\x99\x36\x53\x04\xbf\xb8\xd3\x97\x70\x6f\x88\xff\x7c\x78\x91\x1c\x3f\x19\xf7\xf7\x06\xdd\xbd\x21\xdf\xf2\x1f\x2f\x32\x88\x7f\xf5\x12\xc3\x70\xef\x4e\x1a\x84\xb5\xe2\xc0\x6b\xe8\xa6\x17\x2e\x86\xbb\x10\x4f\x1a\x38\xa4\xe3\x00\x6f\x6c\xbd\x16\x9f\xea\x85\x89\xc2\x14\x79\xe9\x7c\x3e\xa0\x8d\x8e\x30\x2f\xe8\x30\x3a\x47\x05\x81\xb1\x3d\x04\x4e\x4c\x57\x4d\xf5\xc8\xbc\x17\x7a\x42\x2a\xa9\xf8\xac\xc4\x4c\xc8\x4a\xfb\xe4\x88\x0f\x84\x32\x81\x1c\xed\x0e\xa1\xe0\xdd\x7d\x0a\xd8\x93\x7b\xf2\x3b\xb0\xaf\x87\x79\xdd\x26\x46\x55\x9b\x38\x9d\x12\x17\xb1\x7f\x4d\xf6\xd5\xf0\x4d\x0c\x98\xc8\x61\x5e\xab\x9f\xa7\x41\x4f\xd6\x13\x68\x74\x8f\x9f\xe7\xd8\xe0\x2c\x62\x43\x06\x0e\xa2\x03\xb7\xe5\xa2\x60\x4f\xfc\x8d\x29\xcc\x3b\xc3\xef\x50\x08\x69\x5d\x0c\xb7\xfe\x18\xad\xb0\xd7\x27\x75\x75\xc6\x69\xa7\xe1\x19\xa4\x03\xc6\x7b\x2f\x14\x93\x26\x6f\x53\x0d\xa8\x02\x85\xfa\x64\xad\xcf\xfb\x97\x55\x24\x62\x2a\xda\x4a\x54\x3e\xdb\x5e\x3c\xe1\x61\x71\x39\xf0\xde\xc5\x9d\x5e\x04\x72\x1d\xf8\x6b\xc3\xc4\x3e\xfb\x58\xf8\xbe\xc5\xf7\x87\x8a\x93\xd6\x3c\xd1\xd9\x9c\xf2\xd7\x46\x07\x7b\x8d\x18\xa9\x87\xfe\x2f\xc3\x2f\xda\x45\xb4\x81\xd0\x1f\x04\xda\x11\x9e\xac\x53\x24\xb4\x39\x67\xbc\xcf\x19\xfa\x0c\xac\x4a\x40\xa4\xeb\xe6\x1e\x8d\x4e\x31\x78\x1c\x3a\xd3\x30\x0a\x89\xc9\x37\x92\xcf\x89\x52\xb3\x3c\xb3\x93\x89\x50\xf0\xf9\xeb\x25\xc8\x18\x63\x9f\xb8\xe9\xc3\x88\x0a\xd2\x71\x36\x1f\x8c\x53\x4b\x6d\x45\x0d\x16\x3d\xb9\xd1\xcf\xa0\xd1\x0f\x00\xf7\x2c\xa8\x51\xc2\x5b\xa2\x8d\x9f\x3e\x0f\x03\x01\x14\xd2\x3a\x7f\x7e\x90\x5b\xc9\xf9\x16\x7f\x5b\xa7\x6b\x31\xc0\xdf\x32\xd4\x4d\xce\x9e\x76\x26\xcc\x84\x83\x0d\xa2\xae\x9d\x7a\x27\xf7\xa8\x21\xdc\x3b\xf8\xd3\xbc\x20\x50\x28\x5c\x88\x94\xb5\xa0\xfa\xd0\x7b\x1a\xfd\x91\xb5\x9f\x0b\xec\x41\xf0\xd4\x36\x3f\x79\x68\xe8\xba\xea\x09\x26\xa0\xa9\x14\xf8\xb5\xdf\xf3\x80\x3f\x4c\xbf\x53\x8c\x1d\x55\xe8\x8c\x76\x55\xcb\x1a\xef\x3b\x14\xc7\x67\x02\x38\xb7\xe5\x73\xa9\xef\xbc\x03\x4f\x1e\xcf\x86\xc4\x3e\xae\x7c\xd4\x3d\x64\x1e\xf5\xd4\x99\xd7\x51\xf3\x08\xa9\xbc\xea\xf8\x3c\xe2\x3c\xfd\x83\x0d\x9f\xc6\x2c\x26\xe1\x1a\xb0\xb9\x87\xab\xbc\xdd\x6c\xc7\xee\xb7\xea\xab\x8d\xd7\x1e\xa8\x7b\xf7\x71\x67\xa8\x90\x0c\x09\xd5\xb9\x32\x1d\x5c\x98\x26\xa6\xd4\xd5\x01\xd1\x1f\xc0\xc6\x0e\xfc\x03\x11\x5b\x63\x73\x41\xfe\xb4\xfb\xe6\x66\xcc\xb0\x32\x2f\xf3\x15\x2c\x27\xec\x3a\x7e\x48\x3e\xbe\x11\xfd\xce\x95\xfd\x0f\xae\xa8\x36\xff\x5f\x50\x63\xe0\xc9\x33\x6b\xfa\x3c\xf8\xa0\x3d\x53\xf8\x3b\xc1\x5d\xdb\xd1\xf8\x96\x5f\x27\x76\xaa\x1e\x43\x56\xec\xac\xee\xa7\xb7\xdf\xb5\x04\x12\x76\x87\x74\xce\x16\x8f\x61\x14\xb8\xcc\x3c\x07\x7d\x2b\x27\x6d\x62\x6d\x63\x9d\xce\xd5\x6d\xff\x52\x49\x3a\x78\xe6\xfc\x65\x8c\xb5\x26\x03\xdd\x49\xae\x9b\x22\x91\xd1\xbd\x3d\x68\x0c\xe8\x76\xae\x3b\x1c\x19\x2b\x76\xb8\x82\xad\x50\xae\x6a\x2a\x37\xcd\x95\x68\xad\x5e\x45\x11\xf0\xdb\xef\x73\x89\xe3\xff\xb9\xc4\xf1\x76\x2e\x71\xcc\x25\x8e\xb9\xc4\x31\x97\x38\xe6\x12\x47\xbf\x7f\x2e\x71\xcc\x25\x8e\xe3\xc9\xe7\x12\xc7\x5c\xe2\xe8\x3f\x73\x89\xa3\x7e\xe6\x12\xc7\x5c\xe2\x98\x4b\x1c\x73\x89\x63\x2e\x71\xcc\x25\x8e\xb9\xc4\x31\x97\x38\xe6\x12\xc7\x5c\xe2\x98\x4b\x1c\x73\x89\xa3\xa7\xfa\x7f\xb9\xc4\xd1\xb6\x9c\xae\x70\xb4\x64\x21\x92\x04\x0b\xc2\xb4\xf3\x9b\x91\xf0\x2b\x95\xc5\xc2\xbf\xd4\x3f\x38\xf1\xaf\x6d\x3e\xb0\x82\xbf\xff\xe3\x22\x08\xc6\xf4\x5b\xfd\xe3\x10\x6e\xfc\x77\x00\x00\x00\xff\xff\xfe\xe3\x08\x5a\x26\x34\x00\x00") + +func clusterApiClusterXK8sIo_machinehealthchecksYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiClusterXK8sIo_machinehealthchecksYaml, + "cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml", + ) +} + +func clusterApiClusterXK8sIo_machinehealthchecksYaml() (*asset, error) { + bytes, err := clusterApiClusterXK8sIo_machinehealthchecksYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml", size: 13350, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcc, 0x6d, 0xf8, 0x52, 0x27, 0xfe, 0x2a, 0x86, 0x5d, 0x1f, 0xa9, 0x36, 0x7c, 0x70, 0x1d, 0x7b, 0x87, 0xe4, 0x7c, 0xbe, 0xbb, 0x84, 0xe0, 0xbf, 0xb4, 0xbb, 0x8e, 0x46, 0xce, 0xe5, 0xa0, 0x30}} + return a, nil +} + +var _clusterApiClusterXK8sIo_machinesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3c\x6b\x6f\x1c\x37\x92\xdf\xfd\x2b\x0a\xde\x0f\x4a\x80\x99\x96\xec\xcd\x6e\x16\x02\xee\x83\xcf\x8f\x3d\xdd\xc6\xb6\x60\xc9\xb9\x03\xb2\x01\x96\xc3\xae\x9e\xe1\xaa\x9b\xec\xf0\x21\x79\x6e\xb1\xc0\xfd\x8d\xfb\x7b\xf7\x4b\x0e\x55\x24\xfb\x31\x0f\xcd\xd8\x42\x72\x76\xd2\xf3\x45\x1a\x36\x9b\xac\x2a\xd6\x9b\x35\x25\x5a\xf5\x3d\x5a\xa7\x8c\x3e\x07\xd1\x2a\xfc\xe0\x51\xd3\x37\x57\xdc\xfc\xc9\x15\xca\x9c\xde\x3e\x79\x74\xa3\x74\x79\x0e\xcf\x83\xf3\xa6\x79\x87\xce\x04\x2b\xf1\x05\x56\x4a\x2b\xaf\x8c\x7e\xd4\xa0\x17\xa5\xf0\xe2\xfc\x11\x80\xd0\xda\x78\x41\xc3\x8e\xbe\x02\x48\xa3\xbd\x35\x75\x8d\x76\xbe\x44\x5d\xdc\x84\x05\x2e\x82\xaa\x4b\xb4\xbc\x78\xde\xfa\xf6\xac\xf8\xa6\x78\x32\x3f\x2b\x9e\x9e\x3d\x3d\x7b\x72\x76\xf6\xf4\xec\xec\xec\xdb\xa7\x67\xf3\x3f\x7c\xfb\xf4\x0f\x67\x42\xc8\x27\xdf\x56\x7f\x7c\x04\x20\x2d\xf2\xe2\xd7\xaa\x41\xe7\x45\xd3\x9e\x83\x0e\x75\xfd\x08\x40\x8b\x06\xcf\xa1\x11\x72\xa5\x34\xba\x42\xd6\xc1\x79\xb4\xc5\x87\x79\x44\xe3\x91\x6b\x51\x12\x44\x4b\x6b\x42\x7b\x0e\x5b\xcf\xe3\x0a\x19\x68\xe1\x71\x69\xac\xca\xdf\xe7\x79\xfe\x5c\xb4\x8a\x47\x22\x49\x5e\xc7\xed\x78\xa4\x56\xce\xff\x65\x38\xfa\x9d\x72\x9e\x9f\xb4\x75\xb0\xa2\xee\x81\xe3\x41\xb7\x32\xd6\xbf\xe9\xb7\x9c\x43\x23\xe2\x03\xa5\x97\xa1\x16\xb6\x9b\xff\x08\xc0\x49\xd3\xe2\x39\xf0\xf4\x56\x48\x2c\x1f\x01\x24\xd2\xf1\xeb\x73\x10\x65\xc9\x87\x21\xea\x4b\xab\xb4\x47\xfb\xdc\xd4\xa1\xd1\xdd\xe2\x25\x3a\x69\x55\xeb\x99\xd8\x97\xd6\xdc\xaa\x12\x2d\x5c\xbc\xe0\xc7\x00\x7f\x77\x46\x5f\x0a\xbf\x3a\x87\x82\x08\x55\xb4\x69\x46\x37\x21\x92\xf7\x72\x73\xd8\xaf\x09\x2e\xe7\xad\xd2\xcb\x5d\x3b\x25\x52\x80\xf3\xc2\x07\x07\x2e\xc8\x15\x08\x07\xd7\x68\x1b\xa5\x85\x57\x7a\x79\x7a\x89\xba\xa4\xbf\xef\x82\xd6\xf4\xf7\x95\x50\x35\x96\x80\x5e\xee\x80\x8d\x97\x29\xda\x95\x70\x38\x06\x6c\x30\x72\x08\xa6\xbf\x84\x05\x5a\x8d\x1e\x5d\xa6\x21\x08\xe7\x8c\x54\xc2\x63\x09\x77\xca\xaf\xc0\xaf\x94\x1b\x1d\xee\x36\x85\xd2\xab\x23\x28\xbe\x1f\x8d\x1d\x82\xe3\x8d\x29\x91\x5f\xdc\xbd\x7d\xb3\x77\xfb\x48\x04\x6d\x4a\x7c\x87\x55\x41\x2b\x8c\xa0\xa0\x75\xdf\xf4\x83\xad\x55\xc6\x2a\xbf\x3e\x87\x27\xfb\x00\x8b\xef\xdd\x3e\x11\x75\xbb\x12\xbf\x8f\x5c\x28\x57\xd8\x88\xf3\xf4\x86\x69\x51\x3f\xbb\xbc\xf8\xfe\xf7\x57\xa3\x61\xd8\x7d\xd8\xca\x81\x5f\x21\xc4\xb9\x50\x19\xcb\x5f\x33\xf7\xc3\xb3\xcb\x8b\xee\xfd\xd6\x9a\x16\xad\xef\x04\x2d\x7e\x06\x3a\x69\x30\xba\xb1\xdb\x09\x01\x94\xce\xaf\x24\x65\x84\x71\xdb\x74\x30\x58\x26\x1c\xc0\x54\x91\xa0\x16\x5b\x8b\x0e\x75\x54\x4f\x34\x2c\x34\x98\xc5\xdf\x51\xfa\x02\xae\xd0\xd2\x8b\x24\x96\xa1\x2e\x49\x6b\xdd\xa2\xf5\x60\x51\x9a\xa5\x56\xff\xd5\xad\xe6\xc0\x1b\xde\xa6\x16\x1e\x9d\x07\x96\x35\x2d\x6a\xb8\x15\x75\xc0\x19\x08\x5d\x42\x23\xd6\x60\x91\xd6\x85\xa0\x07\x2b\xf0\x14\x57\xc0\x6b\x63\x11\x94\xae\xcc\x39\xac\xbc\x6f\xdd\xf9\xe9\xe9\x52\xf9\xac\x6f\xa5\x69\x9a\xa0\x95\x5f\x9f\xb2\xea\x54\x8b\xe0\x8d\x75\xa7\x25\xde\x62\x7d\xea\xd4\x72\x2e\xac\x5c\x29\x8f\xd2\x07\x8b\xa7\xa2\x55\x73\x06\x56\xb3\xce\x2d\x9a\xf2\x77\x36\x69\x68\x77\x32\x22\xde\xd6\xa9\xc7\x0f\x2b\xb2\x7b\xa8\x4c\x2a\x8d\x4e\x54\xa4\x57\x23\x16\x3d\x31\x69\x88\xe8\xf1\xee\xe5\xd5\x35\xe4\xad\x23\xc1\x23\x6d\xfb\xa9\xae\x27\x33\x91\x48\xe9\x0a\x6d\x9c\x59\x59\xd3\xf0\x2a\xa8\xcb\xd6\x28\xed\xf9\x8b\xac\x15\x6a\x0f\x2e\x2c\x1a\xe5\xe9\xfc\x7e\x0a\xe8\x3c\x9d\x40\x01\xcf\xd9\xd0\xc0\x02\x21\xb4\x25\x49\x4e\x01\x17\x1a\x9e\x8b\x06\xeb\xe7\xc2\xe1\xcf\x4e\x64\xa2\xa6\x9b\x13\xf1\x8e\x23\xf3\xd0\x46\x6e\x4e\x8e\x74\x1a\x3c\xc8\xb6\x6a\xcf\x99\x24\x39\xbb\x6a\x51\x8e\x38\xbf\x44\xa7\x2c\x71\xaa\x17\x1e\x89\xbf\xc7\x1a\xec\x3e\x89\xa3\xcf\xc2\x18\xef\xbc\x15\xed\xe6\x83\x8d\xed\xff\x35\xcf\x8b\x6c\x61\xb1\x42\x8b\x9a\x0e\xdd\x80\x80\xda\x48\x51\x13\xfe\x41\x7a\xb8\x5b\x29\xb9\x02\xd4\x52\xb4\x2e\xb0\xc4\x40\xa5\xb0\x2e\x59\x8a\xa4\xd1\x95\x5a\x06\x8b\x0c\x7c\x82\xf5\x7f\xff\xfb\x7f\x5c\x0f\x49\x4b\xdc\xd5\xa0\x5c\x09\xad\x5c\x53\x6c\xc1\xb5\x1f\x19\x88\xae\x47\xa5\x96\xef\xb0\xda\xf5\x70\x03\xa9\xe7\x79\xee\x4e\xa4\x3a\x80\x20\x1b\xc6\x39\x9d\x91\xaa\x94\x1c\xf2\xbc\xf0\xb0\x32\x84\x5d\x46\x2d\x6a\x9a\x12\xbd\x50\xb5\x2b\xe0\x7a\x85\x83\x95\x49\x42\xda\x68\xb3\x79\x97\xba\x36\x77\x10\x1c\x5a\x77\x4a\x58\x09\xe2\x48\x7a\x10\x77\x5a\xf7\x74\x2f\x5e\x08\x2f\xd8\x52\x98\x10\x25\x45\x23\x96\xac\xd0\x06\xee\xd6\x36\xb5\x0e\x53\x0c\xee\x51\xbe\x7b\x49\xf7\xec\xf2\xa2\x33\xa4\xac\x6b\x3b\x24\xfd\x6e\x18\x60\xbf\x98\x0c\x3f\xcc\x29\x6c\xf3\x8e\x83\xe3\xe4\xa2\x8a\x1b\xb3\x9a\xe2\x73\x6b\x15\x4a\x1c\x69\x7a\x50\xda\x79\x14\x65\x1a\x24\x89\xb6\x98\x9e\xcd\xa2\x32\x4a\x7a\xae\xb7\x04\x5e\x28\x0d\x82\x14\x9f\x2a\xe1\xdf\xaf\xde\xbe\x39\xfd\xb3\x89\xd0\x81\x90\x12\x9d\x8b\x12\xd7\xa0\xf6\xb3\xce\xc5\x49\xc2\x78\x45\x4f\x8a\x46\x68\x55\xa1\xf3\x45\x5a\x0d\xad\xfb\xe1\xe9\x8f\x05\xbc\x32\x16\xf0\x83\x68\xda\x1a\x67\xa0\x22\xed\x3a\xad\x39\xe0\x13\x46\xa6\x7b\x97\x8f\x9e\x41\x6a\x4d\x99\x80\xbe\x63\x60\xbd\xb8\x41\x30\x09\xd8\x80\x50\xab\x1b\x3c\x87\xc7\xec\xb0\xf4\x5b\xff\x83\xec\xfd\x3f\x1f\xc3\x57\x77\x2b\xb4\x08\x8f\xe9\xeb\xe3\xb8\x61\x67\xde\xd8\x2f\x49\xa7\xd9\x6f\xcc\x2c\xee\xad\x5a\x2e\x91\x14\x0d\x6b\x6c\xd2\x8a\x5f\x83\xb1\x04\xbf\x36\x83\xc9\xbc\x04\xd1\x33\x4a\x0a\x96\x5b\x80\xfc\xf0\xf4\xc7\xc7\xf0\xd5\x18\x2f\x50\xba\xc4\x0f\xf0\x14\x94\x8e\x98\xb5\xa6\xfc\x9a\x44\x87\x56\x5a\x6b\x2f\x3e\xd0\x9a\x72\x65\x1c\x6a\x30\xba\x5e\x13\xc4\x2b\x71\x8b\xe0\x4c\x83\x70\x87\x75\x3d\x8f\x4a\xb1\x84\x3b\xb1\x26\x1c\x32\x29\xe9\x54\x05\xb4\xc2\xfa\x0d\xe3\x7f\xfd\xf6\xc5\xdb\xf3\xb8\x1b\x1d\xdb\x52\xd3\x16\x64\x5e\x2a\x45\xc2\x49\x36\x3d\x9a\x29\x3e\x73\x02\x24\xc4\x43\x22\x2d\xb6\x12\x7a\x89\x11\x5a\x84\x2a\x90\xc1\x28\x4e\x1e\xc2\xf7\xdb\x16\x79\x3f\xcb\xb3\x75\xde\x14\xba\xff\x37\xdb\xf7\x91\x88\xb2\xdb\x79\x24\xa2\x6f\x06\xfc\x78\x2f\xa2\x37\x9d\x77\x4f\xb8\x96\x46\x3a\x42\x53\x62\xeb\xdd\xa9\xb9\x45\x7b\xab\xf0\xee\xf4\xce\xd8\x1b\xa5\x97\x73\x62\xb8\x79\xe4\x02\x77\xca\xf1\xdf\xe9\xef\xf8\xcf\x83\xf1\xe2\x30\xed\x63\x90\xe3\x17\x7e\x09\x0c\x69\x1f\x77\xfa\x20\x04\xb3\xc9\xfb\x38\x3b\x71\x72\xb5\x69\x32\xb3\xfb\xee\x4d\xf2\x14\x92\x9f\x3e\xd0\x7c\x8d\x28\xa3\x6a\x14\x7a\xfd\xb3\x33\x36\x91\x31\x58\xda\x7b\x3d\x4f\x86\x74\x2e\x74\x49\xff\x3b\xe5\x3c\x8d\x3f\x88\x6e\x41\x1d\x2d\xd8\xef\x2f\x5e\xfc\x32\xec\x1e\xd4\x83\xa4\x78\x8f\x07\xdb\x21\xb5\xe5\xf2\xee\x44\xf7\x31\x7b\x34\xc9\x10\x44\x67\xb6\x77\xb9\x68\x8d\xde\xae\xca\xda\x84\x72\xae\xb4\xf2\xd9\xaf\x82\xb8\x90\x2b\xe0\xa2\x02\xad\xea\xd9\xd0\x9f\xcc\x66\xdc\x62\x43\x56\x3c\xa9\xe9\x94\x73\x88\x76\xbb\x80\xbf\x6a\x78\x41\x41\x8a\xa4\x40\xe2\x3c\xda\x9a\xa8\xeb\x57\xc2\xc1\x02\x91\x7c\xb8\xfc\x9c\xd6\xc8\xa1\x32\x9b\x86\x3b\x55\xd7\x14\x88\x58\x6c\xcc\x6d\x7c\x2e\x92\x21\xc8\x7e\x51\x01\x57\x77\xca\x13\x83\x1b\x20\x54\xaf\x50\x5a\xe4\xec\x4f\xf1\xf8\x1e\xb2\xee\xa5\x7b\x39\x5a\xe3\x08\x02\x8f\x37\xcd\x11\xfa\xd0\xc8\x3b\x7e\x1a\x2d\xbc\xf3\xc6\xe2\xae\x63\x48\xa4\xfe\x64\x4a\x7f\x3c\xae\xf7\xf0\x57\x4a\xc9\xed\xa6\xc0\xd8\xb9\xef\x67\xee\x42\x3d\x3d\x1e\x05\xad\x0b\xac\x8d\x5e\x72\xac\xb9\xb5\x76\xa3\xf4\x77\xa8\x97\x7e\xd5\xa7\x54\x8e\xc2\xa6\x12\xaa\x0e\x16\x5f\x18\x22\xd0\x01\x90\x5f\x0d\xe7\x66\xa0\xd3\x02\x50\xc6\xd1\x41\x56\xa5\x63\x42\x4e\x90\x32\x13\x16\xf0\x3a\x38\x0f\x8d\x20\xbe\x13\x70\x83\xeb\x7c\x26\xa3\xb5\x49\xc5\xb6\xf1\xc4\x4b\x72\x1d\x63\xe0\x1d\x09\x92\xfc\xa3\x8f\xc1\x51\xe9\xca\x8a\x18\xfd\x05\x8b\x3b\x63\xaf\x11\x9e\x17\x9b\xf3\x73\xfc\xf5\x53\xe0\x58\x76\x23\x10\x93\x9c\x83\xee\x63\x2e\x53\x55\xec\x89\x2e\xd6\xe4\xcf\x8d\x37\xef\x62\xb5\x8f\x8d\x1b\x0f\x45\x40\x0f\x8b\x7e\x0e\x88\xf6\x81\xa8\x67\x8a\x78\xa6\x88\xe7\xcb\x89\x78\x0e\xf0\xfa\xfe\x48\xe7\x4b\x88\x72\x0e\x20\xb7\x3f\xba\xf9\x0c\x23\x9b\x23\x70\xb9\x27\xa2\xf9\x4c\xa3\x99\x03\x48\x1d\x15\xc5\xfc\x56\x22\x98\x03\xb4\xda\x1b\xb9\x7c\x76\x51\xcb\xa7\x7a\x93\xda\x94\xf8\xc2\x0a\xc5\x57\xcb\x26\xf8\x03\x7e\xcb\xc9\x9b\x8d\xf9\xd9\x47\xf3\xc6\x93\x02\x6d\x4c\xd0\xac\x74\xbd\x6a\x52\x6a\x38\x1b\x96\x98\x9e\x8d\x1e\x9b\x6b\x51\xb3\xdb\x55\xd2\x52\x51\x5d\x13\x24\x31\x57\x5c\x62\x25\x42\xed\x93\x69\x53\x0e\xce\x66\xd0\xa0\xd0\xf1\xce\x25\x2d\x49\xd3\x41\x0a\x4d\xde\x1f\xaf\x92\x6e\x11\x09\x26\xa1\xd7\x11\x80\x5a\x35\x2a\x5d\xcb\x17\xf0\xe6\xed\xf5\xcb\x78\x4d\xb8\x89\x40\xa9\xaa\x78\x6a\xf1\x46\xe6\x6f\x74\x4e\xd2\xd7\x71\x5d\x98\xcf\x7d\x9c\xfa\xb7\x6d\xd2\xdf\x43\xf6\xfe\x2e\xf9\x00\x4d\xfb\xdb\xe5\x4c\x4c\x55\x12\x6f\x57\x4a\xc6\x44\x7a\xcf\x5d\xd9\xed\x4d\x6b\xb3\x03\x48\xe3\x9d\xcb\x37\x0c\xe2\x9a\xde\x0f\x1e\xce\xa1\xe5\x84\x03\x87\x6c\x56\x7b\x5a\x26\x77\x44\x1a\x6b\xd1\xb5\x26\xc6\x2f\xec\x24\xf4\xb7\xb2\xa3\xf5\x95\xeb\xfd\xd5\xc5\x1a\x56\x6a\xb9\x42\x0b\x35\x09\x2d\x1d\xb8\x0b\x0d\xb9\x19\xa6\x1a\x16\x11\x14\xf0\x32\x7a\x41\x10\x1c\x1d\x9f\xe3\xf3\xcd\x8e\xb7\x08\xde\x38\x29\xea\xec\x21\x0c\x5e\x24\x90\x7b\x2c\x9f\xd7\x28\xf4\x3c\xb4\x50\x9b\xa5\x92\xd9\x26\x0f\x5e\x97\xa6\x69\x05\x05\x73\xdd\xf5\xab\x37\x8c\x26\xff\x53\xb1\x61\x0d\xbe\x7f\x2a\x7c\x4f\x9f\xa8\xd1\x24\xfb\x59\xe4\x1b\x2c\x91\x9c\xb4\x25\xe9\x11\x42\x55\xb8\xe1\x55\x3a\xaf\x59\xc0\x7f\xec\x00\x57\xc0\x12\x35\x5a\x25\x69\xab\xb9\xa9\xe6\xde\xe2\xe0\x18\x2a\x33\x44\x78\xb6\xe1\x78\x0c\x29\x3b\xc0\xcb\x1b\xe2\x77\xb1\xa8\xb1\xf3\x86\x44\xbf\x24\xe9\x8f\xcc\x2a\xb5\x72\x2c\x88\x5d\x69\x08\x3c\xd3\xc6\xf3\x09\xa5\x27\x91\x1c\xca\xc1\x4f\x01\x2d\x79\x6d\xdd\x75\xe4\xcd\x9f\x1c\x45\x03\x8e\x6f\x2d\x93\x57\x84\x9a\x3d\x53\x22\xab\x72\x86\x1d\xa7\xd2\x68\x1c\x91\x33\xe8\x01\x9d\x7a\xda\xea\x12\x84\x25\xe6\xb5\x37\xb4\x8b\xb1\x50\x62\x8d\x7e\xcc\x4d\x39\x92\x73\xe8\x33\x57\x0b\xe9\x43\xbc\x0e\xa2\x25\x12\x4b\x6d\xf3\x1a\xc9\x0a\xc5\x34\xec\x04\x8f\x88\x45\xba\x22\xaf\xcb\x37\xd6\x95\x60\xdf\x70\x17\x73\xe5\xb3\xda\x1f\x3d\xdd\x23\xeb\xb7\xfb\x6c\xe9\x48\xd0\x77\x5d\xdb\xe7\xcb\xcb\xed\xea\x8c\x4d\x59\x23\x0d\xe8\x13\x03\xe4\x0b\xb4\x7a\x4d\x72\xc4\x24\xd9\xbe\xab\x73\x1f\x81\x42\x66\xb7\x31\x06\xf3\x7e\xd5\x8d\xf1\x41\x12\x62\xe3\xc9\x56\x24\x7c\xd4\xcd\x2f\xd7\x76\x1c\x71\xf7\x1b\xeb\x69\x86\x04\x34\x0b\x66\xd3\x4f\xbe\xfe\x15\x65\x69\xd1\xb9\x5d\x21\xf1\x38\xe0\xcd\xf3\x62\xa4\x9e\x85\xa8\x7b\x1d\x84\xa3\x80\x82\x82\x25\x33\xd4\xd5\x9b\xc7\x28\x4d\x3b\x92\xb5\x3d\xc1\x7b\xef\x4c\x6d\x9f\xa2\xf2\xd8\xec\x8c\xe0\x77\x91\x2c\xc1\xdd\x67\x19\xc9\x25\xb1\x4d\xb4\x2c\xb9\x48\x85\x54\xc1\x89\xcb\xc8\xec\x0a\xe0\x0f\x5d\xa0\xa6\x57\xf7\xe5\x79\x47\x90\x5d\x0f\x2c\xd9\x3d\x5b\xc2\xd1\x89\xd8\x63\x36\x7d\x3d\xde\x90\x5f\x9c\x01\x69\x30\x53\xc1\xbf\x19\xe7\xc9\xc5\x9a\xc1\xcb\x0f\xb1\xb0\xe5\xe2\x92\x22\xdd\x0b\x9d\xbf\x7d\x22\x80\xbb\xe5\x2a\x7e\xe6\x19\x96\x9d\xcf\x68\xe1\x1d\x0f\xee\x4d\x3c\xc7\x87\xc2\x5a\xb1\xde\x57\xe4\xf0\x0e\x45\xb9\x3e\xb6\xd2\x81\x27\x67\xa7\xa4\x93\xaf\x71\x7e\xf4\x90\xbe\x5c\x18\x43\xc6\x7a\x33\x89\x49\xfe\xc5\xa0\x5c\x72\x2f\x2c\xcf\xbb\x89\x9d\xd4\x47\x4f\xdf\x03\xc9\xbd\x92\x1b\x80\xa5\x63\xfe\x54\xa1\xe9\xb6\xeb\x76\xe3\xec\x01\x6d\xd5\x97\x4f\x75\x99\xd3\x67\x97\x17\x83\x9c\x1c\x17\x2f\xc4\xba\x86\xbd\x69\xdf\x43\x62\x54\x0b\xe7\xaf\xad\xd0\x4e\xe5\x72\xcf\xa3\x98\xfb\x3b\xe1\x7c\x76\xb9\xb1\x27\x2e\xf8\x6e\xa9\xac\x72\x4c\x5f\x95\xe8\x0d\x88\xe8\x12\xe4\xac\x4b\x4c\x84\x2d\x10\xee\xc8\xdc\xd3\x52\x41\x97\x68\xeb\x35\x19\xcd\x7e\xd5\x98\x09\x29\x39\x1d\xce\x36\x36\x25\x51\x6e\xb4\xb9\xd3\xb3\xe8\x2b\x04\x97\x2b\xa4\x18\xac\x6e\x41\x22\x59\xd4\x85\x69\x15\x56\xa7\x92\x62\x20\xf2\x6a\xf6\x89\x59\x54\x59\xe7\x50\x0a\x8f\xec\x8e\x7f\xaa\xbe\x68\xd0\x39\xb1\x3c\x8e\xaa\xcf\x60\x15\x1a\xa1\xc1\xa2\x28\xd9\xe5\x4a\x2f\x83\xd2\x25\xfb\xe6\x7a\xd9\x5d\xc6\x88\x45\x2e\x4a\xe9\x69\x3e\xf6\xc6\xc5\x9a\x28\x8b\x4d\xeb\xd7\x9f\xac\xed\x2c\x0a\xb7\xff\xe2\x71\x4b\xc9\xc6\xe9\x9d\x96\xef\x4e\xf0\xc4\x31\xa3\x0d\x40\x25\x17\x7a\x50\x45\x46\x2f\x77\x95\x3e\x74\x64\x04\xbd\x5c\x19\xe3\xf8\x28\xd9\x8d\x34\x96\x0f\xdd\x6f\x58\x37\xed\x48\x1b\x90\x9f\x0c\xcb\x20\xac\xd0\x1e\xb1\xa4\x35\xb6\xa8\x91\x0a\xd9\x1e\x46\x11\x87\xb7\xc8\x65\x9e\xc7\xd0\xe4\x2a\x4d\xce\x4a\x8b\xa5\x1b\x3f\xb4\xb5\x92\xca\x83\xac\xc9\x84\x77\x51\x97\xa9\xe0\x5d\xa4\x9f\x34\x25\xce\xc0\x45\xb3\xce\x95\x4a\x84\x7c\xe7\xdf\x52\x10\xaa\x9a\x06\x4b\x25\x3c\x92\x47\x46\x32\xe3\x7c\x72\x9b\x7b\x75\xa5\xc8\x9b\xe5\xb2\x5b\x72\x88\xa5\x27\xb6\x37\x96\xc2\xac\x7a\x1d\x49\xde\xc1\x17\x89\xf4\xfa\xfd\xd5\x75\x76\x89\x39\x01\xca\x52\x14\x7d\xa0\x7f\x79\x25\x6a\xb7\x57\x5c\x0e\x93\x6d\x87\xc3\xb5\x8f\x68\x51\x5b\xf4\x29\xe2\xc8\x43\x9d\xed\xbc\xb6\x01\x67\xc0\xe0\xcc\xe0\xbd\x66\x25\xf0\xf3\x9b\xf3\xeb\x75\xcb\xbb\xf7\x5a\x69\xc8\xc1\x9c\xa5\x26\xc6\x37\x45\xca\xba\x17\xd2\x34\xa7\xc3\x3a\x49\xa1\xd7\x50\x74\x6f\x17\xb4\x71\xaa\x54\xe5\x60\xa5\xcb\x1c\xd1\x31\x59\xe3\x5c\xa7\xe8\x53\x9c\xf1\xec\x56\xa8\x9a\xb4\xc2\x0c\x16\x81\x18\x59\x0a\x0a\x69\x85\x5d\x28\x6f\x85\x5d\x0f\x4c\x5c\x4e\x53\x04\x87\x55\xa8\xe1\x2b\x87\x08\x5c\xc7\x9c\x6b\x9a\xfb\xa9\x5f\xc7\xbb\x45\xb1\x50\x35\xf1\x81\x37\x50\xa2\x34\xba\xaa\x95\x64\x35\xab\x9a\xd6\x58\x2f\xf6\x97\x98\x3d\xc8\x1f\x89\xe0\xfc\x02\xee\x48\xba\xd1\x7b\xbd\x4f\x19\x8f\x6f\xc9\x5f\x8d\x66\x8f\x22\xc5\x14\xf9\xf3\xdd\x44\x97\x1b\xb2\x18\x7d\x74\x1f\xcb\xed\x6b\x12\xf7\x45\x8d\x0d\x97\x35\x6b\xa9\xea\x6c\x9a\x3a\x9f\x30\x5f\x67\xf7\x77\x40\x8d\x89\xd7\xd8\x0b\x52\x79\xf9\xa2\x28\x28\x36\x52\xac\x50\x6b\xb3\x5c\x72\xe2\x4a\x97\xc9\x4c\xc4\x00\xb5\x8d\x9a\xff\xaf\x7a\xa8\xee\x92\x65\x4d\x1a\x8f\x00\x67\x9d\x9c\xd4\xef\x2d\x02\x5a\xcb\x65\x8f\x84\xc1\xb0\x9a\x11\x2a\x21\x31\x8f\x5b\x24\x65\x85\xd2\xc7\x20\x63\x81\x50\xa9\x0f\xa4\x69\x83\x37\xe4\xd0\x4b\x0e\x08\x0d\xc5\xec\x6c\x74\xbf\x62\x46\xcd\x6e\x92\x09\x5e\x2c\x91\x38\x8c\xf8\x35\xdf\x8e\x25\x53\x96\x72\x75\xce\x34\xe8\x57\x84\x16\x81\x1e\x74\x29\x1a\xd4\x9e\x97\xbd\xb3\x26\x47\xce\x03\xd2\x9d\xc4\x5b\x1f\xe8\x2d\xcc\xa0\x00\x74\x70\xab\x14\xb1\x99\xa5\x5c\x82\xf0\xd0\x08\x1d\x44\x1d\xa3\xf2\x94\xc9\x1d\xa6\x3d\xba\x3c\x51\x54\x3c\xf9\x20\x13\x99\xee\xb2\x9f\xa2\x74\xbc\xab\x93\xa6\x59\xf0\x0f\x2b\x48\xda\x4c\x45\x14\x26\xeb\xec\x32\x7f\x10\x8c\xb3\x2c\xde\x1d\x31\x83\x76\xa1\x25\x79\xea\x13\x69\x43\x58\x13\x4e\x31\x1b\xe6\x14\x1d\xfc\xe0\x60\x94\x77\x58\x57\xb0\x40\xf6\x8d\xac\xca\xe4\x6f\x94\xeb\x2a\x7c\x4b\xe6\x83\x67\x7a\x9d\x8e\x9a\x98\x74\x78\xd2\x46\xca\x60\xa1\x0c\x36\x33\x64\xc7\xa0\x1d\x01\x5f\x0f\xad\xcc\x82\xc3\x97\x98\x83\x62\x96\xef\x6e\xf1\x32\x27\xa7\x24\x9e\xd0\xe5\x69\xe2\xd1\x58\x99\x31\xc6\xed\xc4\x11\x37\xb4\xc1\xef\x28\xc3\x38\x7c\x91\xff\x6e\x8f\x13\xb2\x53\x68\x93\x09\xfd\x45\x64\xd6\x05\x29\x95\x96\x39\x71\x3c\x12\xd7\x1c\x6f\x32\xc3\xb5\x16\x63\x56\x78\x92\xd3\x49\x4e\x7f\x7d\x72\xba\x99\x82\x3b\x1c\xf1\x6f\x96\xa3\xec\x0b\xfb\x8f\xae\x34\xb9\x2f\xf6\xa7\xd0\xe3\x7d\xfc\xf5\xca\x01\xb0\xbe\xeb\x67\x76\x77\x22\xe8\xfa\x60\x92\x7f\x10\xb7\x11\xf9\x6f\x46\x36\x58\x6e\x43\x77\x38\x9a\xbc\x87\xba\xe9\x07\x68\x07\x40\x7f\x13\x67\x45\x15\x95\x7e\xdb\x63\xd2\xf1\x0e\x2f\x58\xf8\xd7\x70\xaa\x02\xe5\x01\x3f\x28\xe7\x77\x64\xc2\xa6\xaa\x9d\xa9\x6a\x67\xaa\xda\x99\xaa\x76\xa6\xaa\x9d\xe3\x71\x99\xaa\x76\xa6\xaa\x9d\x43\xf4\xf9\x82\xab\x76\xf2\xa5\xe7\x9f\x51\xa7\x4b\x87\x03\xee\xc8\xdb\xad\x17\xb2\x7f\x97\x7e\xd0\xbd\xec\x1f\x74\x37\xaa\x5b\xbe\xf6\x7e\x4f\x4a\x69\xff\xc7\x6f\xf6\x60\x40\xb1\xc3\x12\xed\x66\x79\x0c\xf9\x6e\x87\x2a\x63\xd8\xbf\xeb\x7f\x48\x3d\xca\xa7\x76\xce\x5f\x77\x95\x28\x53\x82\xb5\x80\x97\xc5\xb2\xc8\x35\xf8\x33\x48\x2d\x16\x66\xc3\xfe\x0b\x33\xe8\x1b\x2e\xfc\x8c\x57\xfd\xd9\xb8\x8e\x41\x1f\xb8\x60\x83\x7b\x7f\x1b\xc1\xec\xaa\xd1\xb7\xfc\xc4\x64\x66\x37\x6a\x01\x04\x7f\xe3\x70\x6a\x11\x16\x0b\x0e\x94\x43\x9b\x2f\x79\xba\x7b\x66\x76\x34\xc7\x51\x48\x01\x17\x9c\x54\x8c\x5e\x16\x85\xa4\xa9\xac\x20\x86\x9e\x29\x5d\x49\x11\x30\xea\x72\x1e\x1c\x5a\x78\xff\x9f\xd1\x59\xe5\xdf\x2b\xa7\x63\xf9\x08\xf2\xed\x64\xe9\xad\xc1\xc8\x7e\xe7\xe0\x6d\x88\x9e\xb9\xf3\xc6\x8a\x25\x9e\x43\x25\xea\xd4\xef\xc2\x85\x45\x97\x90\xcd\x67\x91\x92\xda\xf0\x8f\x7f\x4e\xbd\x41\xa6\xde\x20\x43\x28\x1e\xd8\x1b\x24\x6a\xb6\xa9\x37\xc8\xd4\x1b\x64\xea\x0d\x32\xf5\x06\xd9\xb1\xfd\xd4\x1b\x64\xea\x0d\x32\xf5\x06\x99\x72\x6e\x53\xce\x6d\xea\x0d\x32\xf5\x06\xd9\x83\xd7\xd4\x1b\x64\x1b\xcd\x5f\x6f\x8e\xee\x48\xba\x4d\xbd\x41\xf6\xa0\xfb\x85\xf6\x06\xf9\x66\xea\x0d\x32\xf5\x06\x39\x1e\x9b\xa9\x37\xc8\x36\x9e\x53\x6f\x90\x8d\xcf\x54\x65\x30\x45\x3c\xbf\x9a\x88\x67\xaa\x32\x38\x8c\xdc\x67\x11\xd9\x4c\x55\x06\x53\x95\xc1\x6f\xbb\xca\x60\xea\x0d\x32\xf5\x06\x99\x7a\x83\x4c\xbd\x41\xa6\xde\x20\x53\x6f\x90\xa9\x37\xc8\x3d\x87\x37\xf5\x06\x99\x7a\x83\x7c\x3c\x80\x53\x6f\x90\xa9\x37\xc8\xf0\x33\xf5\x06\x99\x7a\x83\x4c\xbd\x41\xa6\xde\x20\x53\x6f\x90\xa9\x37\xc8\xd4\x1b\x64\xea\x0d\x32\xf5\x1c\x98\x7a\x0e\x7c\x31\x3d\x07\xa6\xde\x20\x93\x9c\x4e\x72\xfa\xf9\xcb\xe9\xd4\x1b\x64\xea\x0d\xb2\x1b\xaa\xa9\x6a\x67\xaa\xda\x99\xaa\x76\xa6\xaa\x9d\xad\xcf\x54\xb5\x33\x55\xed\x4c\x55\x3b\x5f\x4c\xd5\xce\xd4\x1b\x64\xea\x0d\xf2\x5b\xec\x0d\xd2\x8f\xdc\xdf\x1a\xa4\x4f\x6f\xc7\xab\x25\x2c\x59\xcf\xc7\x99\x6c\xc8\xe1\x71\x0c\xa9\xda\x3a\x58\x51\xa7\xaf\x83\x5b\x49\xf8\xe1\xc7\x47\x90\x7e\x1f\x90\x0e\x33\x0e\xfe\x5f\x00\x00\x00\xff\xff\x13\x3c\xcc\x5f\x55\x8a\x00\x00") + +func clusterApiClusterXK8sIo_machinesYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiClusterXK8sIo_machinesYaml, + "cluster-api/cluster.x-k8s.io_machines.yaml", + ) +} + +func clusterApiClusterXK8sIo_machinesYaml() (*asset, error) { + bytes, err := clusterApiClusterXK8sIo_machinesYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/cluster.x-k8s.io_machines.yaml", size: 35413, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x60, 0x75, 0x9b, 0x29, 0x1e, 0xff, 0xbe, 0x28, 0x1b, 0x40, 0x93, 0x34, 0xf1, 0xfd, 0x4e, 0xcc, 0xb8, 0x12, 0x83, 0x97, 0xe5, 0xaf, 0x8, 0xe8, 0x3c, 0x9d, 0xce, 0x77, 0xa5, 0x33, 0x6a, 0x7c}} + return a, nil +} + +var _clusterApiClusterXK8sIo_machinesetsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7c\xdd\x72\x1b\x37\xb2\xff\xbd\x9f\xa2\x8b\x7b\x61\xbb\x8a\xa4\x64\x6d\xb2\xd9\xbf\xee\xb4\x96\x93\xd2\x7f\x6d\xd9\x65\x69\x73\xea\x54\x9c\x3a\x0b\xce\x34\x49\xac\x30\xc0\x04\xc0\x88\x62\x52\xa9\x3a\xaf\x71\x5e\xef\x3c\xc9\xa9\x6e\x00\xf3\xc1\x6f\xca\xf2\x6e\x52\x3b\xbc\xb1\x35\x83\xc1\x47\x77\xa3\xfb\xd7\x8d\x46\x8b\x52\x7e\x8f\xd6\x49\xa3\xcf\x41\x94\x12\x1f\x3c\x6a\xfa\xcb\x8d\xef\xfe\xec\xc6\xd2\x9c\xdc\xbf\x7a\x76\x27\x75\x7e\x0e\xaf\x2b\xe7\x4d\xf1\x11\x9d\xa9\x6c\x86\x97\x38\x95\x5a\x7a\x69\xf4\xb3\x02\xbd\xc8\x85\x17\xe7\xcf\x00\x84\xd6\xc6\x0b\x7a\xec\xe8\x4f\x80\xcc\x68\x6f\x8d\x52\x68\x47\x33\xd4\xe3\xbb\x6a\x82\x93\x4a\xaa\x1c\x2d\x77\x9e\x86\xbe\x3f\x1d\x7f\x35\x7e\x35\x3a\x1d\x9f\x9d\x9e\x9d\xbe\x3a\x3d\x3d\x3b\x3d\x3d\xfd\xe6\xec\x74\xf4\xf5\x37\x67\x5f\x9f\x0a\x91\xbd\xfa\x66\xfa\xa7\x67\x00\x99\x45\xee\xfc\x56\x16\xe8\xbc\x28\xca\x73\xd0\x95\x52\xcf\x00\xb4\x28\xf0\x1c\x0a\x91\xcd\xa5\x46\x87\xde\x8d\x33\x55\x39\x8f\x76\xfc\x30\x0a\x2b\x79\xe6\x4a\xcc\x68\x52\x33\x6b\xaa\xf2\x1c\xd6\xde\x87\x4e\xd2\xbc\x85\xc7\x99\xb1\x32\xfd\x3d\x4a\xed\x47\xa2\x94\xfc\x24\x50\xe5\x5d\x18\xf1\x06\x3d\x3f\x54\xd2\xf9\xbf\xae\xbc\x78\x2b\x5d\x78\x59\xaa\xca\x0a\xd5\x99\x25\x3f\x77\x73\x63\xfd\x75\x33\xf6\x08\x8a\xf8\x42\xea\x59\xa5\x84\x6d\x7f\xf2\x0c\xc0\x65\xa6\xc4\x73\xe0\x2f\x4a\x91\x61\xfe\x0c\x20\x52\x92\x7b\x18\x81\xc8\x73\xe6\x8d\x50\x1f\xac\xd4\x1e\xed\x6b\xa3\xaa\x42\xd7\xfd\xe7\xe8\x32\x2b\x4b\xcf\xb4\xbf\x35\x5e\x28\xd0\x55\x31\x41\x0b\x66\x0a\xda\xe8\x91\x47\x5b\x48\x2d\x3c\xe6\xf5\xd0\xe0\x85\x9d\x21\x3d\x99\x2c\xc1\xcf\xa5\xeb\x4e\x8a\x7e\xff\x70\x46\x7f\x10\x7e\x7e\x0e\x63\xe7\x85\xaf\xdc\xd8\x62\xa9\x64\x26\x5c\x6c\x10\xb8\xf4\xb1\xfb\xd0\x2f\x69\x35\x34\xcd\x19\xda\x43\x26\x28\xee\x85\x54\x62\xa2\xb0\x99\xdb\x0b\x8b\x22\x5f\xc2\xd4\x58\x10\x1e\x14\x0a\xe7\xa1\x90\xfa\x23\x3d\xbd\xc1\xcc\xe8\xdc\xbd\xdc\x3a\xc9\xba\xbf\x8f\x9b\x66\x7b\x91\xde\x3e\x76\xba\x61\x6a\x87\x90\x71\xbc\x83\x8e\x22\x5f\x6e\x9c\x1e\x2f\x71\xeb\xd4\x42\x9b\xfb\x57\x42\x95\x73\xf1\xc7\x20\x54\xd9\x1c\x0b\x71\x1e\x3f\x31\x25\xea\x8b\x0f\x57\xdf\xff\xf1\xa6\xf3\x18\xba\x4b\x6a\x84\x19\xa4\x03\x3f\x47\x08\xcd\x99\xe0\xf4\x67\x4b\xa4\xe1\xe2\xc3\x55\xdd\x4b\x69\x4d\x89\xd6\xd7\xdb\x28\xfc\x5a\x4a\xa7\xf5\x74\x65\xcc\xe7\x34\xad\xd0\x0a\x72\xd2\x36\x18\x46\x8e\x92\x8e\x79\x5c\x09\x91\x98\xe9\x68\xb1\xb4\xe8\x50\x07\xfd\xc3\x82\xa2\xc1\x4c\xfe\x81\x99\x1f\xc3\x0d\x5a\xfa\x90\xf6\x5a\xa5\x72\x52\x4b\xf7\x68\x3d\x58\xcc\xcc\x4c\xcb\x9f\xeb\xde\x1c\x78\xc3\xc3\x28\xe1\xd1\x79\x26\xa6\xd5\x42\xc1\xbd\x50\x15\x0e\x41\x68\xda\x11\x4b\xb0\x48\xfd\x42\xa5\x5b\x3d\x70\x13\x37\x86\x77\xc6\x22\x48\x3d\x35\xe7\x30\xf7\xbe\x74\xe7\x27\x27\x33\xe9\x93\x42\xcd\x4c\x51\x54\x5a\xfa\xe5\x09\xeb\x46\x39\xa9\xbc\xb1\xee\x24\xc7\x7b\x54\x27\x4e\xce\x46\xc2\x66\x73\xe9\x31\xf3\x95\xc5\x13\x51\xca\x11\x4f\x56\xb3\x52\x1d\x17\xf9\x1f\x6c\x54\xc1\xee\x79\x87\x78\x81\xf9\xce\x5b\xa9\x67\xad\x17\xac\xa6\x76\x50\x99\xb4\x15\x31\x55\xc4\x4f\xc3\x2a\x1a\x62\xd2\x23\xa2\xc7\xc7\x37\x37\xb7\x90\x86\x0e\x04\x0f\xb4\x6d\x9a\xba\x86\xcc\x44\x22\xa9\xa7\x68\x43\xcb\xa9\x35\x05\xf7\x82\x3a\x2f\x8d\xd4\x9e\xff\xc8\x94\x44\xed\xc1\x55\x93\x42\x7a\xe2\xdf\x4f\x15\x3a\x4f\x1c\x18\xc3\x6b\xb6\x24\x30\x41\xa8\xca\x9c\xf4\xd0\x18\xae\x34\xbc\x16\x05\xaa\xd7\xc2\xe1\x17\x27\x32\x51\xd3\x8d\x88\x78\x87\x91\xb9\x6d\x04\x57\x1b\x07\x3a\xb5\x5e\x24\x4b\xb4\x85\x27\xcd\x6e\xbb\x29\x31\xeb\x08\x7f\x8e\x4e\x5a\x12\x56\x2f\x3c\x92\x88\xaf\xd8\x9f\xdd\xfb\x8e\x7e\xd1\x8c\x91\xf1\x58\x7d\xb5\x32\x8d\xd7\x4d\xcb\xb4\xeb\x49\x9d\x84\xfd\x86\xe9\x75\x47\x14\x26\xa8\x8c\x9e\x31\x07\xd7\xfa\x2e\xa4\x7e\x8b\x7a\x46\x5a\xed\xd5\xda\xcb\x2d\x54\x0d\x73\x52\xe8\xf1\x83\x51\x32\x5b\xee\x99\xf1\x65\xab\x69\x87\x6c\x65\x78\x54\x39\xcc\x69\x7f\xcb\x9c\x38\x3d\x5d\x82\x36\x39\xf2\x8e\x0f\x83\xc0\x62\x8e\x1a\x72\xb3\xd0\x2e\x13\x4a\xea\xd9\x18\x2e\x71\x2a\x2a\xc5\x42\x09\x83\x8f\x42\xe7\xa6\x18\x8c\x01\xbe\x17\x4a\xa6\x0d\x0f\xc2\x62\x7a\x37\x84\xc1\x35\x2e\xd0\xf9\xc1\x10\x06\xef\x55\x4e\xff\x5b\x9b\x33\xea\xaa\x58\x5f\xc9\x08\x42\x17\x1b\x5e\x84\x2e\x37\xbc\x08\x23\x1c\x43\xcd\x15\xa3\xb8\x87\xa0\xef\xba\xad\x93\x18\x14\x52\xcb\xa2\x2a\x5a\x36\xce\xc5\x06\x64\x0f\x16\x73\x99\xcd\x41\x80\xc6\x85\x5a\x06\xc8\xd6\xc0\x88\xa4\x80\x27\x18\xec\x62\x97\xc2\xa7\xf0\x22\xb5\x5b\x48\xa5\xa8\x55\x66\xb4\x93\x39\x92\xd0\x37\x76\x5f\x38\x70\xc6\x68\xfa\x57\xb2\x49\xe2\xbe\x5e\xae\x2d\x66\x6a\x6c\x21\x3c\x9b\xc4\x3f\x9e\x6d\x21\x53\xdb\x5c\x36\xbf\x04\x5c\xf6\x10\x28\x99\xe4\x7a\x83\xd4\x14\x49\x3b\x35\x75\x34\x86\x5b\xda\x28\xac\x69\x59\x05\xd2\xd6\x31\x90\x4b\x47\x2a\xb6\x92\x6e\x0e\x13\xf4\x0b\x44\x0d\xf8\x40\x9f\x48\x0f\x3f\xa3\x35\x6c\x71\x2a\x4d\x2a\x43\x4e\x25\xe9\xc1\x36\xc1\x5e\xad\xef\xb3\xc7\xaf\xd9\xa1\xc2\xcc\x1b\xbb\x67\xcd\xcf\x6f\x62\xbb\xb0\x18\x25\x26\xa8\xe0\xa7\x0a\xed\x12\xcc\x3d\xda\x16\xd2\x99\x0b\x9f\xf8\x5d\x08\x9f\xcd\x99\x44\x91\x20\x90\x99\x4a\xfb\x31\xbc\xe5\xcf\xef\x70\xe9\x78\xa5\x71\x4b\xf1\xa7\x45\x45\x28\x8e\x3f\x94\x1a\x8c\xcd\x03\xc9\x82\x50\x04\xaf\xa2\x41\x51\x8d\x22\x1c\xc3\x55\xe7\xdb\x16\x3e\x01\x8f\x45\x49\x96\xfd\xf9\x73\x17\x26\xbe\xd9\x5c\x93\x9b\x62\x35\x7a\x64\x63\x92\x9b\xcc\x91\x1d\xc9\xb0\xf4\xee\x84\xd6\x78\x2f\x71\x71\xb2\x30\xf6\x4e\xea\xd9\x68\x21\xfd\x7c\x14\x14\xa0\x3b\x09\x9d\x9e\xfc\x81\xff\x1d\x25\x8a\xae\xd8\x10\xd8\xa9\xa1\xe9\xc7\x33\x7f\xf3\x40\x86\xd5\x35\xce\xd4\x4e\xb6\xac\x7e\x12\xb9\x23\x9d\x27\x71\x0c\x5c\x4a\xf3\x61\x5b\x2b\x2d\x16\xc1\x6a\xdf\x32\x5b\x9a\x27\xac\xd1\x2e\xae\x2f\x31\x5f\x17\x2f\xfa\x49\x8f\xc5\x96\x29\xad\x4c\xea\x62\xc7\xc0\x11\x75\xa4\x37\xcc\x72\x62\xac\x90\xda\x45\x39\x18\x82\x20\xd1\x08\xb0\x8b\xd0\x5c\x89\x56\xd4\x8d\x2d\x32\x48\x63\x06\xdf\xe1\xb2\x25\x3f\x9b\xa7\xbd\x8f\xe8\xe1\x77\x87\x1b\xcc\xcc\x96\xe5\xd1\xa8\x71\xe7\xab\x24\xc7\x61\x6e\xf4\xa8\x5e\x9a\x28\x4b\x25\x71\xb3\x59\x6c\x7e\x3b\xb4\x76\xf3\x4b\x14\x38\x78\x8a\x35\xc9\x1a\x98\x16\x88\xfa\xdc\x05\x02\x92\xac\xcc\x65\x49\x3b\x8b\xb8\xc1\xd2\x92\x90\x6c\x30\x73\xa9\x8b\x20\x17\x57\x7a\x08\xd7\xc6\xd3\x3f\x6f\x1e\x24\xe1\x35\xa2\xfb\xa5\x41\x77\x6d\x3c\x3f\xf9\xec\x45\x86\xe1\x0f\x5e\x62\xd4\x19\x24\x4e\x1a\x84\xb5\x62\xc9\x26\xa9\x05\x67\xdd\x18\xae\x02\x6a\xa9\xc9\x21\x1d\x01\x4a\x63\xd3\x5a\xd8\xb5\x48\xf6\x9c\xba\x60\x0d\x32\x41\x76\x87\xb1\x28\xfd\x72\x63\x1f\x91\x04\xc6\x76\x28\xb0\xa3\xbb\xd8\x15\x1b\x83\xf0\x26\xb8\x2e\x8a\x1c\x79\xc8\x2b\x9e\x34\x83\x71\xe1\x71\x26\x33\x28\xd0\xce\x10\x4a\xda\xdd\xbb\x08\xbb\x73\x4f\x1e\x41\xfb\xd4\x8c\xe7\xb6\xa5\x55\xdc\xc4\xf9\xb6\xe1\x46\x24\x5f\x5b\xdf\x25\xf2\x6d\x69\xb0\x05\x33\x1f\x3a\x3f\x56\x83\x6c\x54\xb6\x50\xa3\x1d\x1b\xd9\xa7\x0d\xf6\x52\x6c\x5d\x03\x87\xa1\x83\x6e\x2b\x44\x49\x92\xf8\x0b\xa9\x30\x16\x86\x5f\xa1\x14\xd2\xba\x31\x5c\x70\x6c\x47\x61\xe7\x9d\xd4\xd1\x56\x35\xdd\x50\x0f\xd2\x01\xd1\xfb\x5e\x28\x52\x9a\xb4\x4d\x35\xa0\x0a\x2a\xd4\x4c\xd7\xf4\xfe\x10\x16\x73\xe3\x82\x46\x9c\x4a\x54\xec\xdd\x0d\xee\x70\x39\x18\xae\x49\xef\xe0\x4a\x0f\x82\x72\x5d\x93\xd7\x5a\x13\x1b\xad\x96\x30\xe0\x77\x83\xe3\x4d\xc5\x4e\x6e\xee\x78\x99\x0c\xf5\x1e\x2c\x72\x1b\x9b\x25\x2d\x1c\xfd\x10\x56\xc1\xa1\xe1\x24\x1a\x88\x1a\x01\xd0\xab\x1a\x5c\x46\x70\x2a\xa7\x20\xb5\xab\xa6\x53\x99\xb1\x4b\x9a\x40\x1b\xaf\x2e\x47\xf2\x13\x09\x79\xbd\x4f\x0e\xef\x14\x2d\xea\x2c\xb8\x0e\x19\xc7\x45\x6b\xd7\xd8\xb5\xfe\x47\x5f\xfb\x38\x84\x70\xf5\x9a\x36\x98\xa7\x3d\x68\x60\xa3\x73\xb9\x91\x20\xcf\x6f\xbc\xd0\xb9\xb0\x79\x24\x05\x01\x9d\xf4\xf9\x17\x77\x9a\xd3\x40\xeb\x68\x67\xff\x1a\xe9\xb7\x16\x3d\xde\xd8\xe8\x88\xfd\x0b\x87\x6a\xbd\x95\xc8\x53\x33\x8f\x68\x55\x2a\xed\xbc\xad\x78\xe1\x39\xef\xac\x10\x25\xa1\xed\xe9\xbc\xa1\x87\x84\x02\x41\xb4\x23\x24\x84\x60\xc5\x92\xc4\x8c\xac\xea\x64\x09\xf8\x10\x63\x49\xde\x18\xc5\xb2\xc3\xdf\xf2\xfe\xb3\xe8\xad\xc4\x7b\x04\x61\x27\xd2\x5b\x61\x97\x2d\xb6\xdd\xce\x09\xdd\x58\xb2\x45\x3e\x20\xed\xe0\x05\xe9\xbc\xe5\x4e\xb1\x75\xb7\xf7\x34\x15\xf2\x62\x0b\x93\xcb\xe9\x92\x8c\x49\x84\xa6\x6b\xdc\xdf\x8c\x73\x2b\x87\x76\x34\xab\x64\x8e\x27\x2d\x76\x6c\xe6\x28\x1c\xa2\xae\x01\x66\xa8\x49\xe5\xe0\xe6\x98\xc3\x46\x16\x0c\xbe\x6b\x7d\x13\x79\x60\xca\xc0\x76\x5a\xe9\x54\x3e\x0c\x83\x3b\xcf\xf8\x9f\x48\x6c\xef\xd1\x0e\x89\xa8\x69\x38\x10\x50\x69\xf9\x53\x15\xc3\x16\xef\xaf\xdf\xfe\x27\x5c\x7d\xcb\xad\xb9\xd7\xa0\x1c\xe7\xc2\x41\x88\x34\xa1\x26\x11\xbd\x97\x39\x07\x9b\x62\x50\xb1\xd6\xa0\x34\xd8\xb0\x09\x82\x58\xf4\x95\xd5\x21\x9c\xd0\x8a\x65\x25\xc5\x92\xcb\x29\xeb\x08\x56\x45\xba\xf9\xac\x14\xce\x51\xf7\x6c\xfe\x83\x0c\xf1\x27\x42\xb9\xe8\xd8\x14\x13\xa9\x1b\x71\x8a\x0b\x60\xd5\xf4\x10\xb4\x6f\x9a\x63\xfc\x9c\xe6\xcf\x04\xa0\xee\xef\x09\xaf\x85\xf0\xa7\xad\x14\x69\x20\xb7\xb2\xde\x26\x82\x39\x21\xdd\x54\xe9\x4c\xf8\x86\x8a\x8a\x03\x34\x29\xc2\x13\x46\xad\xad\x3d\x2d\xb5\x10\x77\xd8\xd8\x8a\x34\x3d\xa3\x5b\x3c\x18\xc3\x27\xbd\x4e\xbe\xda\x7f\xad\xad\x4d\x62\x53\x1e\x28\x83\x0c\xa4\x86\xad\x8e\x02\x65\xae\xdf\xdf\x46\x62\x83\x80\xaf\x4e\xff\x1f\x8c\x48\x55\x7b\x14\xf9\x90\x7c\x7f\x6e\x83\xd2\xcf\xd1\xa6\x66\x67\xa7\xaf\xe0\x75\xd4\xba\xc6\xc2\xd7\xa7\xa7\x81\x9a\x1f\x51\x38\xa3\x63\x88\xf2\x56\x16\x68\x2a\x0f\x52\xe7\x32\x13\x3e\x80\xae\xb6\xb8\x64\xbc\xaf\x62\x0c\x72\x6a\x2a\x9d\x27\xfb\xec\x65\x81\x20\x94\x32\xde\x63\xde\x58\xcf\x14\xcd\x0c\x1b\x92\xf6\xf3\x12\x5e\x24\x99\x55\x4b\x10\xd3\x10\x2d\x8b\x1d\xc4\x81\xb1\xee\xf6\x23\x7d\x31\xba\xe0\x56\x73\x14\x39\xda\x97\x4c\xca\x0b\x76\x1e\xf2\x60\x87\xe5\x14\xd2\x8e\xa0\xa9\xb5\xa2\x02\x5f\x58\xb5\xcb\x1c\x8b\xd2\x78\xd4\xd9\x72\x3d\xa0\x75\x84\xaa\x55\x3b\x90\x19\xfc\x73\xb4\xfb\xbb\x80\xca\xa2\x7f\xb0\x31\xf2\x90\x09\xcd\xa1\xe7\x18\x2f\x34\x76\x26\xb4\xfc\x39\x68\xdc\x74\x32\xf8\x33\xc2\x0b\x3e\x89\x0b\x7a\x98\x7d\xbd\x97\x2d\x65\x4b\x98\x9f\xe3\x0f\x75\x10\x20\x1c\x06\x31\xb2\xe0\x2d\xda\x9c\x8d\xba\xd8\x87\xbd\x97\xd9\x86\x13\x84\xbd\x9a\x3a\x50\xf5\xb3\x94\xb4\x3e\x5c\x39\x3f\x67\x11\x4c\x0e\x4d\xdc\x34\xb4\xc5\x24\xed\x51\x9d\x8e\x25\xc7\x70\xe5\x1a\xe5\xc1\x46\x29\x9c\xdf\xea\x59\x83\x91\x86\x20\x94\x9f\x9b\x6a\x36\x07\x67\x58\xaf\x26\xf0\x44\x3a\x8a\x76\xd9\x02\x44\xda\x5b\xde\xa4\x43\x82\xb6\x06\x69\x0e\x7b\x44\x49\x18\xc3\x4a\x52\xfe\xbc\x89\x45\xe5\x4d\x21\xbc\xcc\x68\x07\x8e\xeb\xad\x53\x5a\x59\x08\x2b\x69\x3f\x69\x8f\x9a\x94\xe9\xd4\xd8\xfa\x74\x19\x1a\x61\x8f\x2c\x37\x7a\x2a\x67\x55\x1c\x2b\xaf\x8f\xbe\x37\x1e\x53\x1c\xcb\xbb\x18\x8c\x96\x68\xdd\x1f\x98\x76\xfb\xd8\xb8\x53\xd8\x6b\xea\x1f\x6a\x68\xeb\x53\xe4\x4e\xc0\x3c\x3c\x89\x3c\x45\x91\xcd\x03\x3d\xbb\x3c\x1f\xc3\x85\x0e\xfe\x6c\x33\xec\xba\xb7\x42\xdd\x7d\x1a\xe4\x21\x68\xf9\x69\xd0\x34\x1d\xc2\xa4\xf2\x9d\x57\x11\xc4\x67\x42\x1b\x4d\x3c\x5b\x39\xd2\x1b\x93\xaf\x4e\x32\x91\x76\x19\x63\xa2\xb6\x79\x22\xac\x45\x5b\x32\x0f\xd1\x8c\x66\x56\xa3\x96\xd1\x32\x1d\xdb\x14\x4e\x30\xc9\x61\x4a\x9d\x26\x1b\x1e\x3d\xf5\x4f\x1a\xde\xc5\x65\x0b\xb8\xbc\xbe\xf9\xaf\xb7\x17\x7f\x79\xf3\xf6\x49\x58\x5f\xcf\xcf\x7d\x96\x4e\x35\x0b\x8d\xf6\x63\xed\x94\x1c\xc8\xf9\xb7\x31\x32\x98\x96\x9d\x63\x19\xb6\x42\x8a\xa8\xa6\xa3\xd3\xab\x29\x5c\xbc\x7d\x5b\xb7\x8b\xe6\x8a\x03\x8b\x73\x71\x8f\x01\x39\x85\x03\x14\x46\x48\xcd\x71\x50\xa2\xe4\x4c\xd8\x89\x98\x91\x4d\x55\x2a\xba\x52\x09\x20\xc4\x96\x7c\x0c\xae\xc5\x2c\x0c\x2f\x5a\xaa\x91\x11\x81\x66\x9f\x57\x93\x49\xe5\xe1\xa5\x0b\xe3\xf3\x00\xf1\x40\xd1\x84\xe7\xed\x2f\xd9\xec\xb3\x44\xd5\x0f\x23\xd7\x09\x91\xd3\x17\x96\xa4\xf8\x76\x8e\x96\xa5\x2e\xf2\xb3\x20\x36\x32\x6e\x33\x1a\xc3\xbc\x48\x67\x35\x9d\x6c\x8f\xc3\xec\x8d\xc2\x74\x58\xf0\xbe\xc3\xb8\xc6\xe5\x46\xcd\x0a\x91\x24\xc9\x16\x41\xe9\x78\x03\x0a\x3d\x2c\x4d\xd5\x9c\x5e\xd1\x04\x17\xba\x81\xf8\xbc\x1f\x3b\x4f\xea\x0d\x1b\x99\xc6\x20\xb1\xd9\x15\x22\x1d\x2a\x32\xe7\xb5\x1f\x12\x5e\x22\x14\x1a\x53\x5d\xc2\x5e\x1a\x82\xe3\x5d\x6c\x23\xec\x68\x75\xc0\xc4\xdc\x15\x95\x3a\x24\xe0\x0a\x3b\x32\x02\xf6\x10\xf0\xe2\xc3\x55\xca\x07\x48\xa0\x35\x3a\xe7\x3b\x83\x90\x70\x78\x30\x0c\x60\xa2\x4c\x76\xc7\x9c\xe2\xe3\xc5\x63\xa7\x48\x82\x6e\x2b\x1c\xc2\xc5\xf5\x25\xc1\x37\x8e\x52\x50\x6f\x35\x72\x1f\x4c\x8d\xc5\x99\x25\x88\x99\x46\x18\xc0\x54\x6a\xa1\xe4\xcf\xb5\xfc\x37\x9f\x35\x72\x1a\xf7\x5c\x73\xba\x7e\x87\xcb\x51\xd0\x71\xc1\xb1\xac\xb4\x97\x2a\x25\x47\x24\x29\xe3\x3f\x0a\x73\xbf\x7a\x94\x34\x15\xca\xd1\x66\x30\x61\x73\xd4\x1a\x72\x48\xc0\xd8\xa1\x05\x8d\x98\x3b\x18\x84\x51\x07\x50\xa2\x2d\xa4\x6b\x93\x9e\xe7\x37\x04\x43\xb2\xb2\x90\x0e\xe1\xab\xb3\x33\x78\xf1\x37\x5d\x5a\x93\xa1\x73\xec\xb3\xbe\xd1\x5e\xfa\xe5\xcb\x5a\x35\x24\x3f\xea\x30\x76\x4d\x8c\x51\x28\xf4\xce\xb6\xcd\x36\x7d\x1c\x9f\x56\xc8\xc5\xda\xa5\xce\x0a\x39\x4a\x19\x1c\x3b\xf3\xf5\x54\x8d\x3d\x73\x0e\xc9\x1b\xab\x82\xff\x2f\x4b\x8d\xd8\xb6\xf6\x03\x36\xd9\x6e\xf4\xb9\x69\xe9\xd7\xad\x54\x84\xad\x4b\x7f\x4a\xf0\x75\xe4\x8a\x2a\x79\x24\x2f\xff\x76\x75\xf9\xb4\xeb\xa9\xe4\x93\x31\x68\x5f\xc0\x1f\x38\xb0\xdf\x28\xf1\x9d\xcd\x48\x72\x76\x36\x20\x46\xec\x6c\x50\xc9\x5d\x1d\x1c\xe0\xec\xec\x3f\xe4\xd8\xd3\xc9\x7a\x06\x4f\xfa\xad\x44\x63\x83\x83\x9e\xd5\x5e\x4a\x3b\x89\x67\x82\x73\x71\x2f\x8d\x4d\xcf\x63\x88\xfa\x8b\x6f\x60\x9a\xfc\x48\xe8\x7c\x14\x92\x0b\x1f\x1b\xad\x9d\x18\xe3\x9d\xb7\xa2\x3c\x10\x70\xfe\x25\xb5\x0f\x87\x23\x8d\x8a\x65\xac\xae\x0c\x01\xfe\x10\x65\x8d\x29\x24\xa8\x33\x51\xba\x2a\x1c\xf2\xb2\x2d\x0a\x01\xf7\xe8\x8d\x85\x40\x54\x3c\xf7\xff\xdf\xff\xfe\x1f\xd7\xcc\xa8\x24\x15\x5d\x60\x36\x17\x5a\xba\x62\xbb\x86\x3e\x0c\x9e\x84\x01\x3f\xe2\x74\xf7\x86\xee\x26\x4f\xa5\x6f\x36\x2e\xb6\x9e\x68\x8a\xe6\xd9\x51\x0c\xe5\x64\x2b\x11\xe4\xb9\xa1\x55\xaf\x3a\xa0\x5e\x48\x55\x9f\xdb\xb7\x0c\x7b\x1d\x22\xa5\x51\xd8\x77\x26\xdd\xe0\x4e\x9a\x13\x5c\x6f\x62\xd0\x68\xd9\xf0\x63\x7c\x29\xbc\x60\xb0\x6c\xaa\xe0\x59\x93\xa9\x67\x9f\xfa\x60\x3b\x77\x28\xd0\x3b\x06\xea\x3d\x1d\xd8\x3b\x42\x6f\x43\x90\x34\x4e\xbf\x3d\x6e\x7e\xcf\xaf\xa6\x61\x42\x1c\x57\x62\x3e\x97\x12\x33\xec\x64\xa2\xa6\xe0\x65\x7c\x48\xbb\xd2\x26\xd7\x33\x62\x8f\x18\x98\x6a\x32\x55\xc9\x29\x00\x11\x82\xbb\xf0\xff\x6f\xde\x5f\x9f\x7c\x67\xa2\x1f\x23\x32\x42\x56\x21\x1d\xb0\x60\x04\xef\xaa\x6c\x4e\xc0\x3e\x2a\x99\x1b\x7a\x33\x2e\x84\x96\x53\x74\x7e\x1c\x7b\x43\xeb\x7e\x38\xfb\x71\x0c\xdf\x1a\x0b\xf8\x20\x8a\x52\xe1\xb0\x06\xa7\x2b\x87\x5c\xec\x95\x9b\x28\x0a\xfc\x6d\x13\xeb\x29\x4d\xf2\xf8\x16\x3c\x59\x2f\xee\x38\x1a\x2c\xa2\xab\xad\xe4\x1d\x9e\xc3\x80\x24\xae\x35\xf4\x2f\xa4\xe0\x7f\x1d\xc0\x8b\x05\x3b\x15\x03\xfa\x73\x10\x06\xac\x81\x56\x3b\xd3\xb0\x19\x38\xa4\x56\x58\x39\x9b\x71\x42\x18\x67\x94\x92\x66\x7b\x49\x8e\x8b\x9c\x92\x73\xd2\x34\xd6\x31\xda\xd3\x84\x9e\x57\x27\xf2\xc3\xd9\x8f\x03\x78\xd1\x5d\x17\x48\x9d\xe3\x03\x9c\xd5\x8e\x66\x69\xf2\x97\x31\x60\xef\x96\xda\x8b\x07\xea\x33\x9b\x1b\x87\x3a\xc4\x64\xbd\x09\x7e\x30\xc7\xaf\x16\xa8\xd4\x28\x44\x52\x72\x58\x84\x4c\x84\x44\xca\x10\x64\x2e\x85\xf5\x2b\xc9\xc9\xb7\xef\x2f\xdf\x9f\x87\xd1\x88\x6d\x33\x9d\xe2\xbb\xec\x05\xc4\x08\x73\x27\x9a\x5e\xc5\x73\x4e\x03\xa4\xe3\x66\xb5\x83\x37\xad\x48\xe9\x8f\xf7\x99\xfd\xa3\xf6\xc3\x21\xb0\xf4\xf7\x06\x4c\x8f\x22\xc0\x21\xe0\xf4\x51\xf0\xf4\xf3\x52\xcd\x18\xaf\x9e\x1c\x06\x5b\x8f\x5e\xef\x9e\x18\xe2\xf6\x45\x87\xc0\xc0\x3f\x61\xe5\x1c\x37\x3b\x79\xd2\x85\x27\xd3\xfb\x38\xfb\x54\x83\xbd\xd5\x7e\x68\x9b\x06\x44\xb3\xee\x8a\x17\x22\x0f\xaa\x57\xe8\xe5\x17\xdf\x20\x44\xde\xca\xd2\xd8\xcb\x51\x34\xec\x8c\x03\x39\xc7\xd6\xf1\xe1\xce\x93\xd2\xf3\x00\x1f\xe8\x31\x5e\xd0\x93\x6c\x9b\x43\xbc\xa3\x23\x16\x7b\x90\xd3\x01\xb0\x3d\x8b\x63\x23\x39\x06\x8c\xcc\xea\xb8\x20\x51\xa5\x81\x8e\xd4\x57\x63\xef\x33\x65\xaa\x7c\x24\xb5\xf4\x09\x1f\x42\xe8\x28\xe4\xbe\x69\xa9\x86\x6d\xbc\xdc\x9c\x53\x16\x84\x2e\xa2\xf9\xf8\x80\x3a\x67\xec\xc1\xa8\x01\x3e\x69\xb8\xc4\xd2\x22\x9f\x53\x9e\x07\x1b\xd8\x9c\x9a\xc7\xb8\x6f\x7a\x4f\x7d\xa4\x8b\x46\x6c\xb2\x9a\x10\x0f\x47\x9b\x80\x11\x43\x30\x50\x09\xc7\x8d\xe1\x66\x21\x39\x47\xd7\x00\x2d\xf5\x06\x33\x8b\x7c\x15\x6e\xbc\x3d\x22\x7e\x04\x5f\xf2\x4e\x9f\x47\x10\xbe\x3b\x99\x4d\xd7\x1f\x1c\xbf\x8d\x39\xce\xde\x58\xdc\xc4\x9e\xc8\x82\x47\x73\xe0\xf3\x69\x70\x80\x5c\xee\xbc\x11\xb2\x91\x3a\x4f\x7c\x33\x24\xfd\x76\xde\x10\x39\x62\xd5\x53\x21\x55\x65\xf1\xd2\x10\x61\x0f\x5c\xd2\xb7\xed\x6f\xd2\xa2\x62\x47\x90\x87\xa7\xed\x34\xb2\xb5\x0c\x32\x3d\x0e\xc7\x44\xe1\xcc\x57\x84\xd4\xe0\xf0\x4d\xa7\x6f\xd7\x4e\x1a\x8a\x89\x13\x91\x03\x09\x0f\x7e\xce\xda\xa5\x9e\x5a\x51\xe7\x2a\xed\xf4\x59\xbb\xe1\xcf\xd5\xef\x92\xdf\x1a\x0f\xd7\x56\x1c\xd8\x95\xa4\x37\x30\x9c\xee\x12\x0e\x6f\xf4\xca\x24\x6a\x1f\xf7\x73\xfd\xf0\x43\x3d\xc7\xa7\xf1\x1a\x0f\x54\x31\x07\x7a\x8b\xbd\xa7\xd8\x7b\x8a\xbf\x3f\x4f\xf1\xc0\x3d\xb0\xdf\x43\xfc\x3d\x79\x87\x07\x2e\x7a\xbf\x57\xf8\x1b\xf6\x08\x8f\x58\xe3\x01\x9e\xe0\x6f\xdc\x0b\x3c\xf8\x90\xe3\x08\xef\xef\xdf\xcd\xf3\x3b\x90\x86\x7b\x3d\xbe\xdf\xac\xb7\xf7\x54\x68\x5a\x9b\x1c\x2f\xad\x90\x3a\x66\x98\x1e\x9c\x53\xb7\xf2\x5d\xc2\xa0\x9e\xab\x49\x88\xc2\x54\xe1\xba\x07\x27\x8f\xd6\x57\xcc\x5a\x89\x2d\x8c\x48\x5d\x89\x9a\x61\x65\x4e\x5d\x05\x33\x42\x33\x0a\x67\x05\x31\xd3\x2a\x9a\x5c\xe9\xe0\x74\x08\x05\x0a\x1d\xee\xf8\xc7\x2e\xa9\x79\x4a\x80\xe4\x5e\x62\x36\x32\xcd\x49\xe8\x65\x98\x80\x92\x85\x8c\xa9\xe1\x63\xb8\x7e\x7f\xfb\xe6\x1c\x36\x2d\xa0\x49\x83\xe6\x1c\x85\xbf\x13\x1f\x33\xaf\x42\xbf\x30\x1a\xf9\xd0\xf4\xef\x9f\x95\xf2\x96\xe0\xe5\xd5\xe5\x81\xb4\xfe\x50\x7f\x90\x88\x9c\x8e\x4d\xe3\x39\x5d\x23\x95\x09\xee\xd7\x49\xd7\x31\x51\xba\x86\xb4\x6d\xa7\x78\xe5\xce\x69\x6a\x43\xdd\x09\x07\x0e\x19\x06\x34\x34\x8e\xf0\x29\x33\xd6\xa2\x2b\x4d\xf0\xfb\x52\x1a\x53\x7d\x16\x78\xdb\x31\xe7\x35\x1e\x9f\x2c\x61\x2e\x67\x73\xb4\xa0\x48\x09\xf0\x35\xe9\xaa\xc0\x90\x64\xda\x2a\x55\x33\x86\x37\x01\xb5\x41\xe5\x88\xad\x8e\xf9\x9e\x1c\x0e\x51\x79\xe3\x32\xa1\x12\xa2\x69\x7d\x48\x53\x6e\x56\xf9\x5a\xa1\xd0\xa3\xaa\x04\x65\x66\x32\x4b\x18\xa2\xf5\x79\x66\x8a\x52\x58\x74\xad\xdb\xbf\xa6\xb9\x5e\x3f\x65\x83\x5f\xf9\xe6\xad\xf0\x0d\x7d\x82\x86\x6c\x12\xae\x67\x48\xa0\x72\x46\x7a\xc9\x86\x9b\x33\x7f\xad\xf7\x7f\xe8\x73\x0c\xff\xb1\x61\xba\x22\x64\x84\xca\x8c\x86\x1a\x99\xe9\xc8\x5b\x6c\xb1\x81\x8b\xc3\xd4\x33\x1e\xae\x00\xa5\x36\x65\x5b\xeb\x0a\x49\x85\x9c\xba\x92\xd0\x9b\x68\xba\x24\xbd\x93\x44\x25\xdd\xb4\x4d\x4b\x1c\xc3\x85\xe6\x54\x98\xfa\x4d\x20\x87\x74\x7c\x85\x43\x76\x12\x77\xfe\xec\xc8\xbb\x89\x79\xef\x31\xa3\x5c\x33\x92\x26\xb2\x4a\x67\x18\xe8\xe5\x46\x63\x87\x9c\x95\x6e\xd1\xa9\xa1\xad\xce\x39\x33\xb2\x10\xf6\x2e\xa6\xb6\x86\xa4\x9d\x8e\x34\x25\x0f\x36\x5e\x4e\x61\x7e\x66\xbe\x8a\x17\x3d\x43\xd6\x2b\x89\xd4\xba\xac\xd1\x5e\x21\x5f\x8d\x41\x7b\x87\x58\xed\xbb\x55\x7c\xc5\x7d\x2a\x18\xcb\x6e\x12\xae\xc4\xab\xfd\xde\xe1\x01\x3a\xe0\x7e\x9f\xcd\xee\x28\x80\x4d\x65\x65\xd2\xa1\x7c\x4b\xd4\xea\x20\x55\x77\x0f\x92\xc6\xf4\x51\x30\x5a\xf9\xfd\xe9\x36\xca\xfa\xd9\xee\xd6\xeb\xc8\x07\x2c\x6d\x77\xe6\xc5\xa8\x19\x6d\xcb\xfb\x56\x70\x67\x4b\x8b\xb5\x88\xc1\xf1\xf9\x10\x5b\x5f\x6e\x9e\xfd\xf6\x59\x8d\xea\x64\xf9\x67\x07\xf4\x1f\xd2\x17\x0e\x2b\xa4\xc2\x4d\x3b\x0c\x37\x93\x78\x5d\xea\xf1\xb5\x54\xd6\x0a\x47\xed\xbb\xad\xd8\xa9\x10\xd1\x94\xb3\xa8\xaf\x1b\x1e\x52\xc6\x2a\x66\x2c\x77\x4b\x1e\xac\x8d\xfb\xf8\x2a\x10\x31\xe8\xf5\x0e\x9d\x13\xb3\x0d\xc0\x7f\x87\xc8\xc6\x4f\xc3\x45\x9b\x3d\xb4\x18\x5c\xe9\xc6\x2b\xaf\xd1\x47\xc8\x31\x15\x10\xeb\x8f\x29\x22\xfe\x44\x61\xc1\x85\x9a\x74\x26\x55\x2a\x47\x94\x48\x36\x84\x89\xf1\xf3\x14\x62\x8b\x57\x7c\x48\x7b\x7d\xdb\x59\x46\x5b\xdb\x8d\x57\x5a\xa7\x57\xa5\x29\x39\xd7\xa4\xbe\x7c\xe5\xaa\x2c\x93\x3a\x4b\x78\xc9\x55\xd2\x33\xbb\x88\x01\x09\x18\xb0\x96\x2b\x2d\x06\x30\x34\x24\x5b\xa6\x70\xe3\xe0\x4d\x78\x86\xf3\x8b\xef\xd1\x4e\x8c\xc3\x3a\x86\xd3\xee\x5c\x99\x19\x27\x19\xd2\x3a\xe6\x55\x21\x74\xd4\xc5\x65\xc8\x82\xff\xa4\x49\x92\x1c\xa6\x9c\x98\x18\xff\x89\x59\xa1\xa4\xcf\x59\x44\xac\xd0\x4e\x7a\x79\x8f\x80\xd6\x72\xee\x07\x11\x59\x74\x92\xa1\x45\x96\xae\xbc\x90\xc1\xc0\x87\x92\xd3\xb3\xa3\x72\x9b\xca\x07\x32\xbf\xed\x3b\x14\xa1\xc2\x07\x43\xc0\x17\xac\xfd\xe3\x9d\x15\xb2\x46\x62\x86\xee\x65\x48\xea\x4f\xa1\xab\x74\xc9\x29\x86\xc9\x4d\x81\x7e\x4e\x0b\x23\x75\x5a\xe9\x5c\x14\xa8\x3d\x77\xbb\xb0\x26\x99\x89\x56\x88\x3c\xdd\xee\x7d\x1e\x42\x33\x10\x8b\x8d\x75\xb3\x61\x56\x90\x5a\x3b\xff\x3b\x18\x52\xbe\x87\xa9\x2b\xa1\x02\xb3\xa2\x5b\xd4\xb6\xf9\x35\x48\x62\xf4\x54\xcb\x5e\x24\xdb\x22\xdd\xb0\x94\x3a\x04\xd6\xc2\x25\xbd\x78\x3f\x94\x8b\xdf\x78\x2f\xf5\xac\x4e\x8d\xa7\xb9\x0e\x3b\xf7\x89\x04\x27\xe3\xba\xaa\x2c\x8d\x6d\x5d\xb7\xdb\x34\xe7\xb8\xc6\x00\x09\x9d\x6c\x55\xb9\x6b\x33\x4e\x7a\x87\x6a\x0a\x13\xe4\x5c\x54\x2b\x13\x7b\x0a\xe9\xea\xf4\xa8\x3c\x5c\x1f\x23\xc8\xce\xa2\x40\xfb\xac\x2d\x09\x26\xcb\x2a\x9b\x2a\x0e\x84\x31\xe3\x1e\xab\x09\xfb\x2e\x41\x8a\xe8\x0f\x88\x3c\x0f\x80\x8c\x77\x6d\x1d\x82\x6b\x95\x87\x8b\xa0\x56\xe8\xfc\x24\x0a\x72\x73\xc3\xad\x99\xff\x73\x47\x02\x53\x56\x7e\xc3\x31\xcf\x2e\xfd\x52\x29\xb5\xe4\x9b\xf1\x98\x3f\x4a\xe5\xd6\x8a\x36\xe4\x56\x11\x9a\x53\xe9\xa2\xbd\xcf\xe6\x89\x10\xf1\xd9\x8a\x64\xa5\xeb\xdb\xe9\xf9\x97\x51\xbf\xc9\x2c\x7d\x57\x5f\x6e\xda\xb3\xc2\xf7\x6b\x1f\x90\x2f\xad\xf8\xae\xc6\xfa\x2d\x29\x5e\x90\x71\x5c\xf9\x0e\xb5\xa7\x1d\x9d\xec\xe0\x81\xeb\xf9\xd3\x57\x47\xad\xa7\x53\xb9\xf0\x48\x66\x91\x2d\xac\x59\xb6\xc9\xec\xc1\x45\xa3\x88\x5d\xbb\x54\x54\xf8\x76\x91\x32\xe7\xd9\xdf\xaa\xcf\x2c\xd3\x99\x8d\x08\x95\xef\x06\x6c\x5e\x07\x4f\xc9\xc4\x47\x56\x8f\xda\xc2\x98\x75\xf9\xfd\x57\x57\x7d\xaa\xef\x92\x88\x76\xf1\x9b\xba\xde\x4d\x30\x01\xa1\x55\x30\x6f\x61\x7a\x7c\x3a\x70\x6f\x24\x69\x04\x6f\x0d\xe9\x49\x96\xcb\xc9\x32\xde\xf0\x8b\x39\x8d\xf1\xa3\xc6\x93\x68\x06\x8c\x1d\xc5\x71\xf9\x2e\xfc\xa8\x14\x56\x14\x31\xe4\xde\x0a\x1f\x81\x98\x90\x8f\xd4\x9d\x9b\x3b\xea\x46\xe5\xfe\x32\x4e\x5b\xb5\xd5\x46\xcc\xba\xf6\x30\x70\xf8\x9c\xaf\x1e\x84\x07\xde\x58\x82\x5d\xe1\x3a\x46\x78\x54\x4d\xea\x5b\x91\x89\x49\xec\x70\x35\x1c\xe3\x69\x26\x06\x75\x2b\x87\xae\x01\x6a\xa2\x7a\x12\xbc\xd4\xb4\xc4\x6c\xb5\x54\x6b\x82\xd7\xab\x4d\x37\xd6\x75\x8d\x48\x1c\x7e\xf9\xb5\x2f\x3f\xdb\x97\x9f\xdd\x52\x7e\x36\xd8\x8d\xbe\xfc\x6c\x5f\x7e\xb6\x2f\x3f\xdb\x97\x9f\xed\xcb\xcf\xf6\xe5\x67\xfb\xf2\xb3\x7d\xf9\xd9\xe6\xd7\x97\x9f\xed\xcb\xcf\xf6\xe5\x67\xfb\xf2\xb3\x7d\xf9\xd9\xbe\xfc\x6c\x5f\x7e\x16\xfa\xf2\xb3\x7d\xf9\xd9\xbe\xfc\x6c\x5f\x7e\xb6\x2f\x3f\xdb\x97\x9f\xed\xcb\xcf\xf6\xe5\x67\xfb\xf2\xb3\x7d\xf9\xd9\xbe\xfc\x6c\x5f\x7e\xb6\x2f\x3f\xdb\x97\x9f\xed\xcb\xcf\xf6\xe5\x67\x37\xfd\xfa\xf2\xb3\xdd\x5f\x5f\x7e\xb6\x2f\x3f\xdb\x97\x9f\xed\xcb\xcf\xf6\xe5\x67\xf7\x2e\xa8\x2f\x3f\x9b\x1a\xf4\xe5\x67\xfb\xf2\xb3\x7d\xf9\xd9\xbe\xfc\x6c\x5f\x7e\xb6\x2f\x2a\xd4\x17\x15\xea\xcb\xcf\xf6\xe5\x67\xfb\xf2\xb3\x7d\xf9\xd9\xdf\x42\x11\xa2\x23\xe9\xd9\x97\x9f\x5d\x5b\xec\xbf\x45\xf9\xd9\xaf\xfa\xf2\xb3\x7d\xf9\xd9\xbe\xfc\x6c\x5f\x7e\xb6\x2f\x3f\xbb\x71\x4e\xbd\xa7\xd8\x7b\x8a\xbf\x0b\x4f\xb1\x2f\x3f\xbb\xbd\x59\x5f\x7e\x76\xc7\x42\x7f\x53\x5e\x60\x5f\x7e\xb6\x2f\x3f\xdb\x97\x9f\xed\xcb\xcf\xf6\xe5\x67\xfb\xf2\xb3\x7d\xf9\xd9\xbe\xfc\x6c\x5f\x7e\xb6\xdd\xa2\x2f\x3f\xdb\x97\x9f\xed\x7c\xd9\x97\x9f\xed\xcb\xcf\xf6\xe5\x67\xfb\xf2\xb3\x7d\xf9\xd9\xbe\xfc\xec\x86\xf5\xf4\xe5\x67\x0f\x59\x74\x5f\x7e\xb6\x2f\x3f\xfb\x59\xe5\x67\x9b\x27\xbf\xab\xea\xb3\x0d\x26\x17\x59\x86\xa5\xc7\x9c\xc3\xc1\x61\xae\x7c\x4e\x00\x83\xa0\xf3\x4b\x55\x59\xa1\xe2\x9f\x04\x6d\x65\x28\xfc\x00\x3f\xfc\xf8\x0c\xe2\x01\x69\x74\xd4\xc2\xc3\xff\x0b\x00\x00\xff\xff\xb4\x23\x0d\xc7\x2a\xaf\x00\x00") + +func clusterApiClusterXK8sIo_machinesetsYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiClusterXK8sIo_machinesetsYaml, + "cluster-api/cluster.x-k8s.io_machinesets.yaml", + ) +} + +func clusterApiClusterXK8sIo_machinesetsYaml() (*asset, error) { + bytes, err := clusterApiClusterXK8sIo_machinesetsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/cluster.x-k8s.io_machinesets.yaml", size: 44842, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0xc7, 0x3d, 0x25, 0x5f, 0x15, 0x98, 0x9, 0x35, 0x9e, 0xdb, 0x2d, 0x1, 0x63, 0x2e, 0xbf, 0x34, 0x29, 0xec, 0x68, 0x38, 0x7b, 0xea, 0x72, 0xa, 0xf0, 0x8d, 0x40, 0x11, 0x97, 0xb9, 0xf3}} + return a, nil +} + +var _clusterApiInfrastructureClusterXK8sIo_awsclustersYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xdd\x72\xdc\x36\xd2\xe8\xbd\x9f\xa2\x6b\xcf\x85\xed\xaf\x34\x54\x6c\xe7\xec\xc9\xaa\xea\xd4\x96\x2c\x39\x9b\xa9\xc4\xb6\xca\x52\x9c\xaa\xec\xee\x05\x86\xec\x99\xc1\x8a\x04\xb8\x00\x28\x79\x9c\xca\xbb\x7f\x85\x06\xc0\xbf\x21\x39\x18\x8d\xbd\x71\xb2\x33\xb9\x88\x45\x02\x60\xa3\xd1\x7f\x68\x74\x37\x58\xc9\xdf\xa3\xd2\x5c\x8a\x33\x60\x25\xc7\x0f\x06\x85\xfd\x4b\x27\xb7\xdf\xe8\x84\xcb\xd3\xbb\x67\x8f\x6e\xb9\xc8\xce\xe0\xa2\xd2\x46\x16\xef\x50\xcb\x4a\xa5\x78\x89\x4b\x2e\xb8\xe1\x52\x3c\x2a\xd0\xb0\x8c\x19\x76\xf6\x08\x20\x67\x0b\xcc\xb5\xfd\x17\x40\x9a\x57\xda\xa0\x4a\x3e\xcc\xea\xa1\x58\x5e\xae\xd9\xd7\x67\xe0\xff\xf5\xe2\x11\x00\x13\x42\x1a\x66\x07\x0a\xdd\xa4\x30\x4a\xe6\x39\xaa\xd9\x0a\x45\x72\x5b\x2d\x70\x51\xf1\x3c\x43\x45\x63\x04\x60\xef\xbe\x4a\x9e\x27\x7f\x79\x04\x90\x2a\xa4\xee\x37\xbc\x40\x6d\x58\x51\x9e\x81\xa8\xf2\xfc\x11\x80\x60\x05\x9e\x01\xbb\xd7\x1e\x12\x9d\x70\xb1\x54\x4c\x1b\x55\xa5\xa6\x52\x98\xf4\x21\x7c\xa4\x4b\x4c\x2d\x14\x2b\x25\xab\xf2\x0c\x76\x35\x77\x9f\x08\x70\x33\x83\x2b\xa9\x78\xf8\x7b\x16\x10\x30\x63\x25\xa7\x27\x0e\x8f\xe7\x3f\x5d\x5f\xb8\x17\xf4\x30\xe7\xda\x7c\xdf\x7b\xf1\x03\xd7\x86\x5e\x96\x79\xa5\x58\xde\x99\x03\x3d\xd7\x5c\xac\xaa\x9c\xa9\xf6\x9b\x47\x00\x3a\x95\x25\x9e\xc1\x1b\x0b\x54\xc9\x52\xcc\x1e\x01\x78\x84\x11\x50\x33\x8f\x12\x8f\xfe\xe7\x6e\xac\x74\x8d\x05\x73\x30\x03\xc8\x12\xc5\xf9\xd5\xfc\xfd\x8b\xeb\xce\x63\x80\x0c\x75\xaa\x78\x69\x08\xf9\x0d\xa8\xc0\x35\x98\x35\x82\x6b\x0e\x4b\xa9\xe8\xcf\x16\xc0\x70\x7e\x35\xaf\x47\x29\x95\x2c\x51\x99\x1a\x49\xee\xd7\x22\xc2\xd6\xd3\xde\x37\x1f\x5b\xb0\x5c\x2b\xc8\x2c\xf5\xa1\xfb\xb2\x9f\x20\x66\x7e\x26\x20\x97\x60\xd6\x5c\x83\xc2\x52\xa1\x46\xe1\xa8\xcb\x3e\x66\x02\xe4\xe2\x5f\x98\x9a\x04\xae\x51\xd9\x8e\xa0\xd7\xb2\xca\x33\x4b\x74\x77\xa8\x0c\x28\x4c\xe5\x4a\xf0\x8f\xf5\x68\x1a\x8c\xa4\xcf\xe4\xcc\xa0\x36\xc0\x85\x41\x25\x58\x0e\x77\x2c\xaf\xf0\x04\x98\xc8\xa0\x60\x1b\x50\x68\xc7\x85\x4a\xb4\x46\xa0\x26\x3a\x81\xd7\x52\xa1\xa5\x25\x79\x06\x6b\x63\x4a\x7d\x76\x7a\xba\xe2\x26\x30\x58\x2a\x8b\xa2\x12\xdc\x6c\x4e\x89\xf2\xf9\xa2\x32\x52\xe9\xd3\x0c\xef\x30\x3f\xd5\x7c\x35\x63\x2a\x5d\x73\x83\x44\x83\xa7\xac\xe4\x33\x02\x56\x10\xcb\x24\x45\xf6\x7f\x94\x67\x49\xfd\xb8\x83\x3c\xb3\xb1\xb4\xa0\x8d\xe2\x62\xd5\x7a\x41\x44\x38\x81\x65\x4b\x8b\x76\x51\x99\xef\xea\x66\xd1\x20\xd3\x3e\xb2\xf8\x78\xf7\xea\xfa\x06\xc2\xa7\x1d\xc2\x1d\x6e\x9b\xa6\xba\x41\xb3\x45\x11\x17\x4b\x54\xae\xe5\x52\xc9\x82\x46\x41\x91\x95\x92\x0b\x43\x7f\xa4\x39\x47\x61\x40\x57\x8b\x82\x1b\xbb\x7e\xff\xae\x50\x1b\xbb\x02\x09\x5c\x90\x9c\x80\x05\x42\x55\x66\xcc\x60\x96\xc0\x5c\xc0\x05\x2b\x30\xbf\x60\x1a\x3f\x3b\x92\x2d\x36\xf5\xcc\x22\x2f\x0e\xcd\x6d\xa1\xd8\x6f\xec\xf0\xd4\x7a\x11\xc4\xce\xc8\x9a\x34\xdc\x76\x5d\x62\xda\x21\xfe\x0c\x35\x57\x96\x58\x0d\x33\x68\x49\xbc\x27\x5d\xa6\xf9\x8e\x78\x2f\xcb\x48\x8c\xb3\xfc\x86\xad\xb6\xde\xb6\xdf\x5f\x8d\x8e\x31\x81\x87\xa1\xe9\x74\xbe\x48\xb4\x26\x40\x96\xee\x11\x68\x34\xc4\xc1\xf6\x95\x91\xf6\xf3\xf6\x7f\xe7\x3f\x5d\xd7\xc4\x66\xa9\x49\xb0\x15\x66\xb0\xd8\x10\x12\xec\xcb\x52\xc9\x3b\x9e\xa1\x3a\x01\x2e\x6a\x98\x03\xef\x4a\x8b\x2e\x96\x65\xae\x4b\x86\x4b\x56\xe5\x26\xd9\x82\x72\x64\x75\xa0\x51\x4a\x57\x39\x13\xf8\x83\x64\xd9\x4b\x96\x33\x91\xa2\xda\xc6\x44\x67\xaa\x17\x23\xdd\xec\xa4\xeb\x19\xa7\x52\x2c\xf9\xaa\x52\x4e\x4c\x59\x09\x9a\x92\xaa\xe5\x1f\x2d\xaf\xf9\x2f\x43\x69\xc7\x80\x05\xae\xd9\x1d\x97\x6a\xeb\xb3\xe3\x0b\x0c\x41\xc6\xe3\xd0\x9b\x1e\xc0\x24\xc6\xd1\x2e\x82\xa3\x2f\xd7\xd1\x89\x54\x84\x5c\xb2\x0c\x16\x61\x0e\x4f\x3c\x22\x69\x9d\xe6\x24\x17\xd1\xcc\x96\x2c\xe5\x62\xf5\x74\xf0\x53\x93\x34\x32\x81\xfd\x8c\x6b\xb6\xc8\xf1\x25\xd3\x16\xca\xef\xa4\x36\x3b\xf0\x7e\xb9\xd5\xa1\x4f\x66\x3d\xa4\x73\xcc\x89\xce\x4a\x85\x96\xeb\x9d\x38\xf2\x86\x05\x69\x0e\x58\xb8\xb1\x60\x4d\x83\x09\x6d\x2c\x12\xc6\x68\x68\x21\x65\x8e\x4c\xf4\xde\x0a\x34\xf7\x52\xdd\x5e\x6f\x71\xfb\x16\xfc\x6f\x9a\x96\x80\x22\x65\xa5\xae\x48\xff\x00\xcb\x73\x2b\x41\xc5\xca\x8a\x47\xfb\xa8\xe6\x0e\x3f\xf8\x36\x44\x3b\x28\xa3\x5a\x08\x34\x83\xaf\xfa\xa4\xe1\x5a\x76\x31\xb7\xfd\x39\xfb\xe3\x06\x8b\x91\x21\x07\x07\xa5\x79\x86\x71\x91\x16\xca\x4e\xc9\xbd\x1c\xfe\xc4\xae\x79\xb9\x1f\xbb\x63\x3c\x67\x0b\x9e\x73\xb3\xf9\x59\x8a\x11\x0e\x18\x80\xeb\xbc\xd7\xb1\x23\x74\xdb\xa3\xc2\x47\xfb\xd6\x48\xa8\x34\x7a\xeb\x87\x6b\x8f\x55\x2b\x8a\x9c\x5e\x23\x81\xfc\xd8\xae\xd9\x6a\x14\x69\xee\x37\xc9\x22\xe1\x97\xf2\x4c\xbd\xcc\x65\x7a\x1b\x3d\x9f\x8b\xd0\x23\xd8\x6b\x17\xf3\xcb\x77\xb0\xa0\x27\x46\x92\x5a\xd5\x98\xc1\xfd\x1a\x1d\xc8\x41\x9c\x3a\x26\xb0\x4b\x52\x0b\xdd\xf7\x57\x17\x07\x4f\x80\x67\xd1\x90\xcf\x2f\x6b\xdc\x33\xa8\x04\xff\x77\x85\xc0\x33\xab\x99\x97\xdc\x9a\x13\x12\x14\x2e\x51\xa1\x08\x56\x48\x50\x13\x87\x03\xa9\xaf\xaa\x45\xce\x07\x78\x75\x0c\x54\xdf\xa1\x43\x2c\x9e\x14\x98\x05\xbf\x74\xaf\xdd\xa3\x04\xce\x6b\x3a\xd1\xe1\x15\x2d\x00\x77\xd2\x4a\x6b\x99\x72\x62\xf1\x7b\x6e\xd6\xc0\x40\xc9\xca\x20\x18\x2b\xd9\xc0\xac\x99\x81\x35\x8d\xea\x1f\x4b\xcb\x36\xdc\x8b\x61\x58\x31\x83\xf7\x6c\xb3\x1b\x09\xc3\xa2\xaa\xf9\x09\x66\xfe\xe6\xc6\x9a\xc7\x2f\xda\x9b\xa6\xd3\x65\xa0\xb8\x37\xe7\x37\x01\x2a\xe0\xd9\xd6\xf4\x1a\x5c\x25\x30\x5f\x09\x69\xad\x9a\x4a\xe4\xa8\x3b\x68\xe4\x5b\xca\xbf\xa3\xf8\xef\xd7\x3c\x5d\x43\xca\xb4\xa7\x05\xcb\x8a\xd6\x9e\xf0\x44\xdd\x46\xbf\x45\xb5\xc2\x2d\xc8\x14\x6a\x9e\x59\xa3\x7d\x6e\x3c\xe0\xc2\xb1\x86\x91\x90\xa1\x41\x55\x70\x81\x0e\xe5\x9a\xf8\xbd\x54\xfc\xce\xda\x5e\x5e\x90\x06\x9e\xd7\xac\x40\x38\xff\xd9\xae\xfb\xd6\xa7\x0f\xa6\x4c\xfa\xfc\x8d\xa5\x83\x3d\xd6\xe4\x5d\xd3\xa9\x5e\x13\x3b\x10\x19\xf4\x44\x53\xd3\xab\x72\x28\xd0\x66\xd0\xbc\x6c\x7e\xb1\x86\xe6\x9e\x9f\xed\x61\xa1\x36\x39\x21\x95\x79\x8e\x69\x50\xf0\x64\x6f\xba\x96\x8b\xb0\xc5\x89\x97\x24\x83\x56\x4b\x74\x13\xd7\x80\x29\xc5\x36\x03\xef\xef\xca\x11\x09\xd4\x99\xd7\xfb\xab\x8b\x18\xcd\xbc\x5b\x69\x46\xe8\x96\xcf\xa9\x59\xe0\xb2\x65\x54\x3e\xfb\x2a\xa1\xff\x4e\x9f\xfd\x79\x7c\x0d\x22\xa8\x60\x4a\xdd\xf4\x95\x8d\x9f\xc5\x5d\x99\xce\x78\x16\x0c\x5f\x8b\x5d\x12\x28\x35\xf4\xde\x6f\x60\xb5\xbe\x91\x7e\x2e\xcd\x0e\xe5\x30\x68\xbd\x0c\x8f\x10\xbb\x5d\xe0\x7b\xfd\xea\xb9\x34\xf3\xe8\xab\x87\x41\x7e\x9f\x54\xf0\x11\xf0\x4f\x33\xfa\xbe\x6c\x1e\xc5\xe4\x9f\x91\xc5\x23\xb9\x77\xa4\xc1\xc4\x4b\x67\x0b\xee\xd8\x08\xdc\xf8\xed\xed\x3b\x6a\xdc\xb6\x26\x21\xe7\x77\x68\xd5\xcd\xd8\x1e\x64\x10\x65\x5a\xaf\xbf\xc7\xcd\x1b\x36\xb4\x19\xec\x1a\xe6\xd7\xdf\xf9\x86\x81\x8a\x04\x6b\x36\x82\x5a\xaf\xe1\x16\x37\x64\x74\x18\xc3\xd2\x75\xd8\x69\xb7\x77\x49\x7b\x00\x36\xe6\x17\x31\xcc\x54\x3a\xce\x33\x42\x4d\x3b\x96\x97\x5c\x68\x54\x77\x87\x39\x47\x4a\xfe\xca\x7b\xa8\x06\x88\xb4\x0b\xca\xd5\xbc\x6e\xda\x72\x81\x75\xbc\x5c\x24\xd4\xbc\x2b\x2a\xb5\x30\xd5\x3c\xd7\xd9\xe5\x6f\x23\x6e\x74\x43\x35\x06\x42\x1b\x02\x06\x0a\x59\xba\x26\x15\xff\x7d\xb5\x20\x01\x80\xe4\x96\xad\x01\x1b\x22\xff\x5d\xaa\x62\x3d\xb8\x0d\x1f\x00\xcb\xd2\xb0\x6d\xec\x08\x28\x18\x69\xe4\xb8\xb9\x9a\x03\xad\x91\x72\x96\x9a\xba\xe3\x62\x35\xc6\x8a\x3b\x05\x41\x29\x55\x3c\x40\xb6\xf1\xc1\xc0\x58\x71\xba\xc2\x6d\x67\x0c\x90\xef\x92\x2b\x1c\x14\xdd\x33\xc2\xc6\xe0\x0b\x0b\xd5\xa8\x6f\x6d\x52\xc4\x0c\x59\x0f\x9e\x19\x77\x10\xee\xdc\xfb\x32\x82\x68\x6c\xf6\xdf\xe3\x5e\x8e\x69\xda\x60\x59\xa6\x50\xeb\x31\xc2\xe9\x3b\x03\x5d\x5b\x62\x01\xc6\x85\xae\x5d\x7a\xe1\xf3\x6d\x25\x55\x0f\x7d\xa8\xe3\xe1\x35\x4b\xd7\x5c\xa0\xff\x7c\xf3\x71\x2e\x96\x52\x15\x8d\x2b\x8e\x24\x9f\xcc\xf0\xb1\x0e\xdf\x3e\xc8\x1f\xe1\x86\x88\xb6\xd9\x2d\xa5\x16\x0e\xd2\x5d\x9f\x87\x68\x3b\xdc\x36\x8a\x05\xe0\x75\xf7\xe3\xd4\xf9\x04\xa4\x20\x71\xfa\x9d\x67\xea\x13\x78\xf5\xc1\x9d\x8a\xcc\xaf\x40\x2a\x6f\x88\xd8\xbf\x0e\x04\x76\x8a\x8b\x80\x18\xc6\xc3\x35\xfa\xde\x7e\xe4\xf3\x98\xe5\xb8\xd0\x6f\x4b\xc3\x0b\xfe\x71\x0c\xbe\x1e\x97\x65\x24\xf2\xb5\xb5\x84\xcd\x1a\x95\xb7\xc7\x3c\x89\x7b\x7f\x30\x8d\x46\x74\x77\x5e\xb0\x8f\x52\xc0\xab\x97\xd7\x30\x3f\x7d\x3b\x8c\xc7\x5d\x1b\x78\x14\xec\xba\x2a\xc7\xc5\x62\x57\xe1\x97\x98\xf2\x25\x6f\x01\x88\x62\x6d\x61\xcb\x82\x6b\xd1\xda\x4c\xa4\xb0\x5e\xbd\x39\xb7\x00\xa3\xb0\x2a\x25\x7b\x18\x6c\x9c\x15\x57\x4a\x2e\x79\x1e\xe3\x95\xbe\xe9\x99\x1f\xf3\xf3\xd7\x0d\xea\x4a\x37\xcc\xa0\x29\x1b\x1a\x9d\x00\x5f\x02\x2b\xcb\x9c\xa7\x16\xe6\x29\x90\x47\x09\x72\x6c\x13\xb1\xab\x5b\xc1\x56\xa3\xdb\xf4\xad\x59\xce\x2f\xc3\x1c\xcf\x5f\xcf\x6b\xc7\x43\xce\x2a\x91\x76\x67\xf4\xb0\x29\xf8\xce\xd6\x58\x8a\xc5\x7b\x5a\x29\x45\xa7\x72\xc1\x88\x3a\x18\x0a\x4f\x4e\x24\x25\x96\x2c\x8d\x52\x13\x0d\x75\xbe\x7a\x33\xd7\xde\xe8\x74\xc8\x09\xb0\xec\xaf\x10\x76\x4a\xa0\x69\x09\xe0\x3d\x3f\xf3\x32\x12\x93\xc1\x53\x34\xbf\xba\xfb\xba\x16\xa8\x4c\x6b\xbe\x12\x6e\x26\x07\x63\xd6\x79\x99\xe2\x01\x72\x4e\xa9\x28\x78\x3e\x05\x07\x29\x29\xcd\x25\xde\xf1\x14\xaf\xf9\xc7\xa8\xd3\xa8\x7a\xd5\x35\xff\x88\xf0\x84\x0b\xf8\x1b\x7f\x1a\x88\xd0\x0e\x07\xda\x48\xc5\x56\xd6\x78\xb1\xe3\x0e\x0e\xe9\x14\x3a\x59\x6b\x7f\xfe\x7a\x02\xee\x71\x6b\x4e\x63\x5a\x29\x6e\x36\x7f\x53\xb2\x2a\xe7\x59\x14\xc1\x76\xba\x5c\x6a\x60\x0a\x9d\xde\x54\x50\x48\x85\xf5\x98\x2e\xd6\x04\x6c\x13\xe7\xb2\x0c\x72\x6d\x81\xb9\x14\x74\x08\xfa\x00\x5b\xe7\x40\xd2\x9e\xda\x26\x6e\x4d\xb5\x2f\x9d\xaf\xaf\xbf\xa3\xcd\x61\xc9\xb8\x7a\x10\x9d\x38\x87\xe3\x03\x64\xa6\xf7\xec\x7e\x0a\x21\x35\xee\xc4\xd8\xc7\x81\xb1\x73\x19\xb6\x26\x43\x4e\x8a\x29\x55\x36\x35\x9b\x51\x63\x66\xdc\xe6\xdb\x02\xa0\xa6\x3f\xdb\xe7\x41\xa8\xab\x34\xaa\xcb\xad\xd0\x87\xc1\x0f\xfe\xe8\x9b\xd6\xfe\x68\x76\x0f\x99\xfd\xdb\xb5\x81\x92\x69\xbd\x2d\x8b\xfc\xa6\x8d\x6b\x50\x95\x80\xaa\x94\xc2\x1a\x1a\x46\x1b\xc5\xca\x04\x6e\x28\xc0\x84\x0e\x74\x8b\x4a\x1b\xf0\x61\x23\x0b\xa6\xf1\xcf\x5f\x03\x8a\x54\x66\x76\x23\x21\xb2\xe0\xc3\x93\x22\xdf\x74\xfd\x94\xaa\x12\xc2\x5a\x3b\x0c\x04\xde\x1f\x42\x47\xe3\x06\xec\x0c\x78\xb6\x8f\xb7\xc8\x2b\xcd\xb8\x73\xe3\xee\x99\x71\xeb\x74\xd8\x4e\x6a\xc2\x49\xb9\x63\x5b\x57\x72\x17\xce\xf3\x2a\x5f\xc4\xec\xec\xae\xe6\xbe\xf9\x0f\x2f\xc3\xfa\xb6\xdc\x0f\xac\xe4\x61\xbb\x9d\xe6\x56\xeb\xa4\xdd\xf0\x82\x87\xfa\xaf\x99\x71\xe1\x3d\x53\xdb\xb0\x2e\x9c\x75\x87\xda\x7b\x84\x1f\x8c\x62\xad\x91\x06\x19\x32\x02\xda\x38\x88\x81\x8c\xcb\x1c\x6f\x78\x81\xb2\x1a\x75\x61\x0c\x80\x3e\x6f\x7a\x11\x86\x79\xe1\x0f\x06\xbd\x4b\x49\x78\xe7\x27\xa7\xc0\x01\x79\xef\x58\x69\x81\xf4\x39\x78\x22\xa4\x63\xb6\x35\xd3\xb0\x40\x14\xa0\xad\xa1\x27\xef\xfc\xe6\xa4\x19\xe0\x29\x2c\x70\x49\xf1\x55\xf4\x9d\x34\x97\xba\x39\x80\x8b\xc4\x03\x44\x69\xe2\xf0\xdb\xa5\x91\xdb\xad\x26\x0f\x5f\x32\xa1\xc7\xd5\xd8\x16\x42\x2f\xdf\x5c\xb7\x5d\x9e\x99\xd0\x1d\xcd\x16\x39\xd5\x88\x9d\xed\x1a\x59\x6e\xd6\x17\x6b\x4c\x6f\x63\xe9\xf4\xbb\xa6\x4b\x80\x2f\x30\x0e\xe6\x0b\x3f\x22\xa4\xf4\xfe\xb3\xd3\xab\xfb\xda\xe6\x66\xad\x50\xaf\x65\x3e\x79\x0a\xf9\xe9\xd7\xdd\x9f\x91\xdc\xb1\x7c\x0f\x66\x39\x87\xcb\x10\xee\xd3\x77\xcf\xe6\xac\x24\x35\x63\xf9\x67\x81\xe6\xde\xf2\x82\xb9\x0f\x5b\x0b\xa3\xe9\xf4\x5e\x38\xf0\x41\x30\x21\x35\xa6\x52\x64\x90\xca\x4a\x98\x84\xd4\x66\x2f\xd8\x34\xe7\x14\xc2\xe8\x02\x47\xd5\x0a\x75\xcb\x23\x4b\x8e\xd8\x2c\xc0\x62\xa4\x35\xab\x95\xfc\xc0\x0b\x66\x30\xdf\xc0\xf3\xbf\x7c\x05\x1b\x64\x6a\xd2\xd3\xf3\x39\x70\x6a\x2c\xa0\x3b\xc4\x4f\xe4\x91\xab\xd9\x5b\x94\x1d\x57\x67\xc7\xea\x54\xe2\xb7\xe5\xb9\x5d\xbe\x38\xf2\x6b\xf7\x20\x9c\x68\x1a\x18\x78\xa2\x89\xa3\xc7\xa9\x06\x8e\xca\x26\x5a\x6c\x23\xed\x10\x5d\x92\x73\x6d\x50\xa0\x8a\x95\xd8\x3f\x84\xf6\x3e\xf8\x90\x76\x5b\x56\x97\xb4\xe5\x76\x3d\x68\x84\xd0\xb6\xb4\xac\xd0\x99\xb5\x0b\x04\x66\x20\x47\xa6\x8d\xdd\x57\x8e\x93\xe3\xe4\x3e\x71\x0b\xe6\x0b\x07\xda\xab\x1f\x5e\x06\xe8\x9b\xf0\x2b\x77\x2a\x30\x68\xad\xd5\xd3\x98\x62\x8b\x38\xd5\xd2\xb8\xa9\xae\x26\x0e\x74\xc2\x2f\x9e\xcc\xe3\x59\xad\x05\x81\x92\x46\xa6\x72\x87\x9a\x19\x45\x61\xe8\x5e\xa3\x30\x60\xc9\xa2\x82\xde\xb8\x18\x22\xb6\x8f\x09\xdc\x9f\xcf\x4e\x61\x3c\x7d\x32\x16\x7e\x9f\x07\x91\xe5\x1f\x01\x81\xbb\x45\x9f\x93\x68\x0d\xd5\xc6\x35\xf4\x53\x98\x6c\x3c\x72\x22\xd8\x6a\xb0\x7b\x94\x08\xd1\xb6\xcb\x21\x04\xe0\xd3\xa9\xe2\x24\x5f\xdf\x25\xd4\x13\x63\x73\x53\xcb\x30\x1f\xd1\x69\x05\x5e\x88\x9c\x73\x1e\x9c\x4e\x97\xb0\x35\xcb\x42\x78\x9d\x0f\xa4\xb5\x23\xb1\x5c\x4b\xb7\x93\x24\x4b\xa0\x89\x0d\x3d\xc8\x40\x9f\x8a\x98\xdf\x9a\xae\x8f\x9a\xf7\x56\x79\x57\x30\xba\x81\x4e\x00\x39\x1d\xaa\xf0\x6e\x9c\x3c\x34\x11\x84\x87\x81\x1b\xe5\xa1\xdc\x06\xbc\xef\xa5\xec\x29\xaa\xae\x93\x72\xdb\x3b\x1c\xc9\x6d\x3b\x55\x50\xfc\xc1\xe5\x24\x85\x06\xc7\x61\xf4\xf4\x5d\xfb\x81\x79\x77\x83\x39\xdf\x5f\x5d\x74\x8e\x1c\xbe\xc0\xa9\x7f\x39\x41\x57\x05\x2b\xeb\x68\xab\x03\xf6\xa1\x87\xc5\x5d\xf5\x38\xe2\x13\xb8\x72\xc7\xf9\xa6\x6f\x20\x75\x99\xe6\x90\x70\x81\xfd\xc2\xe4\xf9\x60\x84\xfc\xe1\x61\xf0\x62\xa5\x50\xeb\x77\xd5\xd8\x51\xed\x10\x34\x4d\x1f\x5d\x47\x21\x8a\x85\xac\x44\x06\x8a\x1e\x0e\x06\x1a\x47\x21\x0e\x62\xb8\x6a\x1c\x9e\xfe\x6a\xf9\xe9\x11\x58\x64\x4b\xf4\x64\xde\xb4\x0d\x11\x6b\xd2\xb6\xe2\x6a\x77\xb6\x1c\xd8\x45\x58\x86\x6a\xe2\x6a\x5d\x62\x5c\x9e\xcb\x7b\x60\x69\x6a\x81\x5f\x2a\x59\xb4\x73\x24\xb5\x3f\x38\xf3\xc8\xbd\x26\x87\x6f\x4f\xd8\xef\x32\x8e\xa2\xb0\xec\x7e\xd1\x86\x28\x44\xc9\xb2\x21\x34\x44\x0e\x1b\x05\x83\xc5\x56\xcc\xde\x62\x3f\xa3\x78\x1f\xb3\x38\xde\x30\x9e\x12\x3c\x5b\xd6\xb1\x8f\xaf\x76\x0f\x2d\x34\xde\x38\xee\x9d\x35\x5a\x52\xdf\xbd\xfa\x7b\x20\x54\x0f\xd0\xd7\x94\x12\x1e\x9c\xda\xcd\x96\x04\x00\x9e\xed\x4b\xe9\x75\x34\xfa\x0e\xbe\x85\x2f\x80\xbc\x8d\xfc\x6d\x89\x30\x66\x5b\x63\x77\x18\xad\x55\xda\xd1\x32\x30\xd6\x8e\x66\x11\x5b\x16\x72\xef\xc8\x9d\x63\x45\xed\x6c\xe2\xd6\x64\x7a\x77\xb3\x95\xdf\xd4\x98\xfb\x3d\x9a\xb5\xe3\xfc\xe1\x72\x65\x76\xd9\x74\xf1\x9a\x3b\x62\xc5\x76\x47\xfd\x0d\x1c\x9d\x86\x57\x16\xfd\x63\x26\xf2\xae\x4f\x8f\x4b\xda\x16\x1a\xea\xd2\x05\x4a\xe6\x78\x7a\xcb\x45\x9d\x5c\xd1\x23\x04\x23\x81\x1b\x1d\x0c\x32\x17\x27\xc9\x97\xc0\xc4\x48\x52\xde\xc3\xf3\x08\x58\xb6\xd9\xc6\xd5\x78\x00\xde\x30\x7e\x67\x6e\xa0\x47\x3b\xbf\xba\xf5\xd0\x45\xd9\x9f\x81\x51\x95\x43\xbd\x8f\xc9\x39\x83\x25\xcb\xb5\x7f\x54\x2d\xea\x73\xe7\xf0\x5d\x1f\xdd\x0f\xbf\xfc\xfa\xc8\x87\x72\xd6\x34\x4d\xbb\xe4\x0b\x99\x57\x85\xa8\xab\xa9\xf4\x5c\x44\x2e\x09\xc2\xc8\x3a\x82\x9b\xeb\x76\x59\x12\x1f\x3d\xe3\x3f\xf5\x2f\x2d\xc5\x15\x33\xeb\x33\x48\x42\x61\x86\xc4\x95\xaa\x09\x45\x5d\xfe\xe1\xaa\xba\xfc\x83\x8a\x45\xf8\xba\x2d\x2d\x5a\x72\x75\x53\xba\xc9\x03\x5b\x2c\x35\x02\x63\xb7\x8a\x0c\x85\x2d\x58\x4c\x93\x6e\x7e\x75\xf1\xbc\xf6\x07\x0d\x00\xeb\x50\x94\xb4\x57\xc6\x41\xf2\xae\xf5\x64\x17\x1c\xd6\xca\x75\x09\x4c\x4d\xf2\x08\xd7\x50\xe9\x46\x14\xb4\x3f\x59\x62\x9a\xb4\x32\xd5\x93\xbb\x32\x4d\x6a\x86\x73\x5f\x7f\x7f\x75\x11\xfb\xed\xab\x39\x84\x9c\x84\xd1\xe9\xb5\xb3\x2c\xfe\xfe\xd5\x3f\x3b\x9f\xea\x75\x2e\x15\x97\x96\xc7\xce\xe0\x59\x24\x04\xbe\x06\x00\xcc\xaf\xea\x18\x37\x8b\xf8\x85\x42\x76\xbb\xca\x99\xd6\xde\xb2\x18\x85\xce\x47\xd1\x27\x21\xb8\xae\x03\x5e\x33\xfa\x18\x38\x9d\x8a\x3b\x2f\x1c\x33\x1c\x2b\xee\x1c\x2b\xee\x1c\x2b\xee\x1c\x2b\xee\x1c\x2b\xee\x8c\x9b\x35\x71\xc9\x4b\x41\xfe\xd6\xf9\x3b\x6e\x56\x3e\xd1\xce\x17\x14\x89\xc8\x4c\xdc\x11\xf9\xe6\x82\xa7\x2e\xe6\x97\xef\xa6\x5c\x38\x5d\x9c\xf7\xfb\x38\x16\xcf\x07\xbc\x39\xad\xd8\x2c\xbf\xcb\xdd\x02\xd8\xee\x8e\x37\x14\x43\xac\x5d\x31\x89\xb6\xdb\x4a\xd7\x4a\xe0\x65\xab\xcf\x63\x5d\xdb\xb0\xe0\xfc\x94\x9d\x82\x3d\x21\xb5\xfa\xab\xa7\xff\xf9\xf0\x62\x56\xf0\x18\x0c\xbe\x9e\xc3\x3d\xcf\x73\x97\x64\xbd\x6e\xef\xf5\xed\x2b\x23\x29\xea\xb3\x8d\xab\x04\xe6\x4b\x8a\xf7\xac\x5b\x9e\xd4\xb9\x14\x34\x92\x47\x80\xed\x2b\x05\x42\xc9\xd3\x5b\xcc\x80\xc2\xe7\x44\x5d\xa3\xa1\x64\x0f\x8c\x19\xf6\x65\x8a\xda\xce\xcf\x88\x69\x5e\x6e\xf7\x72\xc0\xa2\xd0\x9e\x78\x15\xd2\xd2\x0b\x19\x1c\x99\x7e\xd9\xfd\xf1\xc4\xa2\xbb\xea\xbd\xcd\x18\xbc\x73\xf6\xbe\x1e\x20\x49\x17\x0d\x88\x45\x69\x26\x37\x25\x93\x29\x46\x8b\x3c\x2a\x01\xea\x95\x6b\xe9\x88\x5d\xf7\xb2\xe9\x9b\x14\xfa\x91\x42\x4b\xa1\x04\x8a\x5f\x23\x5e\xf6\x98\xc5\xda\xb7\x21\xbf\x62\xb4\x12\x52\xcc\x84\xc2\x07\x6f\xe2\x22\xa6\xe7\xad\xe6\x63\xc4\xda\x89\xa8\xae\x59\x75\x82\x64\x83\xa1\x67\x8d\xe7\xab\x80\x22\x2b\x72\x9b\x0f\xbc\x48\x0a\x9e\x2a\xe9\xfc\x7b\x79\xee\xcf\x43\x35\xe0\x87\x14\x4b\x03\x95\x9e\x21\xd3\x66\xf6\xec\x24\x94\x39\x79\xee\x3b\xd0\x10\x0b\xf4\xaa\x6c\x44\x2c\xc3\x01\xb5\xba\xda\x95\xd2\x82\xf1\xbe\x43\x88\x5f\x0c\x74\x19\x4b\xa1\xae\x73\xa2\x1e\x92\x46\x3d\x2d\xe5\xc7\x13\x9a\x3f\x7d\x3a\xf3\xae\x44\x9e\xb8\x9c\xbd\x83\x13\x99\x5b\xae\xc5\x17\xcf\x27\x00\x1d\x73\x27\x4e\xc5\xb7\x0f\x26\x39\x8f\x04\x34\xfc\x8e\x2a\xef\xed\x4b\x55\xa9\x92\x5a\xff\x2c\xdb\x50\x70\xb1\x8a\x58\xdc\x3f\x5d\x0c\xf6\xf4\x22\xb7\x1b\x00\xfc\xea\x87\x97\xee\x43\x03\xb5\xc9\x16\xa1\x67\x02\xff\x10\xf0\x93\x65\x15\x6a\x3a\xa3\xb7\xad\xd3\x58\x2e\x56\x27\x80\x2c\x5d\xf7\x22\x18\x84\xcc\x9c\xd8\xda\xc8\x4a\x85\xe0\x1c\xb0\x40\x41\x8d\xd5\x8c\xeb\x3a\x58\xbe\xde\x45\xe0\x1d\x8a\x7c\x03\xcc\x41\x16\xc2\x36\xac\x68\x6b\x49\x45\xd2\x62\x8c\xd4\x9d\x53\x10\xed\xd2\x6b\x60\xa7\xaf\x49\x46\x8e\xc2\x6c\x57\xd4\x6b\xde\x6c\x1c\xfe\x03\x01\xb4\xbb\xa3\x2d\xc0\x28\x73\x84\xb0\xda\x2e\x5a\x43\x4e\xaf\xe4\x4f\x0f\xd2\x3e\xbf\x87\x3a\x8d\x0f\xa9\x19\xd8\xc0\xe9\x1f\x50\x96\x82\xf7\x04\x2c\xd0\x25\x16\x36\xb1\x15\x5d\xce\x9b\x98\x4d\xc6\x75\x2a\xef\x68\xb9\xc2\xc8\x96\x50\x5b\x05\x85\x34\x58\x0d\x29\x9c\x8d\x43\xc6\xb3\x6d\x50\x89\x76\x93\x61\x24\x7c\x3e\x03\x78\x42\xda\x51\xb6\xf0\x0f\x52\xde\x56\xe5\x4b\xa6\xf1\xed\xf5\xae\xe2\x0d\xfd\xf6\x43\xd5\x5a\x16\x4c\x23\x58\x19\xc5\xc8\x97\xa0\x37\xda\x60\xd1\x24\x17\x4b\x79\x0b\x55\x59\xd7\x19\x20\x10\xb4\x4b\x84\x62\xf5\xd3\x4c\xa2\x6e\xd9\x29\x1b\x3a\x3e\x7f\x3d\x4f\xe0\xa7\x35\x25\x8e\x98\x13\x67\xd2\x05\xfb\x82\x46\x0f\xd6\x49\xf0\x3a\xfa\xc1\x74\x28\xec\xd6\x0c\xaf\xeb\x4c\x4f\x06\x19\x5f\x52\x41\x3f\xb3\x3d\xbb\xbd\x6a\xdd\xb4\x70\xf9\xad\xd3\x73\xd3\xb8\x7c\x3c\xef\x77\x08\xc8\xb4\xfb\x07\xc1\x0a\x8b\x3c\xa7\x31\x7f\x3f\x78\x7b\xab\x56\x09\xf8\x2a\x00\x54\x97\x52\x1b\x6e\x2a\xb7\x47\xb6\x9f\xf9\xe5\x97\xc4\xa1\xf6\xd7\x5f\xc9\xb3\xf6\xcb\x2f\xc9\xf7\xdf\x68\xef\xf5\xfb\xf5\xd7\xc6\xb4\x22\x22\x7a\x7b\x4d\x8d\x6e\x9b\x34\x2e\xef\x0b\x3c\x01\x85\x16\x16\xc3\xef\xd0\xca\xc4\x1b\xb7\x19\xb5\x04\xd9\xb6\x38\x9d\x67\x8b\x8b\x01\xba\xb5\x5c\xb9\xa8\x84\xa9\xe0\x49\xcb\x36\x7d\xea\xfc\x7d\xf6\xc9\xf6\x47\xed\x3e\x38\xc4\x05\x86\x6a\x80\x2c\xbd\xa5\x65\x28\x95\xcc\xaa\xd4\xbd\x68\x7a\x9e\x2a\xcc\xd1\x4e\xc4\x4e\xcb\x6e\xfb\xee\x7c\x61\x46\x85\x4b\xfe\xe1\x0c\x9e\x25\xcf\x5e\x24\x5f\x9d\xd8\xff\x3f\x4f\xfe\xef\xac\xd8\x50\xe5\xf9\xe4\xd9\x89\x05\xef\x59\xf2\xec\xff\x25\x2f\x12\xf8\x56\x2a\xc0\x0f\xac\x28\x73\x3c\x69\xdb\xd1\x8e\x02\x02\x85\xc8\x25\xa4\xac\x64\x33\x56\xf0\x59\x0b\xc9\xb3\xbf\xf6\x30\x3c\xfb\x9f\xb0\xdb\xcb\x2c\x35\x69\x24\xbf\x98\xa3\x34\x4b\x29\x5e\x56\x16\xcc\x78\xf3\xae\x64\xc6\x8a\xf0\x66\x74\x87\xb6\xd9\x5f\x9f\x25\xcf\xbe\x49\xbe\x9a\xfd\x8f\x3f\xf4\x0f\xa5\x3b\xa8\xbb\x25\x64\x0a\xa7\xb7\x23\xb7\x31\xe9\x3a\xd5\x48\xf6\x4b\xe0\x17\x3b\x81\x6b\x44\x0a\xb0\x6c\xb9\xf8\x64\xce\xc4\x2a\x91\x6a\x75\x5a\xde\xae\x4e\x0d\x7e\x30\xa7\x06\x8b\x32\x67\x06\x4f\x1f\x3f\x90\x3f\xdf\xaa\x01\x8b\x68\x4c\xd0\xbd\x55\xab\x9a\x31\x7f\xba\x86\xb7\x6a\xc5\x04\xff\xe8\x6c\xb8\xf9\xe5\xef\x8b\x35\xf7\xc1\xd7\x97\x58\x3e\x38\x15\x31\x9e\x9c\x8b\x37\xf3\xae\xad\x3d\xd8\x25\xa2\x36\xa1\xe0\xbb\x9d\x2b\x43\x5f\xef\x38\x57\xc2\x72\x3b\x1f\x8a\xcb\xf0\xc9\x37\xde\x63\xd8\xb2\x3b\x2c\x4f\x58\x9c\x04\x13\xb2\x1f\x18\xe6\x22\x56\x9c\x37\x3e\xec\xea\x29\x8a\x2c\x10\x8c\xb5\x36\xa6\x46\xdd\x2e\x01\xf0\xc9\xb2\x38\x3a\x53\xde\x19\xf2\x66\xd7\xc7\x6f\xe5\x0a\x3a\x45\x98\xf8\x4e\x6c\xc4\xdb\x1e\xc1\x5b\xd1\xf1\x35\xb1\x81\x5b\x5f\x50\x2e\xc3\x7f\x2c\x60\x2b\x1a\x89\x71\x61\x47\x9f\x03\x85\x71\x79\x14\x71\xe1\x46\x51\xc1\x46\x51\xa1\x46\x11\x81\x46\x9f\x24\x81\x62\x57\xbc\xf2\xb1\x10\xfb\x10\x5c\xc7\x42\xec\xc7\x42\xec\xc7\x42\xec\x70\x2c\xc4\x7e\x2c\xc4\x7e\x2c\xc4\xfe\x5f\x55\x88\xbd\xaf\x32\xaf\xd1\x63\x69\x6a\xdb\x43\x8e\x88\x33\x78\xab\x32\x54\x38\x9e\xec\xde\x0b\xf3\x1a\xfb\x52\x6b\x0f\xbb\x96\xf7\x70\xfe\xb3\x6e\xf9\x6c\x35\xb5\xc2\x0c\xf8\xb2\x75\x46\x4d\xb5\xcd\x6c\x43\x2e\xa8\xf0\xb0\x2f\x5b\xcd\x44\xeb\x40\x74\xb1\xd9\x52\xeb\x3f\x6a\xbb\x2d\xe6\x05\x37\x21\xc9\xdd\x0e\xf6\xdc\x7f\x84\x40\x21\x0f\xb7\xae\xe7\x06\x33\xff\x52\x93\xb7\x22\xb3\xb2\x85\x62\xec\x16\x68\x78\xca\x72\x90\xb6\x1d\xbc\x63\x22\x93\x45\xab\xb1\x85\x4d\xd1\xc3\x7c\xd3\x01\xb2\xed\xc3\xf7\xdf\xd8\x76\x67\x84\x1f\x8a\xaa\x98\xaa\x84\xb0\x6b\x01\x66\x1e\xb0\x1d\xd6\xe4\x24\x4b\xf5\x09\xa4\xc1\x61\x04\x85\xbc\x88\xa3\x8d\xf1\x75\x6a\xd1\x86\xa1\x2a\xb5\x1f\x78\x51\x15\x20\xaa\x62\x81\x8a\x42\xff\xfa\xc6\x99\x86\x27\xe7\x3f\x3f\xed\xbb\xfe\x49\xa6\xb7\xd7\xc1\x79\x69\x2a\x23\x0b\x46\x0b\x99\x6f\xfc\x4d\x4c\x62\x15\x64\x3b\x1d\x08\xd5\x1d\xac\xf2\x25\xb2\x23\x32\x23\x75\xd3\x40\x61\x97\xdb\x38\x63\x6a\xeb\x79\xd8\xa7\xfb\x30\x90\x9a\x2a\x08\x82\xfa\x9b\xc1\xbb\x57\x7f\xbb\x4d\x28\xe3\x68\x2c\xb8\xb0\x08\x69\x02\x55\xc7\xd6\x78\x7a\xdf\x74\xbc\x8e\x01\x8e\xd7\x31\x1c\xaf\x63\xe8\x7d\xff\x78\x1d\xc3\x03\xae\x63\x80\xf7\x2c\xe7\x21\x46\x9a\xf4\xab\x3f\x14\x75\x51\xc7\x4f\x32\x49\xde\x70\xcb\x43\xbe\x84\xa7\x7e\x7a\x02\xcc\x76\xe0\x59\x5d\xd5\xd3\x25\xb2\x48\x05\xb2\xe0\xc6\x12\xea\x93\x10\xf1\x14\x04\x65\xbb\xe5\xf6\xd1\xea\x28\x36\xc6\x22\x75\x7f\xeb\x3b\x20\x8e\x55\xf4\xc7\xbf\x7b\xac\xa2\x1f\x05\xc0\xb1\x8a\xfe\x68\x24\x70\x94\x5f\x70\xd4\x24\x75\x4e\x3f\xb9\x9c\x2e\x02\xbe\x03\x47\xc7\x4a\xfe\xc7\x4a\xfe\x51\xdd\x8e\x95\xfc\x7b\xbf\x3f\x4a\x25\x7f\x21\xc5\x3b\x29\xcd\x7b\x99\x57\x45\xd4\x24\x2e\x3a\x81\xa3\x21\xe7\xa4\xd1\x74\xa2\x5b\x9c\xfe\xce\x0d\x7c\xa8\xb6\x75\xf0\x75\x4f\xf4\x7d\xb8\xdc\x04\x34\x11\x15\xf2\xe3\xd4\xae\x1b\x60\xba\x9a\x6e\x3f\xb7\x81\xba\x4c\x25\x65\x43\xac\xc2\x45\x91\xaa\x4d\x69\xa6\x4f\x0f\x7b\x19\x07\xbe\x87\x15\x71\x6d\x59\xed\x96\xa3\xe5\x83\xa8\xc7\xb6\x7a\x57\xc8\x08\x17\xeb\x2e\x67\xbd\x1f\x91\x4b\xf1\x3d\x0e\x24\x67\x4f\x43\xec\x7a\xd5\x35\xb3\x5f\x5f\x07\xe3\xde\x6f\x6f\xfd\xe0\xad\xb9\x50\xb6\x1e\xcd\xc4\x55\x19\x63\x75\x2f\x2b\x86\x14\x9c\xbf\x7b\x43\x3e\x93\x0e\x4a\x28\x93\x88\xe2\x7e\x9c\x83\xde\x1b\xf4\xdd\x98\x26\x6b\x42\xda\x71\xda\x41\x30\x2e\xf2\xc1\x3e\xa5\x2a\x6e\x2c\x77\xf9\xcc\xf8\x81\x6b\x37\xe2\x02\x7d\x6e\x06\x5f\xe4\x18\xce\x07\x7c\x18\x44\xfe\x29\x4a\x12\xc9\xb1\x8a\x4e\x03\x48\x9d\xbf\xbd\x6a\xa2\x22\x6b\xff\x0f\x3d\xf5\x81\xc0\x5e\x51\xd3\xb4\xb9\xbe\x4d\xe0\x8d\x34\x2d\x1d\xe3\x6b\x90\x10\x68\x93\x86\x63\xec\x99\x79\xdc\x79\xb9\x1e\xbd\x23\x63\x60\x92\xd7\xfc\x63\x3b\xe2\x68\xe8\xba\x8c\xae\x1c\x48\xe0\xb5\xaf\xc0\xb7\x22\x67\x89\x0a\xde\x33\x1f\x2d\x05\x5a\xb0\x52\xaf\xad\x10\xb3\x63\x49\x05\xdf\xc0\x13\x3a\xd5\x41\x9f\x58\xe0\xfb\x8d\xa4\x8f\xed\x87\x91\xda\x59\xf6\xcd\xc1\x68\xdb\xcb\x30\xa7\xb4\x1d\x4f\x1b\x14\x7e\xe1\x71\xe5\x25\xc4\x13\x4c\x56\x09\xac\xca\xe7\x27\xc0\xe5\xb3\x13\x40\x93\x26\x49\x32\x39\xe3\x4f\x62\x8f\x5b\x94\x7f\x1e\x7b\xfb\x78\x67\xcd\x9e\xe0\xa9\xda\x2e\x38\xd8\x2c\x18\x30\x09\x1e\x7a\x36\x14\xa3\x8a\xf7\x56\xc4\x11\xa4\x1b\xa1\x84\x3f\xbb\x0a\x8e\x51\xc0\x91\xea\xf7\xa8\x7c\xf7\x5c\xff\x69\xc5\xfb\x9b\xa8\xdd\x38\x15\x13\xa3\x3b\xa6\x15\xee\x97\xaf\x6e\xe3\x30\x11\xa1\x6a\x63\x90\x35\xad\x66\x3f\xab\x92\xdd\x49\xa7\xd3\x0a\x76\x42\xbd\xee\x53\x52\xf4\xbf\xe2\x1a\xb0\x52\x9a\xd7\x4c\xdd\xa2\x79\xeb\x74\x59\xd4\xfe\xbe\xd7\xc7\xeb\x41\x97\x5e\xe9\x15\x24\xa5\xed\xd5\xf9\x75\xee\x5c\x92\xee\x72\xd2\xf6\x0d\x85\x1c\x96\xb2\xc9\xfe\x1e\x61\xff\xdd\x7a\xb2\x60\x1f\xae\x14\x4f\x63\x29\xf5\xb5\x6f\xde\x39\x42\x08\x27\xdb\x25\xbd\xa1\x24\x09\xed\x58\xd2\x8a\x65\x3a\xb9\x92\x50\x32\x57\xcf\x89\xc0\x7e\xff\x7a\xab\xa6\xd3\x83\x97\x66\x9c\x18\x8f\x57\xb4\xfd\xb1\xae\x68\x43\xc1\x44\x3a\x62\xac\x74\x61\x70\x2d\x81\xd7\x8e\x68\xde\x38\xc0\x83\x49\x65\xb9\x49\x0a\xd0\x6b\xa6\x9c\x4d\x65\x39\x2b\xc7\x19\x7d\xc6\xc0\x9a\xa9\xec\x9e\xa9\x07\x22\x3e\xae\x36\xc2\xf1\x36\xb9\x2f\xf6\x36\xb9\x54\x0a\xc7\x21\xbb\x6e\xb5\xbf\xa8\x1b\x86\x58\x0b\x7f\xa4\xca\xbc\x6c\x77\x7c\xec\x93\x4b\x5d\x39\xa1\xe0\x5e\x66\x9d\x42\x16\xe3\x47\xfb\x71\x97\xdb\xd7\x90\xb4\xb3\x59\x5a\xb0\x8c\x7f\x71\x1b\xba\x87\x5c\x77\x9f\x33\x6d\x6e\x14\x13\x9a\x80\xb8\xe1\xe3\x5b\xaf\x6e\xf5\x66\xa6\x4d\xb8\x98\x0d\x1b\xbc\x83\xa9\x87\xb2\x66\xb0\x92\x05\x59\x05\xee\xb0\xdb\x85\x10\x4b\xbb\x99\xf0\x04\xd8\xec\x93\xea\xc0\x9d\x4a\x64\xa8\xf2\x8d\x2f\x54\xe0\x47\x4d\xd7\x4c\xac\xa8\x52\xd7\xb2\xce\xfb\xb3\x14\x7b\x2b\xe4\xbd\x38\x09\x41\xb4\x21\xda\x82\xc0\xaa\x07\xb4\x28\x73\x84\xee\x47\xa1\xa0\x8d\x34\xc5\xd2\x8c\xef\x9e\x1b\xab\x33\x63\x06\x67\x76\xc4\x87\xca\xd9\x02\xb5\x66\xab\x38\xac\x9e\xc3\xba\x2a\x98\xa0\x42\x8a\xb4\x57\xf0\x9d\x83\x4c\x74\x71\x5b\x86\xf1\x5c\x03\x5b\xc8\xca\x6d\xd7\x1a\x9c\x77\xf9\x9a\x6d\x76\x54\xc1\x89\xb2\x39\x99\x1e\x0f\xcd\xdc\x92\x8b\xae\x79\xbd\xff\xa9\x57\xf0\xb1\x26\x42\x6b\x81\x0a\xbc\x53\x74\xed\xa6\x29\x2d\x93\xd2\x92\x59\xe8\xd3\xb5\x94\x1a\xeb\x0d\xb6\xdb\x41\xfb\xba\x6f\x34\x45\x4e\x67\xf3\x9a\xbb\xc8\x49\x06\xab\x8a\x29\x26\x0c\x62\x66\xc7\xd8\xc2\x86\x17\x72\x87\x61\x44\xdb\x9d\x0b\x37\xa3\xdb\xef\x9e\x9d\xec\x1a\x07\x29\x43\xdc\x8d\x1f\xec\x5e\x90\x1b\x5f\xe6\x62\x49\x2b\xeb\x38\xfd\x9d\xc3\x9f\x95\xbe\x27\xa0\x65\x6d\x96\x51\xba\x7f\x9d\x93\x99\x32\x01\xbc\x28\x30\xe3\xee\xf2\x2e\xe2\x19\x2b\x7e\x5d\xb2\x6b\x7d\x20\xc6\x4d\xe5\x46\xb6\x6f\x58\x6a\x2c\xd9\x4b\x95\x59\x8d\xe9\x73\x99\x6b\xf8\x1c\x92\x5e\xff\x78\x7d\x13\x32\xfc\x48\xe0\x13\x17\xb9\xf8\x93\xff\xff\x2d\x15\x80\x78\x30\xda\x06\xe2\x5d\xc6\x90\xe6\xa4\x85\x97\xc1\x35\x0d\xd5\x91\x05\x37\xaa\xc2\x13\x20\x70\x4e\xe0\x47\x41\x42\xe0\xc1\x70\x4d\x6d\xf8\xb6\xb7\x7b\x72\xd9\x92\x4a\x6d\x0a\xb6\xeb\xc3\x2d\xe1\xcb\xc4\xe7\x50\x27\xa9\x2c\x4e\xdb\x65\x05\x99\xd8\x40\x52\xf7\x4e\x68\xcb\xd8\x0a\x5a\x22\x42\xd6\xc6\x2e\x9c\x2f\xdc\xd1\x94\xa9\xcb\xf9\x2d\x86\x00\x81\x1c\x4f\x60\x51\x59\x42\x4e\x59\xa5\x11\x98\x5a\x70\xa3\x98\xda\xb4\xb4\x1f\x51\x88\x53\xd6\xcb\x2a\x87\x27\x1a\x11\x12\x21\x33\x0c\xc5\x3f\x9b\xa6\x4f\x9d\x6b\x26\x04\x1e\x50\x16\x82\xdd\xce\xe4\x3c\x25\x31\xcb\x8b\x52\x2a\xc3\xc4\xa8\xe7\x6a\x97\xa3\x71\x62\xd3\x3a\xf3\x54\x31\xf8\x6a\x24\x38\x23\x22\x0e\x6e\x68\xdb\xb7\x64\x3c\xaf\x14\x5e\xca\x82\xf1\x21\xeb\x20\xd6\xb4\xee\x90\xc4\xb7\xed\x41\x29\xc7\x6c\xbb\x86\x69\x5b\x73\x7b\x20\x20\x73\x50\xf8\x6b\x7e\xa8\x6e\x58\xe3\xc8\x22\x35\xd9\xe2\xe8\xb5\xbc\x87\xc2\xd2\x4e\xaf\x37\x5d\x0e\xe5\xc6\x4e\x5b\x65\x0f\xf3\x0d\xe8\x92\x09\x4f\x43\x0f\xb1\x08\x76\xdf\x34\xbb\x5f\x70\x65\x84\xff\xad\xab\x04\x9b\xfb\x69\x29\xbc\x72\xa9\xd0\x55\x1f\x08\xe5\xba\xdb\x17\xd8\x8a\x7e\x19\xe2\x3a\x74\xb6\xe0\xab\xb5\x8b\xfa\x93\x2a\x50\xe1\x34\x0d\x4f\x9c\x3e\xb4\xab\x35\x45\x49\x8b\x76\x9d\xa6\x26\xaf\x47\xbb\xa4\x02\xab\x94\x3a\x8b\x49\x9e\xd3\x8a\xbb\x2c\x19\x2a\xe4\xa2\xc9\xc5\xd9\x4d\xb1\x0e\xf2\x7f\x7a\x16\xe3\x1e\xe4\xc9\x59\x8e\x13\xb6\x5f\x06\x9d\xf3\x94\x04\x60\xf7\xe5\x5e\xc5\x2f\x8f\xb7\x3d\x47\x40\x08\xbf\xdb\xdb\x9e\xf7\xa9\x09\x36\x38\x8b\x3d\x4a\x83\xf5\xae\x69\xec\x94\xce\x9a\xce\x29\x8f\x8b\x74\x38\xde\x5d\x3d\x8c\xb7\x4f\x70\x77\x75\x3f\x38\x32\x9a\xc6\xfb\xfd\xfa\xd7\x9b\x0d\xa4\xe6\xfc\x7e\x6e\x3a\x3b\xde\xe8\x7d\xbc\xd1\x3b\x78\x01\x8e\x77\x46\x1f\x6f\xf4\xfe\xdd\xae\xce\xf1\x46\xef\xed\x06\xc7\x1b\xbd\x8f\x37\x7a\x1f\x6f\xf4\x3e\xde\xe8\x7d\xbc\xd1\xfb\x78\xa3\xf7\xf1\x46\xef\xe3\x8d\xde\xc7\x1b\xbd\x47\x7e\xc7\x1b\xbd\x87\x7d\xf2\xc7\x1b\xbd\x8f\x37\x7a\x1f\x6f\xf4\x1e\xfb\xfd\xd6\x57\x1e\xef\x51\x14\x76\x2f\x18\x8e\x37\x7a\x1f\x6f\xf4\xfe\x02\xc8\xfb\x78\xa3\xf7\x74\xb3\xe3\x8d\xde\xa3\xbf\xe3\x8d\xde\x63\xaf\x8e\x37\x7a\xd7\x93\xf1\xb5\xfb\x9a\x6b\xb5\xb7\x07\xfc\x6d\x2f\xfc\x6e\x9e\x4c\xdf\xf7\xdd\x04\xb9\xb9\x00\x53\xcc\x2c\xff\xf9\x96\x74\x5f\x2e\xfc\xc9\xdd\xa0\x54\xe6\x95\x62\xb9\xff\xb3\x15\xb6\x0c\x7f\xff\xe7\x23\xf7\x61\xcc\xfc\x5d\x1a\xee\xe1\xff\x06\x00\x00\xff\xff\xcf\x1f\xa2\xe3\xd1\xc2\x00\x00") + +func clusterApiInfrastructureClusterXK8sIo_awsclustersYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiInfrastructureClusterXK8sIo_awsclustersYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml", + ) +} + +func clusterApiInfrastructureClusterXK8sIo_awsclustersYaml() (*asset, error) { + bytes, err := clusterApiInfrastructureClusterXK8sIo_awsclustersYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml", size: 49873, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd, 0xe0, 0xf6, 0xfe, 0x1d, 0xb2, 0xf5, 0x53, 0xc7, 0x5f, 0x4d, 0xa0, 0x4c, 0x70, 0xa9, 0x25, 0x86, 0x46, 0xa2, 0xa3, 0x74, 0x7d, 0x0, 0x78, 0x26, 0x4d, 0xaa, 0x25, 0xf0, 0x17, 0xc4, 0xdf}} + return a, nil +} + +var _clusterApiInfrastructureClusterXK8sIo_awsmachinepoolsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3c\x69\x6f\x1b\x39\x96\xdf\xfd\x2b\x1e\x66\x3f\x24\x19\x58\xe5\x38\xe9\xdd\xed\x35\xb0\x18\x78\x92\x4e\x46\xe8\x38\x36\x22\x77\x1a\xd8\x03\x0b\xaa\xea\x49\xe2\x98\x45\xd6\x92\x2c\xd9\x4a\xa3\xff\xfb\xe2\x3d\x92\x75\x48\x2a\xa9\xec\xf4\x01\x6c\x8f\xbe\x24\xae\xe2\xf1\xee\x8b\x8f\x25\x2a\xf9\x19\xad\x93\x46\x5f\x80\xa8\x24\x3e\x78\xd4\xf4\x97\xcb\xee\xbe\x75\x99\x34\x67\xeb\xf3\x93\x3b\xa9\x8b\x0b\x78\x53\x3b\x6f\xca\x4f\xe8\x4c\x6d\x73\x7c\x8b\x0b\xa9\xa5\x97\x46\x9f\x94\xe8\x45\x21\xbc\xb8\x38\x01\x50\x62\x8e\xca\xd1\xff\x00\x72\x55\x3b\x8f\x36\x7b\x98\x34\x4b\x09\x55\xad\xc4\x37\x17\x10\xff\xf7\xfa\x04\x40\x68\x6d\xbc\xa0\x85\xd2\x34\xa3\xbd\x35\x4a\xa1\x9d\x2c\x51\x67\x77\xf5\x1c\xe7\xb5\x54\x05\x5a\x5e\x23\x01\xbb\x7e\x99\xbd\xca\xfe\xed\x04\x20\xb7\xc8\xd3\x6f\x65\x89\xce\x8b\xb2\xba\x00\x5d\x2b\x75\x02\xa0\x45\x89\x17\x20\xee\x5d\x29\xf2\x95\xd4\x58\x19\xa3\x5c\x26\xf5\xc2\x0a\xe7\x6d\x9d\xfb\xda\x62\xb6\x0d\xe5\x89\xab\x30\x27\x48\x96\xd6\xd4\xd5\x05\x1c\x1b\x1e\xb6\x49\xb0\x0b\x8f\x4b\x63\x65\xfa\x7b\x92\x88\x30\x11\x95\xe4\x27\x81\x96\x97\x3f\xce\xae\x02\x4c\x37\xc6\x28\x7e\xa1\xa4\xf3\xdf\xef\x79\xf9\x41\x3a\xcf\x03\x2a\x55\x5b\xa1\x76\xf0\xe1\x77\x4e\xea\x65\xad\x84\xdd\x7e\x7b\x02\xe0\x72\x53\xe1\x05\x7c\x24\x20\x2b\x91\x63\x71\x02\x10\x89\xc8\x40\x4e\x40\x14\x05\x33\x52\xa8\x1b\x2b\xb5\x47\xfb\xc6\xa8\xba\xd4\x0d\x0a\x05\xba\xdc\xca\xca\x33\xd9\x23\x64\x60\x51\x14\x1b\x70\x5e\xf8\x3a\x80\x00\xf0\x77\x67\xf4\x8d\xf0\xab\x0b\xc8\xc2\xf3\x8c\x07\xc5\xb7\x81\x19\x9f\x3a\x4f\xfc\x86\x00\x73\xde\x4a\xbd\xfc\x05\xb6\xaa\x94\xcc\x85\xdb\xda\xad\xf7\x30\x6c\x48\x28\x2e\xd1\xee\xdd\x51\x6a\x59\xd6\x25\x48\xed\xbc\xd0\xe8\x40\x6a\xb8\x9c\xbd\xdf\xb3\x69\x85\x79\x56\x4a\x3d\x93\x5f\xb0\xb7\xe3\x55\xef\xd9\xf1\x0d\xc5\xc3\x63\x36\x14\x0f\xbb\x1b\xf6\x9e\x1d\xdd\xf0\x83\xa8\x75\xbe\x82\x5b\x2c\x2b\x25\x3c\xc2\xf4\xed\x20\x45\x15\x0f\x4d\x23\x9b\x81\x61\xdb\x0f\xbd\x97\xed\x32\x3b\x3c\x0d\xc3\x3b\xfa\x4e\x12\xb9\xc2\x52\x5c\xc4\x19\xa6\x42\x7d\x79\x33\xfd\xfc\x7a\xd6\x7b\x0c\x7d\xb8\xfb\x3a\x01\xd2\x81\x5f\x21\x84\x29\xb0\x30\x96\xff\xdc\xd2\x0c\xb8\xbc\x99\x36\xab\x55\xd6\x54\x68\x7d\xa3\x99\xe1\xd7\xb1\x7e\x9d\xa7\x5b\x7b\x3f\x23\xf0\xc2\x28\x28\xc8\xec\x61\xd8\x3d\x6a\x11\x16\x11\x23\x30\x0b\xf0\x2b\xe9\xc0\x62\x65\xd1\xa1\x0e\x66\x8d\x1e\x0b\x0d\x66\xfe\x77\xcc\x7d\x06\x33\xb4\x34\x11\xdc\xca\xd4\xaa\x20\x6b\xb7\x46\xeb\xc1\x62\x6e\x96\x5a\x7e\x69\x56\x73\xe0\x0d\x6f\x43\x04\x76\x9e\x99\x6a\xb5\x50\xb0\x16\xaa\xc6\x53\x10\xba\x80\x52\x6c\xc0\x22\xad\x0b\xb5\xee\xac\xc0\x43\x5c\x06\x57\xc6\x22\x19\x30\x73\x01\x2b\xef\x2b\x77\x71\x76\xb6\x94\x3e\x59\xf6\xdc\x94\x65\xad\xa5\xdf\x9c\xb1\xc9\x95\xf3\xda\x1b\xeb\xce\x0a\x5c\xa3\x3a\x73\x72\x39\x11\x36\x5f\x49\x8f\x6c\xf8\xce\x44\x25\x27\x0c\xac\x66\x5b\x9d\x95\xc5\x3f\xd9\xe8\x0b\xdc\xb3\x1e\xf1\x76\x64\x20\xfc\xd8\xf2\x1d\xa0\x32\x19\x3f\x62\xac\x88\x53\x03\x16\x2d\x31\xe9\x11\xd1\xe3\xd3\x77\xb3\x5b\x48\x5b\x07\x82\x07\xda\xb6\x43\x5d\x4b\x66\x22\x91\xd4\x0b\xb4\x61\xe4\xc2\x9a\x92\x57\x41\x5d\x54\x46\x6a\xcf\x7f\xe4\x4a\xa2\xf6\xe0\xea\x79\x29\x3d\xf1\xef\x7f\x6b\x74\x9e\x38\x90\xc1\x1b\x76\x50\x30\x47\xa8\xab\x42\x78\x2c\x32\x98\x6a\x78\x23\x4a\x54\x6f\x84\xc3\x5f\x9d\xc8\x44\x4d\x37\x21\xe2\x8d\x23\x73\xd7\x1b\x6f\x0f\x0e\x74\xea\xbc\x48\xbe\x6e\x80\x27\x7d\xad\x9b\x55\x98\xf7\x14\xa0\x40\x27\x2d\x09\xac\x27\x1b\x60\x16\xfb\xdc\xda\x61\xfd\x63\x1d\x6c\xdc\xcf\xad\x58\xee\xbc\x85\x9e\x7b\x1a\x5a\xe3\x00\x3d\xf6\xa1\xd5\xdb\x91\x65\x4e\x83\xa9\xc2\x23\x70\xe8\x59\x93\xe9\x95\x37\xb4\x3d\xff\xa3\xa3\x91\xce\xf1\x94\xac\x74\x82\x2a\x69\xa9\x21\xa2\x88\xa2\xc0\x02\xe6\x1b\xa2\x92\xa8\x95\xa7\xff\xd2\xcb\xcb\x1f\x67\x44\x80\xb5\xa4\x20\x66\x07\xb6\x01\xde\x30\xee\x6b\x21\x95\x98\x4b\x25\xfd\xe6\x3f\x68\x8b\x5d\xc4\xfb\x98\x6d\x8f\x8f\xc8\x09\x6b\xc5\x86\x0d\x51\x67\x00\x7c\x09\x23\x22\x5a\x0e\x72\xa1\xc1\xd6\x84\xe8\xce\x2e\xd2\x63\xf9\x78\xaa\x87\x97\xbc\xf9\x36\x62\xf7\xae\xef\x42\x8e\x21\xf6\xe3\x6c\xcb\xe5\x90\xe8\xca\x85\x8c\xa2\x18\x9c\x15\xf8\xf4\x96\xac\x63\xb4\xcf\xc4\xa1\xda\x21\xdc\xaf\x50\x77\xd9\x48\xa4\x09\xd3\xb0\xd8\x65\xca\xb0\xbc\x42\x4f\x26\x67\x98\xd7\x56\xfa\xcd\x7b\x8a\x16\xf7\x8e\x1d\x14\xbe\xfe\xd4\x6d\x4e\x59\x5c\xa0\x45\xe6\x8b\x37\xe0\xe2\xd8\x10\x95\x12\xce\xc2\x27\x17\x32\x47\x10\x55\xa5\x24\x16\x49\x18\x1b\x96\x66\x70\xbb\x42\x87\x3b\xd3\xef\xd3\x44\x12\xf6\x2d\x69\x16\x7a\xb3\x33\x3e\x68\x7d\x01\x22\xd9\x4b\x0e\x6a\x41\x91\x15\x03\x63\x69\x09\x76\xc0\xb9\xaf\x85\x37\x7b\x64\xfc\xa0\x0c\xed\xe3\x76\xca\x33\x3e\x25\x32\x04\xd7\xd0\x50\x85\x21\x4d\x42\x90\xb3\x86\x35\x3e\x61\xbe\x81\xe9\xdb\x53\xb8\xfc\xf4\xf1\x94\x80\x5b\x48\xe5\xd1\xba\x0c\xae\xb5\xda\x90\xa2\x12\x79\xe3\x00\x7a\xff\x2e\xbc\x67\x57\x31\x6f\x05\xab\xc8\x60\xc6\xff\xdd\x90\xe7\x29\xc9\xca\xfb\x15\x19\x0a\x8d\x70\x2f\x95\xa2\xfd\x48\xc7\x89\x7c\xe4\xab\x64\x11\xdc\x3d\x5a\x3b\x44\x81\x63\x62\x15\x85\xcb\xea\xe1\x97\xdb\x94\x22\x14\x16\x0d\xea\x07\xa6\x1d\x54\xd4\xf4\x8b\xa4\x1a\xbd\xfd\xb3\x44\xbb\xe0\xb7\x83\xe5\xbc\xc3\xcd\x59\xf0\xdd\x95\x90\xd6\x91\xf2\xb1\x64\xca\x82\xdc\xda\x62\xc3\x6c\x8c\xac\xba\x5d\xe1\x06\x84\x6d\x25\x58\xe4\xb9\xb1\x05\xfb\xfa\x20\xcb\xb6\x56\xd8\x0a\x60\xc7\xa0\x5e\xde\x4c\x5b\x8f\x5b\x98\xdc\x65\xe2\xde\x65\xa2\x14\x5f\x8c\xce\x72\x53\x9e\x5d\xfe\x38\xfb\xee\xcd\xab\xb3\x10\x3f\x9d\xfd\xe0\xd0\xbe\xaf\x65\x81\x67\x3f\x50\xb6\xf4\x3f\x01\x72\xa9\x97\xd9\xca\x97\xea\xd9\x01\x8c\x0f\xca\xed\x1e\xa2\x84\x95\x03\x49\x02\x41\xf7\x90\x40\xf7\x44\xf6\xe0\xe2\x63\x64\x26\xfc\x38\xd8\x3e\x32\x66\x0b\x58\xca\x0b\x43\xe0\x8a\x11\xd8\x2c\x21\xc0\x79\x2d\x33\x27\x17\x0e\x27\x0e\xb5\x93\x5e\xae\x71\x48\xb6\xdb\xdf\x28\x59\x0b\xbf\x10\xaa\x3e\x12\xe8\xcf\x3c\x09\xa4\xce\x55\x5d\xa0\x0b\x3a\x6d\x83\x8e\x46\x8a\xa7\x10\xf8\x5d\xf7\xcf\x27\x21\x33\x82\xfd\x8f\xc6\xfa\x90\x6b\xec\xff\x28\x16\xa5\x20\xeb\x30\x00\x13\x66\xd6\x91\x21\x81\x06\x07\x07\x1d\x08\x45\x1e\x0b\xbc\x3c\x08\x72\x8f\x9d\xd3\xb7\xbf\x9c\x0d\x3b\x8a\xc1\x61\xd8\x45\x29\xc7\xf8\xf0\xab\x69\x4a\x41\x7b\x0e\x89\x4d\xd3\xd5\x34\x64\x19\xf7\x2b\x49\x11\x89\x09\x05\x2a\xe4\x97\x31\x3d\x6d\x1c\xf4\x7e\xe9\x3b\xae\xf0\x07\x5d\xc4\x93\x1c\xc4\x08\xd2\x1e\x75\x0e\x7f\x34\xd7\x70\xd4\x32\xfc\x8a\x6e\x61\xac\x53\x18\xe3\x12\x7e\x6d\x87\x30\xda\x30\x8e\x73\x06\xbf\x97\x2b\x18\xe9\x08\x1e\xe1\x06\xc6\x39\x81\x31\x2e\xe0\xa8\x03\x18\x61\xfe\x47\x19\xff\xe3\x20\x1f\x32\xfc\x4f\x31\xfb\x47\xe9\x79\x04\x6e\x29\xca\x69\x34\xb7\x37\xd6\x2c\xa4\x1a\xd0\x87\x1e\x6c\xb7\x2b\x64\x8a\x42\x2c\x2d\x5e\xb2\xed\x80\x94\x95\x04\x2d\x79\x7e\xf9\xe9\xe3\x8b\xa4\x2b\x4d\x5a\x59\x85\x4d\x40\x38\x67\x72\x29\x3c\x16\x70\x2f\xfd\x8a\x07\x4d\x2f\xaf\xc0\x1a\x85\x4d\xc9\xb2\x71\x04\xbc\xe3\xce\x1a\xb9\xd1\x5e\x48\xed\x7a\x93\xf7\xcb\xe9\x11\x32\x0d\x71\x65\x07\xeb\xc0\x95\x3d\x39\xf5\xd3\xb6\x2d\xc5\x12\x3f\x18\x73\x57\x57\x7f\x15\x0e\xaf\x67\x23\xa0\x98\x6e\xcf\x49\xbe\x56\x77\x4c\xd3\x5c\x38\x04\x32\x81\x82\x0b\x83\x6e\xe3\x3c\x96\x29\xd5\x27\xea\xf2\xce\xa0\x78\x99\xc6\x31\x4b\x07\xda\x78\xf2\x46\x5f\x8b\xcd\x3b\x63\x4b\xe1\x47\x60\xf3\x6c\xba\x3d\x29\xa1\x43\x00\x69\x51\x12\xf8\x8b\xf0\xc2\x1b\x06\x18\x22\xc4\x01\x85\x20\x2a\xd2\x35\xc1\xc3\xd4\x87\xfc\x73\x8e\x20\x97\xda\x58\x2c\x40\x72\x89\x19\x1f\x2a\x25\x73\xe9\x13\xaa\x84\x26\xcc\xea\xaa\x32\xd6\x3b\x70\xf5\xdc\x79\xe9\x6b\xae\x2c\xf2\xaa\x3f\xfd\x94\x05\x02\xff\xfc\x33\x17\x4c\x7e\xfa\x29\xfb\xfe\x5b\x17\x4b\xdd\x3f\xff\xdc\x8a\x2d\x13\xfb\x7a\xc6\x83\xee\xea\x39\x5a\x8d\x1e\x5d\x2a\xb0\x9c\x92\x0e\x57\x98\x93\x0d\x55\x9b\x20\xc9\x91\x71\x09\x4e\x2e\x97\xb3\xdf\x97\x7a\x0f\x7f\x8d\x85\x7a\x5e\x6b\x5f\xc3\xf3\x50\x57\xe4\xea\xd9\x8b\x50\xe4\xa6\x27\xbb\x9b\x82\xd8\xf1\xfc\x95\xc8\xef\xc4\x12\x1d\x69\x4f\x51\xe7\xe1\x45\x3b\xf3\xcc\xa2\x42\x42\x84\xd0\x32\xb5\x87\x35\xad\x21\xa0\xb2\xb8\x90\x0f\x17\x70\x9e\x9d\xbf\xce\x5e\x9e\xd2\xbf\xaf\xb2\x7f\x9e\x94\x1b\x3e\x75\xcc\xce\xb9\x86\x70\x9e\x9d\xff\x6b\xf6\x3a\x83\x77\xc6\x02\x3e\x88\xb2\x52\x78\x0a\x1d\x58\x5b\x5e\x11\x1f\xcd\x02\x72\x51\x89\x89\x28\xe5\xa4\x43\xe4\xc9\x5f\xb6\x28\x3c\xf9\x73\xa0\x10\xea\x82\x78\xee\x90\x8b\xc1\x41\x1e\x88\x89\xb1\xce\x53\x0a\x9f\xaf\x22\x8a\xde\xa3\xd5\xed\xea\x81\x6c\x93\xbf\x9c\x67\xe7\xdf\x66\x2f\x27\x7f\xe6\x99\xa2\x39\x3a\xe3\xe9\x24\x6e\xc2\x2e\x91\x15\xa5\x4b\xc9\x30\xa9\x21\x72\x64\x41\x64\x76\x06\x33\x44\x10\xca\x75\xeb\xda\x46\x09\xbd\xcc\x8c\x5d\x9e\x55\x77\xcb\x33\x8f\x0f\xfe\x2c\x99\x87\xb3\xfd\x71\xd2\x78\x8d\xba\xb6\xcb\xc7\x19\x87\x6b\xbb\x6c\x54\xe9\xc7\x19\x5c\xdb\xa5\xd0\xf2\x4b\x28\xc2\x4c\xdf\x0e\xda\x02\xb9\xf8\x45\x4c\x41\x34\xd5\xb7\x34\x6c\x8c\x15\xe8\x8c\x4f\x50\xd3\x16\x24\x2b\x8d\xd9\x6f\x92\x85\x0c\xbe\x0b\x42\x76\x01\xe5\x37\xd9\x83\x22\xf6\x3d\x89\xbe\xc3\xe1\xdf\x80\xbb\xfb\xe5\x4c\xbf\x35\xc6\x7f\x36\xaa\x1e\x05\xc0\xa7\x66\x30\xa0\xce\x45\xe5\x6a\x8e\xcd\x43\xb5\xd1\xe8\x85\x5c\xd6\x36\x9e\xa6\x55\xad\x01\xe3\x24\xc0\x18\x0f\x6b\x9e\xfa\xc4\x64\xaa\xc0\xb5\xcc\xf1\xe3\xc1\x40\xb9\x07\xec\x5b\x9e\x70\x38\xe2\x1a\x11\x05\xa2\xce\xed\xa6\xf2\x87\x02\xbb\xde\xb6\xdf\xa5\xf1\x24\x3f\xf7\x2b\xf4\x2b\x0c\x24\x08\xd8\x77\xca\xc1\xcd\xca\x64\xba\xb4\x19\x90\xf0\x16\xcc\xb9\x31\x0a\xc5\x6e\xd5\xbf\x07\xa7\x34\xfa\x7b\xdc\x3c\x0e\xd6\x30\x27\xc9\xfb\xf7\x57\x33\xca\x00\x93\x66\x7a\x93\x96\xee\x60\xc1\x07\x6e\x8c\x83\x64\xfc\x44\x33\x8b\x02\x13\x4b\xf9\x6c\x06\xd3\x45\x9f\x18\x94\x5d\x06\x2b\x26\x39\xdf\x34\xa5\xf4\x1e\x8b\xbe\x85\x26\x1b\x41\xeb\x24\x9f\x44\xc9\x57\x70\x56\xf4\xb4\xac\x9d\x07\xa1\x42\xaf\x01\x3e\x48\x17\x56\x9c\x23\xa5\x9d\xe8\x9c\x9c\x2b\x4c\x8e\xa6\xed\x50\x39\x46\xd8\x83\xfc\x97\x66\xe8\xc0\x60\x87\x9c\xd3\xeb\x9b\x36\x0a\xaa\xcb\x39\x5a\xae\x61\xd3\xd3\x78\x58\x89\x45\xa3\x11\x85\x74\x77\x19\x7c\x34\x3e\x64\xce\xb9\x20\xd0\xbd\x01\xa1\x14\x83\xe5\x86\xa1\x0e\xfe\x8b\x3b\x08\xfe\xe5\x9b\x23\xb8\x75\xbb\x0c\x76\x7f\x4e\x7e\x19\xab\x4e\x33\xf9\xa5\x7b\x9c\x43\x33\xe1\xb9\xd4\xf0\x5e\x36\xc1\xb5\xf3\xc6\x92\x09\x0f\xaa\x9a\xc1\x15\x71\x6b\x8e\xb0\x64\x6b\x69\x43\x61\xbe\x0d\x99\x9c\x16\x95\x5b\x91\x75\xa7\xb5\x8c\x85\x6f\xe1\x39\x97\x63\x70\x1d\x32\xf0\x38\xef\xc5\xd7\x52\xa2\x0c\x0d\x23\x17\xf0\xed\x57\x11\xcb\x0f\x3a\x91\x1d\x62\xed\xf3\x1f\x1d\x1b\xf0\x1c\xb3\x65\x06\xcb\xea\xd5\x29\x48\x73\x7e\x0a\xe8\xf3\x2c\xcb\x0e\xe0\x79\x54\x4e\x0f\x67\x9f\x13\x26\xf1\x53\xd2\x32\xe7\x56\xdf\xe3\x66\xd8\xea\xf6\x45\x64\xf6\xb7\x38\x78\x5f\x2e\xe0\xdc\x2a\xd9\x15\xe1\xbd\x08\x55\xb7\x7e\x76\xf5\x59\x28\x59\x74\x53\x7f\x2c\x2b\xbf\x49\x9d\x06\xcf\x0b\xc3\xc1\x00\x59\xa5\xd9\xec\x6f\xb4\x98\xa3\xe8\x33\x1c\xeb\xa4\x47\xbc\x27\x47\x83\xd1\xbe\xc0\x73\x36\x63\x1d\x1b\xd3\x1d\xf9\xe2\x29\x4e\x33\x46\xb7\x1f\x59\xc7\xc7\xc4\x15\x9f\xbb\x13\x12\x71\x52\x8c\xbc\xdf\x9b\x37\x51\x61\x2c\xac\x65\x24\x54\x32\x17\x4a\x6d\x40\x80\xc6\xfb\x66\xbe\x74\x31\x1e\x29\xe2\xe9\xa9\x07\x0a\xa1\x7d\x3a\x44\xe3\x1a\x91\x51\xca\xdc\x13\x15\x57\xa2\xaa\x50\xbb\x0b\x38\x7f\x01\x97\xbc\xce\xf6\xc6\xa4\xe4\xbd\x8d\x5f\xbd\x80\xeb\x4e\xc1\xa6\x12\x56\x94\x18\xaa\x86\x3a\x64\x34\xd2\x85\xc6\x8f\xb4\x04\x81\xb4\x12\x7a\x49\xb3\x5f\xa7\x7d\x62\x3c\x57\x48\x97\x9b\x35\x5a\x2c\xb2\xfd\xc1\xd2\x71\xa5\x3e\xac\xad\x07\x44\x3a\x4a\xc0\x1b\x63\xd4\x5b\x73\xbf\xa7\x3a\xbb\x13\x6f\x89\xd2\xd4\x3a\xb4\x1a\xc8\x32\x34\x15\x38\xcc\x8d\x2e\xdc\x29\x88\x85\x67\xdf\xe7\x72\xa1\x08\x7d\x41\xc9\x95\xf4\x1b\xc8\x0d\x45\x85\x14\x19\xcd\x71\x41\x24\x13\xda\xb0\x9f\xdc\x1d\x29\x34\x38\x2f\xac\x67\x77\xa9\x4d\xca\xbf\x28\x11\x8c\x05\xd5\xf9\x86\x24\x9e\xf6\x49\xf2\x1b\xc6\x98\x05\xbc\x7e\xf9\x32\x41\x13\x1d\xec\x00\x31\xf6\x4a\x72\x6c\x54\xdb\x47\x04\xde\xe7\x02\xce\x8f\xd3\xa7\x8c\xbd\x71\xc1\x86\x07\x61\xe3\xe3\xe8\x5d\x63\xd6\xe1\xeb\xeb\x57\x3b\x6f\x1b\x23\xbd\xbb\xe9\x21\x76\xc7\xf6\xbe\xaf\x44\x22\x76\x14\xfe\x7e\x48\x3c\x60\x91\x72\x0f\x77\x63\x94\xcc\xf7\x84\x70\x5b\x4d\x90\xbb\x53\xe2\x88\x39\x3a\x58\x99\x7b\x28\x6b\xe5\x65\xa5\x3a\x05\x2b\x8e\x2b\x7a\xa1\x55\x53\x8f\x9f\xbd\x7f\x6c\x77\x45\xd3\xbe\xf0\x56\xba\xd0\x32\xb5\xd3\xa0\xb7\x17\xf2\xe9\xbe\x79\x9c\x54\xc5\x0c\x82\x63\xa3\xf6\x8d\x59\xc0\xb5\x9e\xbc\xc5\x92\x22\xbd\x66\x32\xc7\x7d\xb3\xca\xf8\xf6\xd1\x53\x8f\x69\x8c\x0e\x8b\x5f\x2a\x65\x72\x4e\x5f\x66\xde\x0a\x8f\xcb\x83\x61\x74\x94\xae\xca\x4a\x63\xa5\x97\x5f\xb8\x65\x77\x68\x70\x07\xfd\xeb\xc1\xdd\x40\xea\x42\xe6\x9c\x50\x11\xfb\x42\x2c\x48\x63\x76\x38\xe8\x0d\x2c\x6a\xb5\x20\x3e\xb6\xa4\xc9\x45\x25\x72\xe9\x37\xc3\x51\x04\xea\xba\x1c\x46\x69\x32\x0a\x97\x11\x11\x73\xa2\xe7\x5f\x85\xc3\x37\x11\xa8\x11\x94\x7c\xf9\x1b\xc4\xbb\x09\xb4\x1b\xb4\x39\x6a\x2f\x96\x78\x39\x37\x6b\x7c\x24\xa4\xe7\x2f\x7f\x0b\x58\x5d\x65\xfc\x93\x44\x52\x99\x7b\x74\x7e\x52\x59\x79\xa0\x5e\xdf\x0f\xdc\xf6\x6e\x35\x42\x1e\x1d\x88\xdc\x1a\xe7\xfa\x9a\x08\xa1\x85\xff\xc9\x72\x38\x0a\x81\x49\x23\xf0\x13\x53\x79\x59\x7e\x9d\xd4\x1e\x09\x83\x29\x5e\xb1\xb2\x18\xb2\x21\xe3\x7b\xa6\xae\xd3\x42\x1c\xde\xa6\x93\xc5\xb4\x7c\xff\x88\x82\x13\x87\xa6\xcf\x29\x59\xea\xed\x68\x8d\xcb\xbf\x43\xa6\x9e\x63\xc8\x3c\xa4\xea\x69\xb3\xb8\xc0\xd7\xd8\xd4\x71\x07\x9b\xc7\x8b\x6f\x5d\xda\x1f\x34\x29\xc7\x0e\xd7\x26\xbd\xcd\x0e\xe5\x6f\x4f\x6d\x3a\x38\x30\x39\xf5\x8c\x4e\xdf\x1e\xf1\xd9\x37\xcd\xc0\xa6\x22\x1a\xce\xfd\xb9\x2b\xaf\x3d\x88\x6a\xef\x16\x8c\x22\x52\xbb\xff\x07\xe9\xf6\x1c\x76\x0c\xc0\xf0\x81\xab\x27\x36\x0a\x5d\x38\xdb\x96\x79\x2a\xcc\x3a\x82\x6b\xbb\x11\xc2\xa5\xbd\xda\x6a\x7e\xea\x97\x85\x5b\x6e\xdc\x96\xa8\x8a\x50\xa5\xe9\x94\xc3\xe3\x18\x5e\x55\x50\x98\x8a\x1a\x4c\xa8\x04\x68\x53\x60\xa4\xaa\x83\xdc\x58\x8b\xae\x32\x3a\xb5\x0f\x88\x06\x02\xb2\x28\xcf\xdc\x2e\x40\xbb\xf2\xf9\x4b\xf7\xc0\xba\x7a\xae\xd1\x1f\x6b\xe9\x9d\x85\x51\xdb\xed\xa1\x61\x72\xbf\x36\xba\x7b\xb8\x3b\x08\xf2\x1f\xa0\xdd\xf2\x98\x21\x39\xd0\x43\xf3\x84\x0e\x9a\xa3\xa6\xe6\x48\xf7\xcc\x1f\xab\x77\xe6\x48\x2b\xc5\xaf\xd6\x37\x33\xae\x6b\xe6\x78\xcf\xcc\xaf\xdb\x31\x33\xb2\x83\x64\x4c\xb7\xcc\xef\xd3\x2b\x33\xaa\x53\x66\x74\x9f\xcc\x98\x2e\x99\xe3\x3d\x32\x47\x3a\x64\x8e\xf6\xc7\x8c\xe8\x8e\x39\x06\xe8\x70\x67\xcc\xe3\xfb\x62\x8e\x50\xef\x20\xb4\x43\x70\xee\x27\xe2\x64\xf7\xb2\xc6\xd6\xfb\xfe\xbd\xc4\xe6\x69\xef\x2a\xe4\x41\xb0\xc2\x8d\xc3\xf1\x17\x91\x78\x78\xef\x2a\x92\x99\x3b\xb4\xeb\xaf\xbf\x8b\xe4\x96\xb3\x3d\xb0\xec\xc2\x33\x7b\x1f\x81\x88\x17\xd6\xf8\xff\xb1\x9a\x6c\xd1\xd7\xb6\x63\x55\x45\xed\x4d\x2a\xcf\x75\xaf\x24\xf6\x89\xb2\x97\x95\x39\x45\x2c\x9d\xbb\xd1\x83\x00\xbd\x69\x06\x36\x64\xc9\x6b\x6b\xf9\x56\x1b\x5a\x3e\xae\x6c\x28\x13\x2d\x7d\x87\x3a\x8f\x88\x75\xf6\xef\xda\x6c\xca\x17\x1d\x69\xc7\xf6\xea\x23\xbc\x89\xb7\x45\x2e\x6f\xa6\xad\x87\x8a\xad\x3b\xe1\xc6\x95\x1f\x38\x63\x3e\x66\xae\x95\x70\xfe\xd6\x0a\xb6\x49\xe1\x02\xf8\x28\x05\xfb\x20\x9c\xe7\xa2\x6b\x3a\xcd\x4b\x97\x5f\x9a\xa5\xb0\x08\x3d\xbc\x64\x21\x23\x73\xf9\x66\x0c\xd7\x5a\x63\x44\xda\x1e\xb7\x72\x6d\x9c\x3b\x28\x74\x81\x56\x71\x00\xd3\xae\xda\x94\xab\xa7\x8b\xa6\xf2\xae\x8d\x87\x3b\x6d\xee\x35\x1f\x51\x6a\xa8\x5d\xba\xdd\xc8\x60\x35\x0b\x12\xc9\x42\xe4\x1b\x57\x61\x79\xcb\x73\xac\xbc\x98\x0f\x75\x82\xb5\xa5\x82\x42\x78\x9c\xd0\x8a\x4f\x0d\x5a\x4a\x74\x4e\x2c\xc7\x51\xf5\x12\x56\x75\x29\x34\x5f\xd7\xe6\x23\xc7\x38\x39\x25\xfb\x84\x61\x81\x5e\x48\xe5\x40\xcc\x4d\x1d\x4e\x7d\x5b\x9a\xf7\x03\xfd\x10\x1c\xf2\x29\xcd\x10\x96\x23\x8e\xae\x84\x1b\x2a\x1c\xee\xa9\xd5\x86\xe1\xcd\x31\x6a\xc3\xc1\x67\x8e\x05\xad\x03\x2a\x05\xa1\x9d\x1b\xa0\x34\xb9\x0d\x8d\x6f\xa6\x0c\x7d\xbe\x32\x26\xdc\x3a\xe3\xfa\x7c\x38\x88\x8f\x97\x50\x19\x45\x49\x69\x89\x76\x94\xbf\x50\x80\x06\xcb\x5a\x58\xa1\x3d\x52\x9a\x76\x33\xdd\xa1\x46\xbc\x84\xfa\x75\x14\x71\xb8\x46\x7b\xa0\x14\xd5\xcf\x3c\xe2\xe0\x94\x66\xb9\x5e\x8f\x59\xae\x84\x73\x6d\x5e\x67\x16\xf0\x29\xd0\x2f\x37\x05\x9e\x82\x0b\x61\x66\xed\x28\x8c\xa5\x20\x23\x58\x9b\x70\xc9\x50\x96\x25\x16\x94\x91\xaa\x4d\xd0\x19\xca\xb9\x42\x13\x52\x63\xb5\xa4\xaf\xc3\xca\xf4\x46\xe4\xbe\x0d\x61\x53\x8f\x59\x03\x5f\x20\xd2\xd5\x0f\xb3\xdb\x74\xa5\xcd\x50\xea\xc1\x5a\x14\xcc\xf4\xbf\xbf\x13\xca\x0d\xaa\xcb\x71\xb2\x0d\xf8\x84\x7d\x44\x0b\xd6\x22\x9a\xd9\x46\x86\x4e\x53\x22\x74\x6b\x6b\x3c\x05\x06\xe7\x14\x7e\xd0\x6c\x04\x9e\x0c\xd7\xa1\x73\xe3\xdd\x53\x63\xb3\xe8\x58\xa5\xae\x04\xc7\x1b\x7c\x0b\x63\xb2\xd8\xdb\xc6\x81\x7e\xf7\x8e\xb3\xd0\x1b\xc8\x9a\xd9\x19\x17\x90\xba\xc1\x21\x09\xb2\xf3\xc4\xb8\x58\xb6\x6b\xee\x86\x83\x92\x77\x98\x2e\xa6\x2a\x3c\x85\x79\x4d\x82\x9c\x8b\xda\x21\x08\x3b\x97\xde\x0a\xbb\xe9\x78\xba\x4e\x55\x69\x51\x2b\x78\xee\x10\x21\xa3\x6c\x3e\x7d\x98\xa0\x1d\xfa\x22\x74\x78\xa4\xfb\xac\xde\x40\x81\x94\x11\x2b\x99\xb3\x99\x95\x65\x65\xac\x17\x7a\xb0\x01\xe6\x58\x0b\xd3\x81\xa8\x72\xd2\xff\x22\x45\xff\x95\xdf\x5f\x2b\x7a\x52\x54\x06\xb0\x10\x52\xd5\x16\xaf\x86\x8c\x71\x8f\xd5\x7f\x7a\xd7\x1b\xdd\x9c\xc9\xc4\x9b\x9e\x7c\xf7\x7d\x8d\x7c\xf1\x3d\xdc\xe6\xb4\x31\xd7\xf7\x68\x4b\x49\xee\xb8\xb2\x66\xae\xb0\xe4\x4f\x12\xe8\x5c\xaa\xe4\x9a\x52\x53\x21\x29\x24\xaf\x1a\xbb\x93\x41\x84\x14\x62\x8d\x76\x4e\x26\x2f\x86\x41\xae\x96\xec\xa4\xd8\xa0\x2a\xb3\x5c\xf2\xf1\xa4\x2e\xa2\x9b\x20\x91\xa9\xcb\x2a\x58\xfe\xff\xd2\x5d\x73\x17\x3d\x6b\xb4\x78\x04\x38\xdb\xe4\x68\x7e\xd7\x18\x72\xfe\x58\x83\x14\x9d\x76\x1c\x58\x88\x3c\xd5\x26\xf9\x90\xff\xa1\xc2\xdc\x87\x5c\x71\x4e\x39\xce\x03\x59\xda\xda\x9b\x52\xf8\x78\xe0\x6d\xd6\x68\x83\xd3\x7d\xce\x82\x9a\xa2\x25\x53\x7b\xb1\x44\x92\x30\x92\x57\xa9\x9d\x47\x51\x34\x75\xeb\x78\xff\xd6\x94\xe8\xb9\x5f\x93\x40\xaf\x75\x21\x4a\xd4\x9e\x97\xbd\xb7\x46\x2f\xdb\x06\xda\x48\xba\x67\x2e\x1c\x81\xb7\x1e\xa6\xdb\xd8\xb6\xd8\x6a\x2e\x4a\xed\xaf\xdc\x01\xaa\x6b\xa1\xc2\x37\x20\xe2\xc7\x01\x40\xba\x46\x3e\x9b\x76\xc1\x60\x78\x12\x23\x23\x99\x9a\xcb\xbe\x52\x87\x7e\x86\xdc\x94\x73\xa9\x43\xc9\x88\x6b\x49\xe8\xc9\x3b\xbb\x24\x1f\x04\xe3\x69\x52\xef\x86\x98\xb5\x76\xa1\x95\xb8\x8d\x6c\xbb\xb0\xa6\x76\x3c\x2e\xb3\x85\x76\xa9\x0e\x63\xa4\x77\xa8\x16\x30\x47\x8e\x8d\xac\x4c\xe4\x2f\xa5\x6b\x0e\xe7\x0a\x96\x83\x4b\xbd\x89\xac\x26\x21\xed\x72\xda\xe4\x79\x6d\xa1\xa8\x6d\x12\xc8\x46\x40\x1b\x02\x5e\x75\xbd\xcc\x1c\xe3\x85\x7c\xe1\x82\xc8\x37\x9f\xd4\x48\x92\x1c\xbf\x1b\x21\x74\x71\x16\x65\x94\x22\x2c\xbd\x85\xdb\x33\x47\xd2\x50\xd5\x3e\xfb\xd3\x63\x62\xf7\xa8\xb5\x9f\x06\x82\x90\xbd\x4a\x1b\x5d\xe8\x6f\xa2\xb3\xae\xce\x73\xa9\xf3\x74\xe8\xdf\x53\xd7\xb6\x1a\xea\xd1\x56\x16\xc3\x97\x4c\xfe\xa1\xa7\xff\xd0\xd3\xff\x7f\x7a\xba\xfd\x9d\xa3\x11\xad\x3b\x83\x77\x64\x1e\xb3\x2f\xb7\x9a\x1e\xd9\x8c\x3f\x97\xc5\x47\x3a\xb6\xee\xa4\x85\xcd\xb9\x47\x93\x4e\xb3\x90\x89\x62\x4f\x66\x70\xa8\xc3\x37\x7d\x34\xeb\x28\x14\x61\x58\x3a\x5b\x2a\x8d\xe3\x0f\x16\xa1\xf6\xa4\x99\xa9\xf4\xd2\x36\xa6\x6e\x7d\x8c\xab\xfd\x1d\xee\x71\x19\x3e\xbb\xde\x1b\x38\xed\x3c\x0c\x70\x5c\x30\xb1\xc2\x83\xd0\x36\xda\x7d\x52\xcf\x9b\xc8\x34\x61\x1d\xa3\x7b\xf8\xe9\xe7\x93\x36\xd0\x0f\x49\x36\x16\x1f\xdb\x8f\xbb\x85\x4f\xb7\xfd\x29\x08\x57\xfa\x1a\x1b\xff\xd9\x29\xd3\xc0\x7f\xfe\xf7\x49\xd8\x18\x8b\xcf\xe9\x33\x6b\xf4\xf0\xff\x02\x00\x00\xff\xff\xff\x9e\x47\x96\x69\x4f\x00\x00") + +func clusterApiInfrastructureClusterXK8sIo_awsmachinepoolsYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiInfrastructureClusterXK8sIo_awsmachinepoolsYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml", + ) +} + +func clusterApiInfrastructureClusterXK8sIo_awsmachinepoolsYaml() (*asset, error) { + bytes, err := clusterApiInfrastructureClusterXK8sIo_awsmachinepoolsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml", size: 20329, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa5, 0xf8, 0xc9, 0x8a, 0xfb, 0x3f, 0x35, 0xc, 0xeb, 0xe0, 0x90, 0x16, 0x28, 0x4, 0xa3, 0x7c, 0x63, 0xe3, 0x67, 0x12, 0x3f, 0xbc, 0xfd, 0xaa, 0x63, 0xb2, 0xbe, 0x67, 0x9d, 0xcf, 0x40, 0xae}} + return a, nil +} + +var _clusterApiInfrastructureClusterXK8sIo_awsmachinesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x6d\x73\x1b\x37\x92\xf0\x77\xfd\x8a\xae\x3c\x1f\x6c\x6f\x91\xa3\xb5\xbd\xcf\x5d\x4e\x55\x5b\x7b\x8a\x6c\x27\xac\x44\xb6\xca\x54\x9c\xaa\xdd\x6c\x5d\x81\x33\x4d\x12\x2b\x0c\x30\x0b\x60\x24\xd1\xa9\xfc\xf7\xab\x6e\x00\x33\x43\x72\x86\xa4\x14\x3b\xd9\xdc\x92\x1f\x76\x2d\x0c\x5e\x1a\x8d\x7e\x47\x37\x22\x2a\xf9\x01\xad\x93\x46\x9f\x81\xa8\x24\xde\x7b\xd4\xf4\x97\xcb\x6e\xbe\x74\x99\x34\xa7\xb7\xcf\x4f\x6e\xa4\x2e\xce\xe0\xa2\x76\xde\x94\xef\xd1\x99\xda\xe6\xf8\x0a\xe7\x52\x4b\x2f\x8d\x3e\x29\xd1\x8b\x42\x78\x71\x76\x02\xa0\xc4\x0c\x95\xa3\x7f\x01\xe4\xaa\x76\x1e\x6d\x76\x3f\x6e\xa6\x12\xaa\x5a\x8a\x3f\x9d\x41\xfc\xd7\xcb\x13\x00\xa1\xb5\xf1\x82\x26\x4a\xc3\x8c\xf6\xd6\x28\x85\x76\xbc\x40\x9d\xdd\xd4\x33\x9c\xd5\x52\x15\x68\x79\x8e\x04\xec\xed\x1f\xb3\x17\xd9\x7f\x9d\x00\xe4\x16\x79\xf8\xb5\x2c\xd1\x79\x51\x56\x67\xa0\x6b\xa5\x4e\x00\xb4\x28\xf1\x0c\xc4\x9d\x2b\x45\xbe\x94\x1a\x5d\x26\xf5\xdc\x0a\xe7\x6d\x9d\xfb\xda\x62\xb6\x09\xe1\x89\xab\x30\x27\x28\x16\xd6\xd4\xd5\x19\xec\xeb\x1e\x96\x48\x70\x0b\x8f\x0b\x63\x65\xfa\x7b\x9c\x10\x30\x16\x95\xe4\x96\x80\xc7\xf3\x1f\xa6\x97\x01\x1e\x6e\x54\xd2\xf9\x6f\x37\x3e\x7c\x27\x9d\xe7\x8f\x95\xaa\xad\x50\x6b\x7b\xe0\x76\x27\xf5\xa2\x56\xc2\x76\xbf\x9c\x00\xb8\xdc\x54\x78\x06\x6f\x09\xa8\x4a\xe4\x58\x9c\x00\x44\x84\x31\x50\xe3\x88\x92\x88\xfe\x17\x61\xae\x7c\x89\xa5\x08\x30\x03\x98\x0a\xf5\xf9\xd5\xe4\xc3\xcb\xe9\x5a\x33\x40\x81\x2e\xb7\xb2\xf2\x8c\xfc\x16\x54\x90\x0e\xfc\x12\x21\x74\x87\xb9\xb1\xfc\x67\x07\x60\x38\xbf\x9a\x34\xb3\x54\xd6\x54\x68\x7d\x83\xa4\xf0\xeb\x10\x61\xa7\x75\x63\xcd\x27\x04\x56\xe8\x05\x05\x51\x1f\x86\x95\xe3\x06\xb1\x88\x3b\x01\x33\x07\xbf\x94\x0e\x2c\x56\x16\x1d\xea\x40\x5d\xd4\x2c\x34\x98\xd9\x3f\x30\xf7\x19\x4c\xd1\xd2\x40\x70\x4b\x53\xab\x82\x88\xee\x16\xad\x07\x8b\xb9\x59\x68\xf9\xb1\x99\xcd\x81\x37\xbc\x8c\x12\x1e\x9d\x07\xa9\x3d\x5a\x2d\x14\xdc\x0a\x55\xe3\x08\x84\x2e\xa0\x14\x2b\xb0\x48\xf3\x42\xad\x3b\x33\x70\x17\x97\xc1\xa5\xb1\x48\xb4\x64\xce\x60\xe9\x7d\xe5\xce\x4e\x4f\x17\xd2\x27\x06\xcb\x4d\x59\xd6\x5a\xfa\xd5\x29\x53\xbe\x9c\xd5\xde\x58\x77\x5a\xe0\x2d\xaa\x53\x27\x17\x63\x61\xf3\xa5\xf4\xc8\x34\x78\x2a\x2a\x39\x66\x60\x35\xb3\x4c\x56\x16\xff\xcf\x46\x96\x74\x4f\xd6\x90\xe7\x57\x44\x0b\xce\x5b\xa9\x17\x9d\x0f\x4c\x84\x3b\xb0\x4c\xb4\x48\x87\x2a\xe2\xd0\xb0\x8b\x16\x99\xd4\x44\xf8\x78\xff\x7a\x7a\x0d\x69\xe9\x80\xf0\x80\xdb\xb6\xab\x6b\xd1\x4c\x28\x92\x7a\x8e\x36\xf4\x9c\x5b\x53\xf2\x2c\xa8\x8b\xca\x48\xed\xf9\x8f\x5c\x49\xd4\x1e\x5c\x3d\x2b\xa5\xa7\xf3\xfb\x67\x8d\xce\xd3\x09\x64\x70\xc1\x72\x02\x66\x08\x75\x55\x08\x8f\x45\x06\x13\x0d\x17\xa2\x44\x75\x21\x1c\x7e\x76\x24\x13\x36\xdd\x98\x90\x77\x18\x9a\xbb\x42\x71\xb3\x73\xc0\x53\xe7\x43\x12\x3b\x03\x67\xd2\x72\xdb\xb4\xc2\x7c\x8d\xf8\x0b\x74\xd2\x12\xb1\x7a\xe1\x91\x48\x7c\x43\xba\xec\xe6\x3b\xe6\xbd\xa2\x60\x31\x2e\xd4\x14\xf3\xda\x4a\xbf\xfa\x9a\x84\xdf\x56\xbf\x4d\x98\x06\x86\x31\xe9\x68\x10\xd6\x8a\x15\xc1\x63\x71\x8e\x16\x75\x8e\xcc\x48\x2e\xf6\x0d\x02\x96\xb6\x20\x7c\x62\xc1\x19\x82\xa8\x2a\x25\xb1\x48\x2c\x27\xb5\xf3\x42\xe7\x98\xc1\xf5\x12\x1d\x6e\x8d\xbe\x4b\xe3\x1c\x12\x63\x36\x5b\xa1\xf1\x42\xaf\xb6\xfa\x07\xc4\x15\x20\x12\xb9\xb1\x78\x06\x45\x44\x00\xc6\xd2\x14\x2c\xbb\x72\x5f\x0b\x6f\x6c\xb6\x85\x01\xe9\xb1\xec\x41\xcc\xf6\x71\x25\x2d\xf9\x3e\xed\x3e\x70\x54\x83\x0c\x86\x90\x8f\x5d\xce\x65\x4e\x23\x5a\x56\x9a\xad\x60\xf2\x6a\x04\xe7\xef\xdf\x8e\x08\xa8\xb9\x54\x1e\xad\xcb\xe0\x9d\x56\x2b\x30\x9a\x4f\x39\x76\xa0\xef\x6f\xc2\x77\xe6\x30\x42\x45\x98\x93\xf8\x63\xca\xff\x5c\x11\xc3\x96\xc4\x1c\x7e\x49\xf2\x4f\x23\xdc\x49\xa5\x68\xbd\x5a\x05\xb4\x11\x8b\xcb\x22\x48\x49\xb4\xb6\x6f\xe7\xbb\x28\x28\xd2\x91\xd5\xfd\x1f\x36\xb1\x43\x60\xcf\x9b\xed\x0e\x0c\x19\xe0\xaa\xf6\x17\xd1\x72\xd0\x92\x4f\x12\x8e\x82\x58\x43\x4f\x00\xdc\xe0\xea\x34\x88\xb6\x4a\x48\xeb\xa0\x76\x81\xf0\x64\x41\x5c\x3f\x5f\xf1\x71\xc5\x23\xb9\x5e\xe2\x0a\x84\x6d\x09\x54\xe4\xb9\xb1\x05\x8b\xc2\x40\xaa\xb6\x56\xd8\x12\xd8\x6c\xc5\x8d\x74\xac\xe7\x57\x93\x56\x20\x15\x26\x77\x99\xb8\x73\x99\x28\xc5\x47\xa3\xb3\xdc\x94\xa7\xe7\x3f\x4c\x5f\x5f\xbc\x38\x0d\xea\xe5\xf4\x7b\x87\xf6\xeb\x5a\x16\x78\xfa\x3d\xe9\xf8\xff\x09\x90\x4b\xbd\xc8\x96\xbe\x54\x4f\x06\x76\x3b\x48\x97\x3d\xc8\x08\x33\x06\x54\x04\x24\xf6\x6c\x5d\xaf\x91\xe4\xe0\xc4\xfb\x68\x22\xfc\xd8\xe6\xd8\xf1\x7d\x03\x40\xb2\x5e\x82\x0e\xc7\x08\x60\x96\x80\x66\x6b\x8b\x0f\x22\x17\x0e\xc7\x8e\x4c\x55\x2f\x6f\xb1\x8f\x5e\xdb\xdf\x5e\x5a\x0a\xbf\xa0\xad\x1f\x00\xe8\x07\x1e\x00\x52\xe7\xaa\x2e\xd0\x05\xde\xb4\x81\xd7\x22\x66\x93\x05\xf0\xa6\xfb\xe7\x83\x37\xb0\xe7\x78\x1f\xb4\xcb\xd4\x91\x05\xf4\x60\x3f\x52\xbd\xa4\x57\x86\x17\x0d\xa6\xe4\x8e\xcf\x61\xaf\x83\x1d\x06\x34\xe1\x43\x00\x95\x83\xe0\xad\x1d\xd3\xe4\xd5\x2f\x97\x37\x3b\xa1\x1d\x86\xb3\xd5\xad\xd7\x62\xd1\x73\x82\xed\xf7\xab\x9d\x9c\xb4\x13\xba\x01\xb5\x4c\x2b\x46\x65\x6c\xaa\xd0\x94\x44\x9f\xa7\x4f\xa4\x81\x8a\x22\xa8\xca\x46\xd3\x8e\x36\xd5\x28\x31\xa1\x21\x63\x43\x14\x45\x10\x6c\x05\xce\x05\x29\x8e\x8e\x8c\xab\xac\xb9\x95\xe4\x9f\xc1\x64\x0e\x33\xe3\x97\xe9\xcb\x45\xd4\xb0\x64\x24\xc7\xa6\xe4\x36\x04\x3d\x15\xe6\x70\xc4\xf1\x5e\x2c\x98\xa4\xe0\x4e\xfa\x25\x14\x72\xce\xaa\xd2\x47\x3a\x1a\x6d\x8c\x7f\xe2\xa2\x5d\xea\xc5\x0d\x3a\xa8\x2c\xe6\x58\x90\x66\xdd\xe6\xa4\x1d\x67\x27\x4a\xb9\xcf\xcc\xb9\x9c\x24\x0f\x67\x4d\x79\x33\x34\x97\x93\x60\xc8\xde\x2d\x65\xbe\xa4\x56\x76\x45\x91\x3f\x96\xc9\x3d\x4a\x36\xcc\xd6\x3a\xbb\x85\xe7\xa0\x3a\x7d\xb0\x32\xdd\x43\xda\x3b\x15\xe9\xbf\x93\x1a\xdd\x29\x65\x3f\x93\x0a\x3d\x44\x81\xee\x53\x9f\x9f\x53\x79\x1e\xa4\x54\xf6\x2b\xce\xdf\x42\x6d\x1e\xa0\x34\x0f\x54\x99\xfb\x15\xe6\x3e\x75\xb9\x53\x59\xee\x51\x95\x7b\x15\xe5\x6e\xf0\x86\x94\xe4\x43\x55\xe4\x4e\x5c\xed\x12\xb1\xb7\x42\x2a\x31\x93\x4a\xfa\xd5\x5f\x8d\xee\xa1\xe4\x75\x81\xb6\xd1\x1d\x38\x8e\xd3\xba\x90\x51\x1c\x74\x67\x85\x8f\xd4\xcf\x1b\xe2\xc1\x18\x7f\x92\xae\xe3\x3b\x4e\xe6\x50\xd6\xca\xcb\x4a\x21\xb8\x7a\xa6\xd1\x07\x52\x2a\x85\xcf\x97\x58\xb4\x21\xab\xcd\x39\x47\x91\x8b\xac\xf3\x4c\xa4\x16\x7d\x6d\x35\x41\x54\xc9\xfc\x06\x8b\x21\x55\xd3\x8b\xa4\x5c\x99\xba\x98\x68\xe9\xf7\x20\xe0\x22\xf5\x6b\xdc\xfc\xa0\xbd\x09\x0d\x24\xdc\x1a\xe7\x78\x66\x8c\x77\xde\x8a\xaa\x22\xf9\xe9\x56\x8e\xe8\x1d\xee\x96\x68\xb1\x33\x89\x0c\x12\xf9\xa1\xda\x07\xb5\x98\x29\x64\xcf\x9e\xfe\xd7\xa2\x77\x97\x42\x8b\x05\xda\x03\xa8\x69\x78\xf0\x88\xe0\xd3\xac\x3a\x68\x17\xb6\x8e\xbe\x28\x9d\x1c\x1d\x6b\xec\x0d\xb1\x3b\x75\x42\xed\x6a\x8b\xd4\xc3\x16\xc2\x0b\xa8\xac\xbc\x15\xf9\x2a\x83\xf3\x80\xd2\xb1\xa4\x6d\x12\x32\x96\xc6\xdc\x80\x5b\xa2\x52\x10\x80\xe1\x93\xb2\x58\xa1\x2e\x02\xda\x0a\x73\xa7\x95\x11\xc1\x16\x69\x66\x64\x15\xbe\xb9\x32\x59\x2c\xad\x75\xa6\xc8\xec\x51\x18\x55\xbb\xe3\xbe\xfd\xb2\x27\x50\xc0\xcc\x18\x85\x42\xf7\xf4\x08\x63\x2f\x4c\xad\x7b\x08\x61\x0b\x93\xd3\xb6\x77\xb2\x42\x74\x5d\xce\xd0\x12\xbb\xba\x08\x72\x52\x3d\x73\x63\x43\x4c\x2d\x37\x65\xc5\xc0\x86\x1e\xfd\xee\xb3\xb1\xa5\xf0\x67\x20\xb5\x7f\xf9\x62\xc7\x4e\xa4\xf6\xb8\x40\x3b\xb8\x93\x2b\x8b\x73\x79\x7f\xf0\x56\x42\xf7\xb4\x97\x2a\xfc\x95\x18\x30\xcc\xc8\xa2\x32\x83\x6b\x66\x62\x07\xce\x1b\x4b\xfb\xc3\xb2\x32\x56\x58\xa9\x56\x21\xe6\x1a\xce\xa3\x08\x04\xd5\x35\xb8\x2c\x2e\xa4\x63\x33\x45\x90\x7e\xd6\xa6\x40\x10\x0b\x41\xf2\x80\xfb\xdd\x19\x7b\xc3\x44\x90\xa2\xf9\x9f\x54\xdc\x49\x51\x4e\xa2\xe4\xb9\xb2\x66\x2e\xd5\x3e\x81\x37\x39\xbf\xdc\x18\x10\xec\x0a\x1d\x15\xb9\xd0\xd4\xa5\x11\x67\xc4\xb7\xdc\x89\xec\x76\xe7\xe4\x42\x6f\x06\xcb\x1e\x22\x94\x64\x29\x16\xf8\x9d\x31\x37\x75\xf5\xce\x2e\xf6\x41\xba\xd6\x39\x9d\x21\xb1\xed\x3b\xbb\x10\x5a\x7e\x0c\x01\xa4\xc9\xab\xae\x2c\xe6\x15\x40\xf1\x28\x90\xf3\x64\x4f\x6b\xe3\x49\x0a\x3c\x48\x82\xa6\x0d\x5e\x53\x97\xdd\xa0\x3e\x99\x74\xfa\x26\x48\x69\x6a\xc2\x68\x83\xca\xc6\x60\xcf\xe0\xf5\xbd\x20\x9e\x39\x83\xf2\x4f\xd9\xbd\x12\x76\x81\xdb\x36\xe2\x0e\xd0\x34\x7a\x22\xab\x89\xf6\x68\xe7\x22\xef\x93\xa9\xeb\x56\xda\x66\xff\x70\xe6\x4a\x3a\xb6\xa9\x5f\xbf\x9d\xb8\x78\xc0\x26\x97\xe4\x51\xb0\x4f\xb4\x1e\x12\x3d\x87\x52\xdc\xcb\xb2\x2e\x69\xc4\x8b\xed\xf0\xdf\xe1\xc1\xcb\x9d\xb4\x5e\x8a\xfb\x09\x0f\x84\x6d\x31\x31\x6c\x79\x24\x8f\x70\xf2\x6a\x0f\x26\xae\x9a\x8e\xe9\x98\x6a\x2d\xff\x59\x63\x32\xa4\x25\xc9\x62\xd7\x6e\x2b\xf9\x04\x2c\xfb\x5b\xc7\xf3\x21\x87\x55\xd5\x33\x25\xf3\xc9\xd5\x3e\x1a\xba\x8a\xfd\x9a\xc5\x59\xbb\xfa\x25\xda\xb5\x93\x48\xe1\xeb\x05\x7a\x10\x71\x72\x98\x5c\x65\x70\xd5\xf8\xa4\xad\x55\xe2\xd0\xf3\x05\x8a\x64\xe9\x34\x37\x4a\x99\x3b\x77\x06\xcf\xa3\xbc\x9b\x4b\x54\x05\xb1\x09\x69\xc8\x17\x19\x44\xff\xf9\x74\xae\xc4\xad\xb1\xcd\xe8\x97\x19\x4c\xd9\x90\x49\xce\xf8\x10\xb1\xf6\xeb\x21\x6b\x8c\x7f\x85\xb7\x32\xc7\xa9\xfc\xb8\x8f\x95\xde\xaf\x75\x4e\x87\xe4\xe8\xdf\xd1\xcd\xa0\xe9\xe0\xd6\xa8\xba\x24\xa4\xc0\x42\x2e\xc4\x6c\xe5\xd1\x3d\xfd\xfa\xab\x67\xdb\x07\xd3\x51\x3c\xff\xf1\xa7\x01\xb0\xfb\x95\x8e\x73\xcb\x6f\x71\xf5\xb6\xd7\x1b\x5a\x57\x35\xd3\x6f\x62\xc7\x46\x69\x76\xbc\x22\xe7\x96\xe4\xb4\x32\x7f\x79\x2f\x82\xe3\xbe\xc6\x5a\x0f\x21\xa6\x60\x50\xee\x03\x28\x1c\xd6\xf6\x15\x00\xc3\x13\x3e\xee\xb4\x5f\x59\x5c\x26\x16\x18\xad\x5d\x5e\xc4\xe1\x6c\x46\xcd\xf0\x51\xc6\xde\x31\xd4\x70\x0c\x35\x84\xdf\x31\xd4\x70\x0c\x35\xfc\x5e\x43\x0d\x43\x57\xeb\x5e\xf8\xda\x1d\x76\xb9\xce\x5d\xd7\xae\xd7\xcd\xcc\xa1\xbd\xfd\xa5\xf7\xeb\x16\x9d\xdb\x6b\x13\x9e\xa7\x7e\x9c\x00\x45\xfe\x4a\x23\x91\x1a\x53\xa3\x31\x08\x8b\x76\xda\xc7\xde\x52\xc7\x5d\xc4\x65\xdb\x45\xa5\x0e\x2a\x9a\x6c\xf9\xe4\x99\x91\x13\xf5\xc4\xa5\x35\x1f\x75\x3b\x1c\x86\x1e\x24\xf3\xae\x3b\xde\xdc\x8e\x25\xe1\x10\xb6\xf2\xbd\xce\xc2\x30\x3a\xd2\x82\x3c\x70\x94\xae\xdb\xbf\x31\xce\x13\x5b\x8d\xe0\xf5\x7d\x48\xff\x99\x5c\x91\x20\x99\xe8\xf4\xd7\x23\x01\xdc\xc5\xcd\xe3\x04\x4b\xef\x37\x9a\xf8\xd3\x5d\x54\xf1\xad\xff\x25\x3a\x27\x16\xfb\xac\xab\x2f\x5e\x77\xfa\x36\x76\x47\xcc\xc0\xe0\x94\x9e\x5b\xe4\x7c\x9e\x90\x65\x61\xa3\x3f\xeb\xd1\x96\x52\x0b\x45\x94\x32\x53\x58\x72\xa6\x95\xce\xa5\x4a\xf9\x44\xcd\x01\xe8\x22\xcc\x1a\x29\x12\x44\x90\xd7\xb7\x68\x67\xc6\x61\xca\x4a\x72\xb5\xf4\x62\xa6\x82\xc5\xa4\xcc\x62\x41\x8d\x34\x76\x59\x97\x42\xd3\x60\x57\x97\x0c\x72\x06\x3f\xea\xae\x79\x1d\xed\xf5\x98\x4d\x44\x80\x33\x99\x5b\x11\x25\x7d\x40\x46\xcc\x4d\x11\x9d\x74\x44\x08\xae\x5a\x68\xb7\x08\x78\x5f\x61\x1e\x23\x72\x33\x52\x28\xf7\xc4\x97\xb5\x37\xc4\x3d\x39\x47\x8d\xcc\x2d\x79\x0b\xb2\x44\x78\xaa\xe4\x0d\xad\x66\xc9\x94\x06\x53\x7b\xb1\x40\xf7\x6c\x04\xb3\xda\x33\x7f\xa3\x28\x40\xea\x42\xe6\xe1\x02\x49\x78\x70\xa6\x44\xbf\x8c\xde\xc2\xbc\xd6\x85\x28\x51\x7b\x9e\xf6\xce\x1a\xbd\x68\x9d\xc2\xf6\x4e\x8c\x8c\x44\x88\x4c\x9b\x1b\x3d\x97\x8b\xda\x36\xd9\x6f\xb1\x31\xee\x66\x14\x6f\xe5\x84\x87\x52\xe8\x5a\xa8\x90\xda\x16\x73\x9e\x42\xdc\x35\x10\x67\xe3\x1e\x3b\x9e\x25\x1d\x64\x44\x53\x93\x84\x23\x35\xa7\x91\x40\x6e\xca\x99\xd4\x21\xa3\x33\xc4\xa9\xd8\x6b\x71\x89\x3e\x08\xc6\x51\x52\xb4\x0d\x32\x6b\xed\xea\xaa\x32\xd6\x77\x7c\xbc\x0e\xac\x71\x4f\x16\x5d\x65\xb4\x93\x74\xf0\x9d\x83\x91\xde\xa1\x9a\xc3\x0c\x09\x5b\xb9\x95\x09\xfd\xa5\x74\x09\x0b\xb4\x8d\x1f\x35\x9c\xeb\x55\x3c\x6a\x22\xd2\xee\x49\x9b\x3c\xaf\x2d\x14\xb5\x4d\x04\xd9\x10\x68\x83\xc0\xcb\x94\xd1\x98\x0b\xcd\xe9\x4a\x7c\x27\x2a\x5c\x20\xf9\x26\x53\x30\x51\x72\x4c\x87\x13\xba\x38\x8d\x34\x8a\x45\x42\x42\x0b\xfc\x13\x47\xd4\x50\xd5\x3e\xfb\xe2\x21\x8e\x07\x83\xfe\x1e\x85\xdb\xcc\x99\x1c\x60\xd8\xd0\xf5\xd7\xe1\x57\x57\xe7\xb9\xd4\x79\xbc\xbb\x5d\x67\xd5\xf6\x5e\xd4\xa3\xad\x2c\x86\xe4\xcc\x23\x8f\x1e\x79\xf4\xff\x1e\x8f\x26\xbb\x8d\x0c\xcb\xbd\x71\xe0\x6e\xdf\x26\xcc\x92\xac\xce\x2d\x4b\xb0\x89\x13\x44\x7e\x7a\x50\xd0\xc2\xa2\x28\x56\xfb\xe2\x3e\xd4\x87\xe1\xe0\x5b\x9a\x14\x65\x4f\x11\xb7\xd6\xd3\x66\x22\x14\xc5\x6a\x08\x82\xbe\x18\x54\xaf\x95\xb2\xd5\x18\x4c\xef\x33\x86\x20\x34\x78\x63\xc9\x40\x81\xb9\x50\x2e\x36\xd5\xb3\x26\xfd\x39\xed\x28\x9a\xfc\xf0\xd3\xcf\x27\xd1\x8a\x6a\x92\x6c\x98\x7d\x2e\x8c\xaa\x4b\xdd\x64\xe9\x6f\x5c\xbf\x85\xb0\x8a\x37\x29\xab\x83\x90\xdc\xc9\x5b\x99\xa1\x32\x7a\x91\x6c\xb2\x7f\x38\xa3\xaf\x84\x5f\x9e\x41\x96\x12\x7e\xb3\x50\x02\x91\x8a\x05\x7e\x0c\xd5\x02\x3f\x72\x12\x72\xac\x07\xe8\x78\x68\x21\x1f\x3f\xae\x7a\x32\x70\x72\x1b\x30\xbe\xbe\x78\xd1\x89\x3e\x12\x89\x6c\x43\x13\x70\x90\xad\x51\xe0\xda\x92\xdd\x96\x7d\x0b\x5e\x36\x57\x2b\x44\x13\x61\xea\xc1\x25\xb9\xd3\xda\x52\xef\x3b\x2d\x0f\xda\xdb\xe4\x55\xcf\x2a\x15\xe6\x59\x1b\x5e\x5e\x5b\x28\xf1\x50\xd3\x7c\xe8\xc6\xa2\x14\x08\x27\x6e\xee\xb4\x4b\x72\x7b\xed\xec\x77\x9c\xb9\xb9\xd3\x68\x9b\x64\x5f\xf7\xb7\xbf\x3c\xfd\xef\xec\x46\xea\xe2\xcf\x7f\xfe\x22\x0e\xfe\xe2\xd9\xdf\xb3\xad\x73\x5f\x9f\x78\x0b\xda\xb5\x62\x8d\x97\x81\xde\x8f\xc5\x1a\xc7\x62\x8d\x63\xb1\xc6\xb1\x58\xe3\x58\xac\x71\x2c\xd6\x38\x16\x6b\xfc\xfe\xae\x7e\x8e\xc5\x1a\xc7\x62\x8d\x63\xb1\x46\xf7\x77\x2c\xd6\x38\x16\x6b\x1c\x72\x76\xc7\x62\x8d\x63\x06\x45\xf3\x3b\x66\x50\x6c\xff\x8e\x19\x14\xc7\x0c\x8a\xee\x2a\x0f\xcf\x5e\xfe\x7d\x15\x29\x48\xed\x42\x8d\xc1\x8d\xac\x1e\x5c\xa4\x30\x19\x1c\x3c\x54\xa4\xa0\x8d\x1f\x2c\x54\x30\x36\x34\xc7\x0d\xa6\xe6\x2b\x61\x45\x89\xc4\x15\x53\xcf\x4e\x5d\x53\xcf\x10\xcb\x18\xe8\x24\x53\x21\x42\x06\x5f\x35\x0a\x7b\x04\xe2\x58\xde\x70\x2c\x6f\xf8\x6d\xca\x1b\x00\x5c\xb7\x76\xe7\x2b\x91\xdf\xe0\x66\x18\xb2\x45\x02\xd3\xeb\x59\x3a\xae\x71\x19\x28\xec\x20\x8c\x6d\xad\xb1\xce\x7a\x55\xe2\x9e\x31\x63\x29\x96\x0a\x79\xa9\xe4\x47\x6c\x6c\x8d\xdd\x2c\x27\x16\xcc\x74\x85\x74\x21\x8c\x98\x4e\xc1\x75\x99\x8d\xb8\xb7\xb9\xa7\x0d\xe6\x51\x4b\x7f\x69\x43\xa3\xdd\x95\x4a\xf1\x7a\xb8\x1f\xdb\xa8\xeb\xb2\x1f\x7d\xe3\x83\xf0\x36\x06\xe7\xca\xf1\x06\x3a\x3e\xa9\xe0\x9f\x0b\xa9\x6a\x8b\xaf\x4c\x29\xe4\xbe\x7c\x82\x37\xdd\xbe\x89\xd6\xe3\x04\x50\x84\xd6\xed\x24\x7e\x8e\x24\x37\xfe\x44\x1b\x44\xe4\x14\x6c\xe6\xf0\x11\x51\x74\xb2\x26\xa5\x6e\xae\xe2\xce\xaf\x26\x19\xbc\x69\xf3\xa2\xbb\x4f\x72\x35\xde\x4c\x70\x39\x42\x15\x01\xe9\xf7\x5b\xa1\x38\xab\xc1\x24\xdb\xae\x5b\x58\x08\x7f\x35\xfa\xd3\x17\x06\x62\xf1\xc8\xd2\xc0\xdf\x6d\xcd\xd0\x57\xc2\xe1\xbb\xe9\xe1\x65\x43\xa1\x7f\x5f\x52\xfe\x4c\x38\x04\xd2\xf5\xc2\xb7\x86\xc2\x60\x1d\x51\xf2\xe7\x1e\x5b\x48\xd4\x42\xf4\x26\xe8\x89\xdd\x3b\x78\x32\xd9\x1c\xd0\x14\x3f\x5d\x4e\x68\x1b\x04\x72\xd0\x38\x04\x32\x01\x09\x11\xca\x00\xf6\xe6\x65\x3d\x4c\xda\x84\x7d\xb9\xd0\xac\x01\x24\x1f\x1b\xde\x57\x4a\xe6\xd2\xa7\xed\xd1\xd6\x60\x1a\x92\x2e\x1c\x11\xa9\xf3\xd2\xd7\xc1\xd4\xa2\x59\x7f\xfa\x29\x0b\x48\xfd\xf9\x67\x56\x1b\x3f\xfd\x94\x7d\xfb\xa5\x8b\x17\x6f\x3f\xff\xdc\x8a\x35\x46\xf0\xbb\x29\x77\xba\xa9\x67\x68\x35\x7a\x74\xe9\x3a\x6e\xc4\x49\x1b\x98\x93\x99\xae\x56\x1c\xc1\x87\x78\x58\x09\xce\x56\x36\x4a\xdd\x73\xa6\xc6\x42\x3d\xab\xb5\xaf\xe1\x69\xb8\xe9\x60\xc9\xfa\x6c\xd4\x44\x13\xb6\x17\xed\xb2\x7b\x74\x1e\x2b\x91\xdf\x88\x05\x87\x08\x4c\x51\xe7\xe1\x43\x3b\xf2\xd4\xa2\x42\xda\x08\x6d\xcb\xd4\x1e\x6e\x83\x12\x0c\x8a\xf6\x0c\x9e\x67\xcf\x5f\x66\x7f\x1c\xd1\xff\xbf\xc8\xfe\xff\xb8\x5c\xf1\xbb\x81\xd9\x73\x0e\xcd\x3f\xcf\x9e\xff\x67\xf6\x32\x48\x12\x0c\xb9\x32\x23\xe8\xc0\xda\x9e\x15\x9d\xa3\x99\x43\x2e\x2a\x31\x16\xa5\x1c\x77\x90\x3c\xfe\xcb\x06\x86\xc7\x7f\x08\x18\x42\x5d\xd0\x99\x3b\xe4\xab\xa9\x40\x0f\x74\x88\x2e\x65\xef\xf8\x7c\x19\xb7\xe8\x3d\x5a\xdd\xce\x1e\xd0\x36\xfe\xcb\xf3\xec\xf9\x97\xd9\x1f\xc7\x7f\xe0\x91\xa2\x11\x95\x3c\x9c\xc8\x4d\xd8\x05\x32\x73\x74\x31\x19\x06\x35\x48\x8e\x47\x10\x0f\x3b\x83\x29\x22\x08\xe5\xba\xb7\x6c\x46\x09\xbd\xc8\x8c\x5d\x9c\x56\x37\x8b\x53\x8f\xf7\xfe\x94\x8c\x0f\xb2\xda\x4f\x1f\x54\xf3\x76\xac\x1d\x3c\xd6\x0e\x7e\x96\xda\x41\x6d\xf4\x7b\x63\xfc\x07\xae\x28\xdb\x87\x8d\x8b\xf5\x04\xba\xaa\x15\x8d\x21\x6f\x5d\x87\xf2\xb4\x98\x39\x14\xcb\xd4\x1e\x9d\x33\x1f\x60\x02\xd4\xb9\xa8\x5c\xcd\xe1\xab\xbe\x34\xbe\x0d\x28\xd2\xe2\x05\x97\xd1\x3d\xe2\xb6\x2e\x0c\xec\xaf\x7c\xeb\x81\x32\x94\xeb\xed\x8a\x62\xec\x8d\xa5\xa0\xce\xed\xaa\xf2\xc3\x41\x92\xf5\xa4\x9d\xd4\x9b\x48\xb1\x5b\x23\x19\xab\x02\x5b\x73\xaf\x99\x97\x24\xb2\x36\x03\x5e\xe6\x7e\x3f\xb3\x81\x50\x1a\xfd\x2d\xf6\xe4\xb2\x0d\x43\x19\x46\x24\xc6\xfe\xf6\x72\x9a\xaa\x01\x49\xec\xb0\x83\xce\xdd\x3a\xf0\x73\x3e\x03\x43\x2f\x79\x67\xa2\x19\x35\x79\xc5\x9e\xff\xfb\xb7\x6c\x4c\xae\xa1\x81\x7c\x98\x20\x96\x83\xa3\x67\x4a\xe9\x7d\x2a\xde\x4b\x2a\x87\x04\x20\xcd\xb3\x56\xbd\xc7\xda\x97\x5a\xcb\xda\x79\x10\x2a\x64\x5d\xe1\x3d\x31\x38\xcd\x48\x56\x73\x9e\xa3\x0b\x19\x96\x5b\x79\x98\x8f\x2e\x95\x90\xa6\x2f\x8f\xa0\x07\x91\x93\x77\x57\xd3\x6d\x7f\x9d\x5b\x63\x16\x48\xc7\x78\x2e\xa4\xbb\xc9\xe0\xad\xf1\x21\x8e\x9c\x73\x22\x30\xc9\x27\xa5\x18\xa4\xc1\xd2\x8e\xdd\x85\xa2\xdd\x3d\x0d\x3b\xf1\xc0\x85\xaa\x07\x6d\x8a\xab\x5b\xdb\x4a\x5f\x2e\x70\x7d\x2a\x35\x7c\x2d\x9f\x35\x95\xa3\x6b\x7c\x9c\xc1\x25\x9d\xcf\x0c\x61\xc1\x8a\xc0\x86\x2b\xfb\xd6\xea\x73\x5a\x54\x6e\x49\xc2\x87\x8b\x65\x2d\x7c\x09\x4f\xf9\xf2\x01\x6f\x43\x3c\x3a\x8e\xeb\x29\x92\x3d\x1c\x03\xa5\xd4\x24\xc7\xcf\xe0\xcb\x47\xa3\xe8\xe0\x12\x99\x3e\x85\xd8\xe1\xf2\xa7\x98\x2d\x32\x58\x54\x2f\x46\x20\xcd\xf3\x11\xa0\xcf\xb3\x2c\x1b\xdc\xdd\x2f\xaa\x8c\x21\x94\x7e\xba\x9b\xbf\x63\xb5\xfa\xbf\x78\xb5\x7a\xd0\xbb\x07\x54\xaa\x3f\x4e\x41\x77\x2a\xd8\x1f\x18\x82\xde\xa7\x99\x1f\xa4\x97\xf7\x70\xc4\x1e\x9d\xfc\x59\x35\xf2\x3e\x7d\x7c\x80\x36\x3e\xea\xe2\x03\xcf\x79\x58\x0f\xff\xea\x5a\x78\xbf\x06\xda\x1b\x46\x1f\xd4\xbf\xff\xda\xda\x77\xff\xce\xf7\x68\xde\x7d\x88\x19\xd6\xba\x9f\x4d\xe7\xee\xa4\xbb\x61\x7d\x3b\xa0\x6d\x77\xe8\x5a\x57\x19\x7f\x29\xec\x0d\xfa\x77\x41\xd2\xee\x7b\x1f\x63\xb3\x3f\xd1\xa5\xb9\xe3\xbb\x1f\xcb\xde\x6c\x53\x21\xd4\x28\x32\x17\x2b\xba\x6c\xad\xa1\x76\xa4\x67\x38\x2c\x5f\x19\xdf\x76\x79\xe8\x85\x62\x29\xee\xaf\xac\xcc\x0f\x39\x97\xcb\xd8\x75\x2d\xbf\x37\x39\xd5\x15\x7f\x49\xb7\x70\x2c\x82\xa5\x52\x31\x73\xa2\x12\x2b\x66\x4b\x06\xf5\x43\x1b\xa5\xed\xbf\x52\x7e\x6c\x40\xff\x57\x7b\x2c\x05\x3e\x70\x41\x59\xe7\xd6\x1f\xcb\xca\xaf\x52\x3e\xfa\xd3\xc2\x34\x17\xa7\xd3\xe9\x37\x34\x99\x7b\x36\x4a\x59\xac\xa9\x09\x42\x71\xb5\xb1\x49\x34\xc3\x53\xd6\x00\x1d\xf1\xdc\xed\xf9\xec\x21\x06\xd4\xf1\x85\x96\x03\x11\x05\xc7\xfc\xa2\xf6\x77\xcc\x2f\xda\xfe\x1d\xf3\x8b\x8e\xf9\x45\xdd\x55\x1e\xae\x95\x3c\x6a\xa1\xf3\x7d\xa5\xa7\xd7\xa1\x57\x53\x6a\xed\xc8\xc7\xdc\x74\x60\x49\xef\x1b\x0d\x6e\x29\x6c\xf0\x5d\x88\xb5\x15\x8e\x79\x09\x0f\x4b\x61\x8b\x3b\x61\x7b\x88\xa2\xff\x32\x7e\x9c\x14\x4d\xef\x97\x00\x47\xd1\xf3\x6d\x69\xdc\x50\xa4\xa1\x17\x3d\xb5\xce\x4d\x59\xf1\xcb\x2d\x05\xc9\xa5\x57\x5b\x55\x47\x5b\xe8\xf8\xbe\x67\x48\x93\x91\xdb\xf5\xed\xd8\xd8\xe0\x9c\x1f\x32\x6f\x3f\xca\x6a\xdc\x0e\x84\x19\xce\xb9\xe6\xca\x07\x87\x28\xdc\x8d\x63\xfe\xa2\xa3\xc6\x3a\x09\x47\x4b\xe1\x60\x56\x4b\xe5\xc7\x52\x43\x2c\xfa\x66\xcd\xb7\x39\x6d\xbb\x66\xfb\xaf\x98\xd3\x22\x35\x88\x3b\x97\xd2\x5e\xca\x94\x28\x41\xc6\xdd\x9d\x58\x6d\x41\xf8\x8b\xeb\x87\x8f\x6f\xfd\x0c\xae\x77\x7c\xeb\xe7\xf8\xd6\x4f\xf3\xcb\x8d\x0e\x89\x7f\x07\xdc\xad\xc5\x8e\x0d\x9f\xe4\xb5\xe5\x3c\xff\xf4\x46\xc6\xe6\x03\x05\x97\x43\xaf\x11\x1c\x46\xa7\xcd\x8a\xcd\x82\x5c\x04\x4c\xab\xb5\x65\xc1\xdd\xc4\xa0\xd6\x9c\x8c\xc9\x23\xa1\x72\x82\xa0\x7a\x0c\xe5\x2a\xe1\xfc\x75\x7c\x64\x24\xfc\x07\x05\x0f\xa2\xa7\xef\x84\xf3\xe1\x05\x91\x18\xfe\x49\x25\x19\xcd\x54\x58\x84\x3c\x4c\xa2\xb1\x20\xa5\x42\x6a\x92\x21\xe1\x1d\xc3\xa9\x6d\x4c\xae\x49\xfa\xab\x75\x81\x56\x71\x51\x60\x3b\x6b\xbe\x14\x7a\xc1\x25\xb5\xf3\x26\x3b\x80\xdc\x8f\x1b\x6d\xee\x34\xbb\x1e\xc9\x23\xe6\xa0\x01\x81\xd5\x4c\x48\x28\x0b\x61\xdb\x38\x0b\xcb\xe3\x3c\xc7\x8a\x5f\x68\xd9\x77\x13\x51\x08\x8f\x63\x9a\xf1\xb1\x2c\x5a\x0e\x3d\x31\xd5\x83\xd5\xf3\xf8\x94\x93\x45\x51\x70\xbc\x2a\x0e\x4e\x76\x01\xed\xb0\x40\x2f\xa4\x72\x20\x66\xa6\x0e\x61\xc2\x16\xe7\x6b\x51\xea\x78\xc5\xcd\xbe\xe9\xa3\x05\x8c\x1d\x78\x6e\xa7\x07\xf8\x6b\xae\x41\xe1\x27\x77\xe6\xed\x5b\x2f\xe1\x04\x9f\x38\x26\xb4\x0e\xa8\x9c\xee\xd6\x56\x47\x5f\x2f\xb1\x53\x6e\x7a\x35\x61\xe8\xf3\xa5\x31\x0e\x1b\x85\x1f\xa2\xb5\xb1\x40\x3b\x04\xe2\x59\xb0\x3b\x59\x20\x69\x5f\x01\x8b\x5a\x58\xa1\x3d\x62\x11\x52\xe8\x36\xb0\x11\x0b\xb4\x7f\x19\x46\x1c\xde\xa2\x95\xfe\xb0\x0b\xd8\x69\xec\x9c\x2e\x42\xdc\x5a\xc6\x53\xae\x84\x73\xb4\xe3\x86\xd3\xe3\x93\x45\xb9\x29\x70\x04\xce\x34\x36\x8e\x83\xf6\x1d\xa1\xf0\xce\x8b\x2c\x4b\x2c\x48\x57\xaa\x55\xe0\x19\xd2\xa1\x21\x25\xa6\x91\x58\xd2\xd7\x61\x66\xce\x7d\xce\x7d\xeb\x6f\xa6\x8c\xa7\x06\xbe\x80\xa4\xcb\xef\xa7\xd7\xa9\x5e\xd9\x68\xb5\x0a\x5c\x14\x0c\x87\x3f\xbf\x11\xca\x0d\xb2\xcb\x7e\xb4\xf5\x18\x2a\x43\x48\x0b\xd2\xa2\x7d\x1a\x28\xd0\x50\xa3\xae\xae\x6d\x8d\x23\x60\x70\x46\xf0\xbd\x66\x21\xf0\xf9\x35\xe8\x75\x0c\x45\xb6\x52\xa9\x4b\xc1\xb1\x3c\x7b\x6e\x4c\x16\x33\xad\xd8\x2b\xef\xd6\xff\x0b\xbd\x82\xac\x19\x9d\x71\x68\xb3\xeb\xd9\x11\x21\x3b\x4f\x07\x27\x72\x6b\x9c\x6b\x04\xbd\x03\x7e\xa4\x29\xa6\x73\x2a\x0c\xaf\x33\xcd\x30\x17\xb5\x43\x10\x76\x26\xbd\x15\x76\xd5\xd1\x72\xe9\x25\xa0\xda\xe1\xbc\x56\xf0\xd4\x21\x42\x46\x56\x4e\x7a\xb1\xa4\xed\xfa\x2c\x44\x6e\x52\xae\xa7\x37\x50\x60\x6e\xf4\x5c\xc9\x9c\xc5\xac\x2c\xc9\x10\x16\x7a\x4f\xde\xc2\x63\x2f\x35\xbb\x0f\xab\xac\x7f\xfa\xb4\x16\x40\x4c\xd6\x3d\xf0\xbd\xbf\x37\x6b\xbd\x8f\x2f\xfe\x1d\x5f\x13\x3b\xbe\x26\xf6\x5b\xbc\x26\x16\xb9\xf6\xb0\x37\xff\xde\x74\x3b\x1f\x5f\xfd\x3b\xf2\xe9\x91\x4f\xff\xdd\x5f\xfd\x63\x22\xb2\x75\xe5\xe9\x8c\xf6\xc2\xd5\xe9\x0b\x16\x43\xfd\x41\x94\x16\x9d\x42\x06\xae\xdc\x64\xe5\xbc\x76\xf1\xca\x04\x9c\x87\xfb\x78\x1b\x02\x8f\x33\x6c\x01\x08\x84\x74\x41\x9e\x0d\xdb\xd4\x92\x9f\xf2\x42\x79\x8b\xa1\xa4\xcd\x87\xeb\xd3\xf8\xf2\xcf\xda\xd4\x8c\x23\x66\xea\x48\xed\x71\xb2\xf3\x1f\xa6\xd1\xc3\xe9\xca\xba\xa6\x7e\x93\x2d\xf7\xad\x5b\xe6\xe8\x38\x6b\xa9\xe0\xa9\xcc\x30\x1b\xd8\x9b\x58\x07\xa1\xe7\x76\x7d\x67\xfe\xd2\xef\xfd\xb1\xc5\xb6\x65\xf7\x5b\x8b\xad\x53\x13\x02\x0a\x58\xbc\x15\x4d\x02\x37\x3f\x64\x06\x5f\x04\x46\xaa\x54\x6d\x85\x8a\x7f\x76\xc2\x51\xf0\xb7\xbf\x9f\x40\x0c\x1f\xc7\x0a\x8b\xd0\xf8\xbf\x01\x00\x00\xff\xff\x4e\x8e\x31\x2f\xa5\x82\x00\x00") + +func clusterApiInfrastructureClusterXK8sIo_awsmachinesYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiInfrastructureClusterXK8sIo_awsmachinesYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml", + ) +} + +func clusterApiInfrastructureClusterXK8sIo_awsmachinesYaml() (*asset, error) { + bytes, err := clusterApiInfrastructureClusterXK8sIo_awsmachinesYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml", size: 33445, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbd, 0x80, 0xa1, 0xcd, 0x19, 0x35, 0x1a, 0x96, 0x37, 0x33, 0x41, 0xfa, 0x2d, 0x2d, 0xba, 0x3e, 0xe8, 0x98, 0x8c, 0xbd, 0x20, 0x33, 0x9a, 0x58, 0xf, 0x77, 0x21, 0x90, 0xc6, 0x1, 0x3e, 0xc2}} + return a, nil +} + +var _clusterApiInfrastructureClusterXK8sIo_awsmachinetemplatesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5d\x5f\x73\xdb\x38\x92\x7f\xf7\xa7\xe8\xda\x7b\x48\xb2\x25\x51\xeb\x64\xee\x2e\xa7\x97\xad\x4c\x9c\x99\x55\x65\x9d\xb8\xa2\x4c\xb6\x6a\xaf\xae\xae\x20\xb2\x25\xe1\x0c\x02\x5c\x00\xb4\xad\x4c\xcd\x77\xbf\xea\x06\x41\x52\xff\x28\xfa\xcf\x64\x6b\x66\xc9\x87\xc4\x82\x1a\x60\x77\xa3\xd1\xfd\x43\xa3\x61\x8b\x42\x7e\x41\xeb\xa4\xd1\x53\x10\x85\xc4\x3b\x8f\x9a\x3e\xb9\xe4\xfa\xb5\x4b\xa4\x99\xdc\x9c\x9f\x5d\x4b\x9d\x4d\xe1\x6d\xe9\xbc\xc9\x3f\xa1\x33\xa5\x4d\xf1\x02\x97\x52\x4b\x2f\x8d\x3e\xcb\xd1\x8b\x4c\x78\x31\x3d\x03\x50\x62\x81\xca\xd1\x4f\x00\xa9\x2a\x9d\x47\x9b\xdc\x8d\xeb\xa1\x84\x2a\xd6\xe2\xbb\x29\x54\x3f\xbd\x3a\x03\x10\x5a\x1b\x2f\x68\xa0\xd8\xcd\x68\x6f\x8d\x52\x68\xc7\x2b\xd4\xc9\x75\xb9\xc0\x45\x29\x55\x86\x96\xc7\x88\xcc\xde\xfc\x29\x79\x99\xfc\xd7\x19\x40\x6a\x91\xbb\x7f\x96\x39\x3a\x2f\xf2\x62\x0a\xba\x54\xea\x0c\x40\x8b\x1c\xa7\x20\x6e\x5d\x2e\xd2\xb5\xd4\xe8\x31\x2f\x94\xf0\xe8\x12\xa9\x97\x56\x38\x6f\xcb\xd4\x97\x16\x93\x5d\x4e\xcf\x5c\x81\x29\x71\xb3\xb2\xa6\x2c\xa6\x70\x8a\x3c\xbc\x2a\xf2\x2f\x3c\xae\x8c\x95\xf1\xf3\x38\x2a\x62\x2c\x0a\xc9\x2d\x41\x9f\x6f\xfe\x36\xbf\x0c\x7c\x7d\xae\xf8\xe2\x2f\x95\x74\xfe\xfd\x11\x82\xbf\x4a\xe7\x99\xa8\x50\xa5\x15\xea\xa0\x6c\xfc\xbd\x93\x7a\x55\x2a\x61\x0f\x51\x9c\x01\xb8\xd4\x14\x38\x85\x0f\xc4\x74\x21\x52\xcc\xce\x00\x2a\xc5\x32\xd3\xe3\x4a\x75\xd5\x34\xbd\x0c\x63\xa6\x6b\xcc\x45\x90\x09\xc0\x14\xa8\xdf\x5c\xcd\xbe\xbc\x9a\x6f\x35\x03\x64\xe8\x52\x2b\x0b\xcf\x93\xb4\x2f\x02\x48\x07\x7e\x8d\x10\xba\xc1\xd2\x58\xfe\x78\x40\x10\x78\x73\x35\xab\x47\x2d\xac\x29\xd0\xfa\x5a\xa9\xe1\x69\x19\x6f\xab\x75\x87\x87\x67\xc4\x66\xa0\x82\x8c\xac\x16\x03\x07\x95\xc0\x98\x55\x92\x81\x59\x82\x5f\x4b\x07\x16\x0b\x8b\x0e\x75\xb0\x4a\x6a\x16\x1a\xcc\xe2\xff\x30\xf5\x09\xcc\xd1\x52\x47\x70\x6b\x53\xaa\x8c\x8c\xf5\x06\xad\x07\x8b\xa9\x59\x69\xf9\xb5\x1e\xcd\x81\x37\xfc\x1a\x96\xc5\x83\xd4\x1e\xad\x16\x0a\x6e\x84\x2a\x71\x04\x42\x67\x90\x8b\x0d\x58\xa4\x71\xa1\xd4\xad\x11\x98\xc4\x25\x70\x69\x2c\x92\xed\x99\x29\xac\xbd\x2f\xdc\x74\x32\x59\x49\x1f\x17\x66\x6a\xf2\xbc\xd4\xd2\x6f\x26\xbc\x62\xe4\xa2\xf4\xc6\xba\x49\x86\x37\xa8\x26\x4e\xae\xc6\xc2\xa6\x6b\xe9\x91\x6d\x76\x22\x0a\x39\x66\x66\x35\x2f\xb5\x24\xcf\xfe\xcd\x56\x4b\xd9\x3d\xdb\x52\x9e\xdf\x90\x6d\x38\x6f\xa5\x5e\xb5\xbe\x60\xa3\xed\xd0\x32\xd9\x2c\x4d\xae\xa8\xba\x06\x29\x1a\x65\x52\x13\xe9\xe3\xd3\xbb\xf9\x67\x88\xaf\x0e\x0a\x0f\xba\x6d\x48\x5d\xa3\x66\x52\x91\xd4\x4b\xb4\x81\x72\x69\x4d\xce\xa3\xa0\xce\x0a\x23\xb5\xe7\x0f\xa9\x92\xa8\x3d\xb8\x72\x91\x4b\x4f\xf3\xf7\x8f\x12\x9d\xa7\x19\x48\xe0\x2d\xfb\x17\x58\x20\x94\x45\x26\x3c\x66\x09\xcc\x34\xbc\x15\x39\xaa\xb7\xc2\xe1\xaf\xae\x64\xd2\xa6\x1b\x93\xf2\xfa\xa9\xb9\xed\x4c\x77\x89\x83\x9e\x5a\x5f\x44\x37\x75\x64\x4e\xf6\x57\xdf\xbc\xc0\x74\x6b\x11\x64\xe8\xa4\x25\xa3\xf5\xb4\x36\xcd\xf2\x98\x57\xea\x5e\x87\xcc\x62\x45\xbe\xdb\x7e\x92\xa7\x18\x51\x2a\xba\x45\xe4\x4c\x78\x01\x1a\x31\xc3\x8c\x96\x12\x7b\x79\x04\x91\xb7\x46\x08\xe6\x20\xc0\x1f\xe2\xb4\x9b\xdb\xc3\xda\x3b\xc8\x31\xeb\xac\xf2\x5a\xd4\x45\x2e\x65\x5a\x7b\x86\xb6\x0e\x17\xb8\x16\x37\xd2\xd8\xd8\x5e\x39\xb4\xe4\xe0\x2b\xba\x59\xa3\x47\x64\x19\xc7\x57\xa1\xe6\x98\x96\x56\xfa\xcd\x8f\x14\x8d\x8e\xd2\xef\x2a\xfa\x48\x77\x5e\xa3\x1a\x84\xb5\x62\x43\x9c\x5a\x5c\xa2\x45\x9d\x22\x7b\x2c\x57\xd1\x86\xc8\x47\x42\x0b\x1f\x7d\xdd\x02\x41\x14\x85\x92\x61\x42\x48\x42\xa9\x9d\x17\x3a\xc5\x04\x3e\xaf\xd1\xe1\x5e\xef\xdb\xd8\xcf\x21\x79\xc0\x5a\x24\xea\x2f\xf4\x66\x8f\x3e\x58\x66\x06\x22\xae\x6b\x8e\x9b\xa0\x68\xb5\x81\xb1\x34\x04\x07\x8b\xd4\x97\xc2\x1b\x7b\x58\xb3\xf4\x48\x8f\x79\x87\xa2\xf6\x6d\x32\x1a\xe1\xa7\xa8\x8d\xe0\xca\x6a\xe5\x30\xc7\xf5\xf4\x53\x8f\xc6\x87\x2d\x36\x30\xbb\x18\xc1\x9b\x4f\x1f\x46\xc4\xe4\x52\x2a\x8f\xd6\x25\xf0\x51\xab\x0d\x18\xcd\xcb\xaa\x22\xa0\xef\x7f\x08\xdf\xb3\x6b\x5b\xd4\x26\x45\x8e\x69\xce\x3f\x6e\xc8\x53\xe6\xe4\x95\xfc\x9a\x02\x8f\x46\xb8\x95\x4a\xd1\xfb\x4a\x15\xd4\x48\xbe\x55\x66\xc1\x08\xd1\xda\x2e\x4d\xf4\xb1\xb4\xca\xde\xac\xee\x26\xd8\xd5\x1a\x89\xb3\xac\xd5\x70\xa2\xeb\x11\x77\xb7\xff\x54\xea\xbb\x17\x2b\xcf\xa2\x4e\x43\xfc\x41\x4f\x8c\x5d\xe3\x66\x12\x62\x50\x21\xa4\x75\x50\xba\x60\xb8\x32\x23\xf7\xbc\xdc\xf0\xf4\x56\x53\xf8\x79\x8d\x1b\x10\xb6\x31\x70\x91\xa6\xc6\x66\x1c\xb3\x82\xa9\xdb\x52\x61\x63\xa0\x8b\x0d\x37\x92\x19\xbc\xb9\x9a\x35\x91\x23\x33\xa9\x4b\xc4\xad\x4b\x44\x2e\xbe\x1a\x9d\xa4\x26\x9f\xbc\xf9\xdb\xfc\xdd\xdb\x97\x93\x80\x03\x26\x3f\x39\xb4\x3f\x96\x32\xc3\xc9\x4f\x04\xd2\xfe\x37\x70\x2e\xf5\x2a\x59\xfb\x5c\x3d\x3b\x21\xf5\x49\xbb\x3e\xa0\x9c\xf0\x86\xa0\x9a\xa0\xdc\x03\xaa\xd0\x5b\x26\x7d\xf2\x05\x7d\x6d\x2a\x3c\x0c\x26\x7b\xd0\xed\x30\x4e\xf0\x34\xfa\xd2\xc0\x78\x12\x85\x61\xb8\xcd\x13\x96\x0a\x87\x63\x47\x7b\x16\x2f\x6f\x8e\xf8\xda\xdd\xa7\xb7\x2d\x86\x27\xc0\xb1\x07\x08\xf0\x85\x3b\x82\xd4\xa9\x2a\x33\x74\xc1\x17\xd8\xb0\xb6\xab\x99\x88\x50\xef\x87\xf6\xc7\x07\x0b\xd6\xd3\x3c\xc2\x73\x4f\x2d\xc4\x0e\x1c\x38\x4e\xd2\x13\x06\xa3\xa0\x78\x9a\x99\xb0\xd7\xe8\x41\x16\x74\x73\x92\xf0\x08\x54\x3a\x4e\x7a\x5a\x20\x79\x52\x8c\xad\x69\x9f\x5d\x3c\xbd\x5f\xec\x25\xd5\x69\x79\x1a\x4c\xf1\x59\xac\x3a\x2c\xa5\xa1\xbb\xea\xb5\xd2\x7b\x49\x71\x04\x9e\x10\x27\x15\x28\x31\x45\x68\x8a\x2e\xdc\xd3\x57\x14\x79\xb3\x2c\x40\x86\x1a\x71\x8c\x76\xe1\x04\x39\x09\x43\xa8\x56\x64\x59\x70\xd0\x19\x2e\x05\x05\xcc\x96\xaf\x2e\xac\xb9\x91\x19\xf9\x91\xd9\x12\x16\xc6\xaf\xe3\x37\x6f\x2b\xa4\x41\xbb\xb2\xaa\x29\x62\xcc\x10\x9f\xc3\x18\x8e\x3c\x92\x17\x2b\x36\x59\xb8\x95\x7e\x0d\x99\x5c\x32\x44\xf0\x95\x7d\x8e\x76\xfa\x3f\x73\xd5\x46\xc8\x8b\x6b\x74\x50\x58\x4c\x31\x23\x44\x71\x7c\x45\xf7\x98\x6b\x91\xcb\xbe\x30\xf0\x72\x16\xc1\xeb\x16\x98\x61\x2e\x2f\x67\x01\x42\xdf\xae\x65\xba\x6e\xa1\xec\x16\x7a\x6d\x30\xde\xd1\xf7\xf5\x0b\x06\x27\xe1\xc5\x83\xc1\x45\xcf\x25\xd4\x0b\x58\xfc\x2b\xc2\x8a\x5e\x51\xe3\x57\x86\x14\xf7\x01\x14\x7d\xe1\xc4\xb7\x00\x13\xf7\x0a\xa2\xfd\x81\xc4\x3f\x13\x46\xdc\x03\x44\xdc\x13\x42\xf4\x07\x10\x7d\xe1\x43\x2f\xf0\xd0\x13\x3a\xf4\x06\x0e\xfd\xc4\x38\x05\x1a\x1e\x0a\x19\x7a\xe9\xbc\x4f\x08\xb9\x11\x52\x89\x85\x54\xd2\x6f\xfe\x6e\x74\xc7\x8a\xda\x76\xcc\x3b\xdd\x80\x13\xa6\x4d\x0a\xa1\x72\x5f\xed\xd1\xe1\x2b\xd1\x79\x43\x3e\xa2\x4a\xf8\x4a\xd7\xca\x1d\xcc\x96\x90\x97\xca\xcb\x42\x21\xb8\x72\xa1\xd1\x07\xd3\xcd\x85\x4f\xd7\x98\x35\x39\xe2\xdd\x31\x47\xd5\x6a\xb6\xce\xf3\xa2\xb0\xe8\x4b\xab\x89\xa3\x42\xa6\xd7\x98\x9d\x0a\xb1\x9d\x4a\x4c\x95\x29\xb3\x99\x96\xbe\xa7\x62\xde\x46\xfa\x3a\xbf\x16\xd0\x0c\xa9\x87\x9c\x74\x9d\x34\x59\x18\xe3\x9d\xb7\xa2\x28\x28\x0e\xb8\x8d\xa3\xf5\x06\xb7\x6b\xb4\xd8\x1a\x44\x86\xc8\xf2\xd8\xa8\x8b\x5a\x2c\x14\x72\x06\x88\xfe\xb5\xe8\xdd\xa5\xd0\x62\x85\xf6\x1e\xd6\x79\x7c\x90\x11\xf1\xad\x39\x34\x92\x74\xb6\xac\x72\x15\x34\xd3\x64\x06\x15\x35\x54\xe4\x44\x84\xda\x95\x16\x89\xc2\x72\x8a\xaf\xb0\xf2\x46\xa4\x9b\x04\xde\x04\x95\x8f\x25\x89\x4f\x4a\x5a\x1b\x73\x0d\x6e\x8d\x4a\x41\x60\x86\x67\xd6\x62\x81\xba\x4a\x0a\x66\xe6\x56\x2b\x23\x02\x66\xab\x47\x64\x48\xb3\xfb\x66\x42\x76\x0d\xaa\x55\x04\x0f\x15\x56\x50\xc7\x31\x6d\xb7\x6f\x0c\x16\xb3\x30\x46\xa1\xd0\x1d\x94\x61\xac\xb7\xa6\xd4\x1d\x86\xb3\xa7\xe1\x79\xd3\x2b\xa2\x35\x5d\xe6\x0b\xe4\x5c\xa2\xab\x44\x89\x21\x76\x69\x6c\x48\x82\xa7\x26\x2f\x58\x88\x40\xd1\x9d\x56\x31\x36\x17\x7e\x0a\x52\xfb\x57\x2f\x7b\x48\x2a\xb5\xc7\x15\xda\x93\x92\x5e\x59\x5c\xca\xbb\x7b\x8b\x1a\xba\x45\x59\x8b\xf0\x29\x2e\xf4\x30\x32\xbb\xf6\x04\x3e\xb3\xb3\x70\xe0\xbc\xb1\x24\x3f\xe6\x85\xb1\xc2\x4a\xb5\x09\x87\x28\x61\x1e\xb3\x60\x88\x6d\xe0\x6a\x71\x25\x1d\xc3\x37\x41\x38\x45\x9b\x0c\x41\xac\x04\xf9\x1d\xa6\xbb\x35\xf6\x9a\x8d\x27\x1e\xe7\x7d\x13\xb7\x2b\x45\x3e\xab\x3c\xdf\x95\x35\x4b\xa9\xfa\x3a\xde\xd9\x9b\xcb\x9d\x8e\x01\x7f\xe9\x0a\xd8\x08\x4d\x24\xb5\x5b\x25\xff\xc0\x44\xb4\x6f\x72\x4e\xae\xf4\x6e\xd2\xf6\x31\xce\x51\xe6\x62\x85\x7f\x35\xe6\xba\x2c\x3e\xda\x55\x5f\x09\xb6\x3a\xc5\xb9\x27\x37\xf1\xd1\xae\x84\x96\x5f\x43\x42\x73\x76\xd1\x8e\x15\xfc\x26\x50\xdc\x0b\xe4\x32\xee\x67\xb4\xf1\xe4\x75\x1e\xe5\xe1\xa3\x22\x3e\x13\x69\x3f\x11\x9e\xcd\x5a\x7d\xa2\x04\xf4\x2a\x9a\x81\x5a\xf5\xf5\x46\x2a\x81\x77\x77\x82\xd6\xe8\x14\xf2\xef\x92\x3b\x25\xec\x0a\x8f\x63\xf1\x1e\x2c\x6b\xf4\x64\xb6\x33\xed\xd1\x2e\x45\xda\xe5\xfb\xb7\xd1\xef\x6e\xbf\x60\x3b\x4a\x3a\xde\xd3\xbc\xfb\x30\x73\x95\xa1\x98\x54\xd2\x0e\x90\xf7\xb6\xdb\x29\xfe\x37\x90\x8b\x3b\x99\x97\x39\xf5\x78\xb9\x9f\xbe\x7e\x78\x32\xbe\xd7\xda\xca\xc5\xdd\x8c\x07\x82\xe3\xee\xeb\x34\x32\x8b\x19\x80\xd9\x45\x4f\xcd\x5d\xd5\x1d\xe2\x74\x97\x5a\xfe\xa3\xc4\xb8\xd1\x91\x14\x5b\x5c\xa3\x86\xb8\x87\xe3\x58\xd6\x24\x1c\x1e\x33\xe9\x45\xb9\x50\x32\x9d\x5d\xf5\xb5\xd1\xab\x8a\xbe\x66\x8a\xd1\x85\x5f\xa3\xdd\x9a\xd1\x78\xac\xb3\x42\x0f\xa2\x7a\x09\xcc\xae\x12\xb8\xaa\x73\x14\x0d\x5a\x73\xe8\xf9\x04\x57\xb2\x37\x5d\x1a\xa5\xcc\xad\x9b\xc2\x79\xe5\x9f\x97\x12\x55\x46\xcb\x93\x90\xc0\xcb\x04\xaa\x7c\xca\x64\xa9\xc4\x8d\xb1\x75\xef\x57\x09\xcc\x19\xe0\xc5\xe4\xcc\xa9\xc5\xd0\x1d\x6f\xad\x31\xfe\x02\x6f\x64\x8a\x73\xf9\xb5\xef\x12\xfe\xb4\xd5\xa9\x3e\xd8\xa3\x9f\xab\xed\x21\x0d\x0b\x37\x46\x95\x39\x29\x0b\x56\x72\x25\x16\x1b\x8f\xee\xf9\x8f\xdf\xbf\x38\x3e\x91\xad\x00\xfb\x1f\xdf\x9d\x10\xab\x3b\xb8\x3a\xb7\x7e\x8f\x9b\x0f\x9d\xbb\xdc\xed\x90\x3a\xff\x4b\xd5\xa1\x06\x0f\xad\xdd\xae\x73\x6b\xb8\xc6\x0d\xaf\x6f\xef\x45\x48\xf4\x6c\x2d\xed\xc7\x18\x67\x00\xec\x7d\x19\x0d\x93\xbf\x7f\xb4\xc6\x7c\x86\x2f\x3b\xf7\x09\xec\xf6\xe3\x52\x1b\x6d\x1d\x12\x56\xdd\x19\x7e\x2e\xf0\x49\xc0\xf3\x90\xb2\x1a\x52\x56\xc7\x9f\x21\x65\x75\x9c\xf5\x21\x65\x75\xf4\x19\x52\x56\x0f\x94\xa5\x93\xe0\xb8\xf6\xc7\x1c\x30\xf6\x9a\x8f\x8e\x76\x78\xa4\xf1\xe1\x22\xa3\x83\xa3\xec\x35\x3a\xb4\x37\x98\x4d\x39\x3f\x12\x1a\xbc\xb1\x62\x85\x53\x58\x0a\xe5\x70\xbf\xe0\xf2\x55\xa0\x1a\x0a\x2e\x87\x82\xcb\xe3\x5a\x1e\x0a\x2e\x87\x82\xcb\xa1\xe0\x72\x28\xb8\x1c\x0a\x2e\x87\x82\xcb\x03\xcf\x50\x70\x39\x14\x5c\x9e\x7e\x86\x82\xcb\xa1\xe0\xf2\x18\xd9\x50\x70\x39\x14\x5c\x0e\x05\x97\xd5\xfc\x0c\x05\x97\xcd\x33\x64\xaf\x87\xec\xf5\x49\x96\x87\xec\xf5\x90\xbd\xee\xc3\xdd\xbf\x48\xf6\xfa\xf7\x52\x50\x28\xb5\x0b\x75\x80\xd7\xb2\x78\x70\x41\xe1\xec\xe8\x20\xc7\x0a\x0a\xb5\xf1\x47\x8b\x0a\x8d\x0d\xcd\x95\xe0\xb1\xf9\x4a\x58\x91\x23\xad\xce\xb9\xe7\xcd\x7d\x5d\x7b\x58\x95\x1c\x92\x05\xc4\xa2\xc1\x04\xbe\xaf\x01\xcc\x08\xc4\x50\x8a\x38\x94\x22\xfe\xb6\x4b\x11\x01\x5c\xbb\x5e\xf7\x7b\x91\x5e\xe3\xee\x79\xc2\xbe\x72\xd8\xfe\xa7\x71\x9a\xc7\x79\xb0\xd8\x7b\x69\x74\xef\x9d\xdb\x4b\xba\x88\xab\x72\xcc\x5a\xac\xca\x85\xbd\x54\xf2\x2b\xd6\x58\xac\x7b\x29\x8b\x15\x2f\xe6\x4c\xba\x70\x3e\x10\x67\xc9\xb5\x17\x31\x79\x85\xba\x88\x2d\xc0\xc7\xc6\x7e\xa3\x60\xa3\xee\x6a\x65\x9a\x1f\x14\x1d\x2e\x13\xb8\xc2\xba\xcc\xbb\xd5\x3a\xbe\x97\x3e\xc7\xe0\x5c\x3e\xde\x51\xd3\x37\x09\x50\x4b\x21\x55\x69\xf1\xc2\xe4\x42\x76\x6c\x1d\xb6\x81\x69\xbb\x4f\x5c\x43\xd5\x40\x90\x85\xd6\xfd\x82\x39\x3e\x5a\xaa\xf7\x7b\x4d\xb2\x9b\xcb\x93\xd8\xb3\x8c\x68\xa5\x44\x94\x2e\x75\x2c\x28\x23\x94\x9e\xc0\x0f\x4d\x6d\x50\xfb\xf7\xf2\xd4\xbb\xcd\xb0\x25\x0c\x15\x7b\x84\x6b\x6e\x84\xa2\xfd\x62\xd8\xd0\x32\xd6\x6f\xdf\x24\xf8\xbb\xd1\x4f\x7f\x09\x01\xb3\x27\xba\x86\xf0\xbb\xab\x17\xfe\x5e\x38\xfc\x38\xbf\x7f\xc9\x70\xe8\x77\xa8\xc0\x6d\x21\x1c\x02\x61\x17\xe1\x1b\x00\x74\xb4\x86\x38\xee\xc3\x9f\xaa\x88\xb8\xe1\xf0\x87\x10\xd7\xfa\x49\xf6\x6c\xb6\xdb\xb1\x2e\x88\xbe\x9c\x91\x78\x24\x4a\x88\x94\x24\x0a\x31\x0f\x15\xf7\x41\x9c\xba\x40\x2e\x06\x99\x59\x53\xfc\x26\x57\x9a\x23\x94\xe4\x69\xc6\xbb\x42\xc9\x54\xfa\x28\x36\x89\x0c\xf3\xb2\x28\x8c\xf5\x8e\x8c\xdd\x79\xe9\xcb\x00\x2d\x69\xd4\x9f\x7f\x4e\x82\xb2\x7f\xf9\x85\xc3\xda\xcf\x3f\x27\xef\x5f\xbb\xea\x44\xff\x97\x5f\x1a\xb7\xca\x8a\xff\x38\x67\xa2\xeb\x72\x81\x56\xa3\x47\x17\xcf\xf9\x47\x04\xaf\x0b\x4c\x69\x1b\xa4\x36\x7c\x62\x05\xd5\x24\x46\x3e\x1b\xdf\x2c\xf5\x81\xb9\x36\x16\xca\x45\xa9\x7d\x09\xcf\xc3\xb1\x1f\x7b\xf6\x17\xa3\x3a\x6b\xb4\xff\xd2\xb6\xdb\xa8\x36\xf7\x85\x48\xaf\xc5\x8a\x53\x41\x26\x2b\xd3\xf0\x45\xd3\x73\x62\x51\x21\x09\x42\x62\x99\xd2\xc3\x4d\x08\xd2\x01\x08\x4c\xe1\x3c\x39\x7f\x95\xfc\x69\x44\xff\xbf\x4c\xfe\x7d\x9c\x6f\xf8\x97\x91\x25\xe7\x7c\xf4\x74\x9e\x9c\xff\x67\xf2\x2a\x78\x24\x0c\xa5\xde\x23\x68\xf1\xda\xcc\x15\xcd\xa3\x59\x42\x2a\x0a\x31\x16\xb9\x1c\xb7\x94\x3c\xfe\xf3\x8e\x86\xc7\x7f\x0c\x1a\x42\x9d\xd1\x9c\x3b\xe4\x33\xef\x60\x0f\x34\x89\xd5\x29\x21\xbb\xa6\x4a\x44\xef\xd1\xea\x66\xf4\xa0\xb6\xf1\x9f\xcf\x93\xf3\xd7\xc9\x9f\xc6\x7f\xe4\x9e\xa2\x76\xb9\xdc\x9d\xcc\x4d\xd8\x15\xf2\xa2\x69\x6b\x32\x74\xaa\x95\x5c\x4d\x41\x35\xd9\x09\xcc\x11\x41\x28\xd7\x3e\xbe\x37\x4a\xe8\x55\x62\xec\x6a\x52\x5c\xaf\x26\x1e\xef\xfc\x24\x1e\x11\x4f\x1e\x55\xef\x3e\xdc\x33\x18\xee\x19\xfc\x26\xef\x19\x68\xa3\x3f\x19\xe3\xbf\x70\x15\x79\x5f\xed\xbd\x35\x7a\x29\x57\xa5\xad\x8a\x1d\x8a\xc6\x25\x73\xc8\x33\x3a\x94\xa6\x57\xd5\x63\x55\x89\xba\x7b\xaa\x43\xf9\xc0\x2b\xa0\x4e\x45\xe1\xca\x50\x11\x16\xb6\x76\x5d\x5c\x45\x66\x32\x2e\xa9\x7f\x82\x53\xf1\x30\x50\x77\xf5\xfb\x01\xee\x43\x49\x7f\x9f\xec\x54\xef\x1c\x1a\xea\xd4\x6e\x0a\x7f\x3a\x29\xb6\xc5\xc8\xbb\xd8\x8b\x4c\xbf\x7d\xef\xa2\xba\x51\xd0\xc0\xdd\x7a\x7c\x8a\x24\xda\x9c\xd8\xf5\xf7\xdf\xf7\xd7\x9c\x4b\xa3\xdf\xe3\xe6\x21\xdc\x87\x9e\xd1\xf1\xbc\xbf\x9c\xc7\x1b\x04\xe4\x2e\x39\x91\xc2\x64\x2d\xb9\xb8\xf0\x8b\xa5\x92\x2c\xb1\xa8\x7b\xcd\x2e\x38\x43\xf3\xe9\x03\x83\xec\x2d\xf5\xd0\x9e\x30\x84\x99\xb0\xb1\x36\xb9\xf4\x3e\x16\xf6\xc7\x10\x4a\x8e\x9b\xc6\xd9\xaa\xec\x67\x34\x41\xad\x79\xe9\x3c\x08\x65\x51\x64\x1b\xc0\x3b\x72\x34\x34\x22\xed\x26\xd2\x14\x9d\x93\x0b\x85\xf5\x9d\x9c\xfa\x37\x8b\xf6\x53\x75\x0f\x1b\x91\xa6\xab\x3e\xe8\x80\x82\x67\x1f\xaf\xe6\xfb\x79\x15\x6e\xad\xca\xe8\x5a\x9b\x8d\x4c\xba\xeb\x04\x3e\x18\x1f\xce\x33\x52\xb1\xa8\x00\xba\x52\xcc\x62\xc7\xda\x0f\x4f\xbf\x4b\x29\x6d\x99\x4f\x27\x5b\x80\x2f\xcb\xdc\x4b\x68\xbe\x69\xd3\xdc\x46\xe2\xcb\x36\xcf\xa5\x86\x1f\xe5\x8b\xfa\x96\xca\x96\x1f\x49\xe0\x92\xe6\x75\x81\xb0\xe2\x00\x67\x43\x69\x4e\x83\x7e\x9d\x16\x85\x5b\x93\x33\xe4\x8b\x3b\x16\x5e\xc3\x73\x3e\x54\xc3\x9b\x70\x4e\x52\xf5\xeb\xb8\xb0\x73\x7f\x0d\xe5\x52\x53\x5c\x9a\xc2\xeb\x27\x53\xa5\xef\xc4\x04\xe1\xd9\x52\xe5\x21\x40\xd0\xf2\x2e\xcf\x31\x59\x25\xb0\x2a\x5e\x8e\x40\x9a\xf3\x11\xa0\x4f\x93\x24\x39\xa9\x85\x9e\xf6\xde\xe7\x94\x60\xcc\x53\xf2\xeb\x9f\xac\x0f\x37\xf9\x7e\x67\x37\xf9\x02\xfe\xb8\xc7\x2d\xbe\x87\x01\x96\xd6\xed\xbe\x47\x1e\x85\xf4\x45\x2a\x0f\xc2\x29\x3d\x57\x64\x4f\x8c\xf2\x4d\x10\x4a\x5f\x7c\x72\x0f\x74\x32\x60\x93\xc3\x4a\x3e\x69\x17\xa7\x71\xc9\x3f\x0d\x95\xf4\x8f\xb8\xbd\x8f\x7f\x4e\xe2\x91\xdf\x06\x1a\xe9\xaf\x99\x9e\x48\xa4\xaf\x02\x4f\xa3\x90\x5f\x1d\x83\xf4\xb2\xeb\xd3\xf8\xe3\x04\xfa\xe8\x81\x3d\x5c\x61\xfc\xa5\xb0\xd7\xe8\x3f\x86\xc8\xd1\xf7\x6e\xf3\x6e\x3f\x5a\x0f\xe6\x96\xcf\x4a\x2d\x67\x3d\x62\x5c\x6a\x02\x37\x37\x2f\x10\x6c\xa9\xa1\x74\x14\x57\xf9\x18\xaa\x30\xbe\x21\x79\xec\x81\x7d\x2e\xee\xae\xac\x4c\xef\x33\xbf\x97\x55\x97\xad\x8b\x2b\x31\x29\x53\xf0\x37\xf1\x94\x9b\x43\x88\x54\xaa\xaa\xb0\x2a\xc4\x86\xdd\x04\x8b\xf0\xa5\x39\x5d\xe8\x2e\x05\x79\xaa\x03\xac\x6f\x7e\x71\x1e\xbe\x08\x25\xb3\x76\xf5\x0f\xe6\x85\xdf\xc4\x0b\x59\xcf\x33\x53\x17\x2e\xcc\xe7\x7f\xa1\xc1\xdc\x8b\x51\xbc\x4d\x10\x9b\xf8\x9d\x9c\x4d\xae\x42\x0c\x3c\xe7\x48\xd6\x0a\x33\x6d\xca\x17\x8f\x01\xa0\xc3\x6d\xfd\xa1\xde\x71\xa8\x77\xec\xa6\x1c\xea\x1d\x87\x7a\xc7\xfa\x19\xea\x1d\x1f\x2c\x8b\x47\x2d\x74\xda\xb1\xc1\xdb\xc6\x94\x81\x1a\xa4\xce\x64\xca\x5b\x79\xb9\xdc\x4b\x70\x10\x4e\x32\x1a\xdc\x5a\xd8\xb0\x27\x25\x57\xa4\x70\xcc\xaf\xf2\xb0\x16\x36\xbb\x15\xb6\xc3\x08\xbb\x8b\x75\xc6\x31\xe0\x76\x52\x04\xfe\xb2\x0e\x9a\xb5\x71\xa7\x32\x5b\x9d\xea\x2d\x75\x6a\xf2\xc2\xa2\x73\x98\x91\xdf\xbd\xd8\xbb\x9e\xdc\x7e\xb6\xd4\xf8\xd3\x81\xae\xf5\x8d\x8a\xf6\x5e\x9f\xc1\x1b\xd7\x28\xd2\xf6\xe4\xab\x2c\xc6\x4d\x47\x58\xe0\x92\x2f\x69\xfb\xb0\x11\x0e\xb5\x33\x98\xbe\x6c\x85\xf7\x56\x81\xe4\x5a\x38\x58\x94\x52\xf9\xb1\xd4\xe0\x42\x5d\x01\x23\x82\xdd\x61\x9b\x77\x36\x3f\x55\xb5\x74\x52\x83\xb8\x75\xb1\xdc\x2e\x8f\x05\x58\x04\xa2\x6f\xc5\x66\x8f\xc3\x53\x59\xb8\xae\x24\xc4\xef\xf1\xf7\x48\x70\x8b\xf3\xc2\x97\xec\x58\x45\x9a\x62\xe1\x31\xfb\xd0\xfc\x55\xb2\xf0\x37\xc7\xfe\xf0\x07\xfe\x10\xff\x7c\x18\x7f\x4c\x8d\x0e\xb5\xa8\x6e\x0a\xff\xfd\x3f\x67\x50\x4d\xc9\x97\xf8\xf7\xc0\xa8\xf1\xff\x03\x00\x00\xff\xff\x62\xa5\xf4\xc2\x26\x6e\x00\x00") + +func clusterApiInfrastructureClusterXK8sIo_awsmachinetemplatesYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiInfrastructureClusterXK8sIo_awsmachinetemplatesYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml", + ) +} + +func clusterApiInfrastructureClusterXK8sIo_awsmachinetemplatesYaml() (*asset, error) { + bytes, err := clusterApiInfrastructureClusterXK8sIo_awsmachinetemplatesYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml", size: 28198, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbc, 0x32, 0x52, 0xa5, 0xee, 0xcf, 0xcc, 0x8f, 0x26, 0xc1, 0x20, 0xc, 0xb, 0xd9, 0x96, 0xba, 0xf5, 0xb2, 0x81, 0x31, 0x8, 0x15, 0xa1, 0xde, 0x1c, 0x2f, 0x2, 0x74, 0xe2, 0x52, 0x65, 0x5c}} + return a, nil +} + +var _clusterApiInfrastructureClusterXK8sIo_awsmanagedclustersYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x57\xcf\x73\xdc\xb6\x0e\xbe\xef\x5f\x81\xc9\x3b\xe4\xf2\x56\x7e\x49\xde\xa1\xd5\xcd\xb3\x49\x67\x3c\x4d\x3a\x1e\x3b\x75\x0e\x4d\x0f\x58\x11\xbb\x62\x4c\x91\x2c\x09\xae\xb3\xe9\xf4\x7f\xef\x80\x94\xd6\xd2\xfe\xb2\xdb\x69\x75\x92\x28\x10\xfc\xf8\x01\xf8\x40\xa2\xd7\x77\x14\xa2\x76\xb6\x06\xf4\x9a\xbe\x32\x59\xf9\x8a\xd5\xfd\x77\xb1\xd2\xee\x62\xf3\x6a\x76\xaf\xad\xaa\x61\x91\x22\xbb\xee\x86\xa2\x4b\xa1\xa1\xb7\xb4\xd2\x56\xb3\x76\x76\xd6\x11\xa3\x42\xc6\x7a\x06\x60\x70\x49\x26\xca\x1b\x40\x63\x52\x64\x0a\xd5\xd7\xf9\xce\x15\x1a\xdf\xe2\xff\x6b\xe8\xdf\xde\xcc\x00\xd0\x5a\xc7\x28\x8e\x86\x69\xce\x72\x70\xc6\x50\x98\xaf\xc9\x56\xf7\x69\x49\xcb\xa4\x8d\xa2\x90\x7d\x0c\x60\x37\xff\xab\x5e\x57\xdf\xcf\x00\x9a\x40\x79\xfa\x47\xdd\x51\x64\xec\x7c\x0d\x36\x19\x33\x03\xb0\xd8\x51\x0d\xf8\x10\x3b\xb4\xb8\x26\xd5\x03\x8a\x95\xb6\xab\x80\x91\x43\x6a\x38\x05\xaa\xf6\x81\xce\xa2\xa7\x46\xc0\xac\x83\x4b\xbe\x86\xa7\xcc\xcb\x4a\x03\x7c\x64\x5a\xbb\xa0\x87\xef\xf9\xc0\xc3\x1c\xbd\xce\x23\x85\xce\xcb\x4f\xb7\x1f\x0a\xac\x45\xf9\x9f\xff\x19\x1d\xf9\xc7\xe3\xff\xdf\xeb\xc8\xd9\xc6\x9b\x14\xd0\x1c\xdb\x58\xfe\x1d\x5b\x17\xf8\xa7\x47\x40\xf3\x6c\xd8\x94\x7f\xda\xae\x93\xc1\x70\x64\xf2\x0c\x20\x36\xce\x53\x0d\x79\xae\xc7\x86\xd4\x0c\xa0\xe7\x3b\xfb\x9a\x03\x2a\x95\x63\x8e\xe6\x3a\x68\xcb\x14\x16\xce\xa4\xce\xee\x56\x52\x14\x9b\xa0\x3d\xe7\x08\xf5\xb8\x81\x1d\x3c\xb4\xba\x69\x81\x5b\x1d\xc7\xfb\x2a\x81\x86\x25\x19\x67\xd7\x05\x3c\xc0\x97\xe8\xec\x35\x72\x5b\x43\x35\x24\x56\x55\xb2\x6a\x20\xfe\x73\x61\xfe\xb3\xa4\xc3\xc0\xad\x04\xa0\x77\x50\xa2\x3e\x26\x15\x80\xb7\xb2\xb1\xc8\x41\xdb\xf5\x51\xa8\x3d\x14\x6f\xd0\xd2\x5e\xbc\x41\x47\x08\x84\x6a\x0b\x2b\x17\xe0\xc1\x85\x7b\x0a\x60\x9d\xa2\x23\x88\x23\x23\xa7\x58\x65\xf3\x09\x9c\x9b\xd1\xc8\x53\x60\x2e\x3f\xdd\xc2\xdd\xf5\x02\xb8\xa5\xa1\x18\x06\x60\x11\x52\x1c\x66\x4d\x17\xf6\xd4\x54\x96\x58\xe0\xdd\xca\xfb\xc6\x37\x95\x56\x13\x0c\x77\xd7\x8b\xe7\x22\xb8\xbe\x82\x77\x56\x79\xa7\x2d\x9f\x58\xab\x07\x76\x2d\xb8\x06\xd3\xaa\x75\x91\x27\x4b\xee\x39\xf1\x41\xbb\xa0\x79\x5b\xc3\xab\x53\x48\xca\xbc\x91\x3e\x48\x5a\xb6\xd4\x61\xdd\xcf\x70\x9e\xec\xe5\xf5\xd5\xdd\x9b\xdb\xc9\x30\x1c\x70\x38\xad\x1e\xe1\x4e\x08\x2d\xb3\x72\x28\xe5\xf3\xb0\x86\x64\xf3\x3b\x9f\x3e\x38\x4f\x81\x77\xc5\x5c\x9e\x91\x66\x8e\x46\xf7\x10\xbc\x14\x90\xc5\x0a\x94\x88\x25\x15\x00\x7d\x41\x91\xea\xf7\x05\x6e\x55\x0a\x23\x90\x0f\x14\xc9\x16\x31\x94\x61\xb4\xe0\x96\x5f\xa8\xe1\x0a\x6e\x29\xc8\x44\x29\xee\x64\x94\xa4\xc5\x86\x02\x43\xa0\xc6\xad\xad\xfe\xb6\xf3\x16\xa5\xda\x64\x19\x83\x4c\x91\x21\x17\xa9\x45\x03\x1b\x34\x89\xfe\x0b\x68\x15\x74\xb8\x85\x40\xe2\x17\x92\x1d\x79\xc8\x26\xb1\x82\x0f\x2e\xe4\x1a\x70\x35\xb4\xcc\x3e\xd6\x17\x17\x6b\xcd\x43\x3f\x68\x5c\xd7\x25\xab\x79\x7b\x91\x53\x40\x2f\x13\xbb\x10\x2f\x14\x6d\xc8\x5c\x44\xbd\x9e\x63\x68\x5a\xcd\x94\x6b\xe7\x02\xbd\x9e\x67\xb0\x36\x2b\x7c\xd5\xa9\xff\x84\xbe\x83\xc4\x97\x13\xf2\x0e\x32\xa1\x3c\x59\x2c\xcf\xb0\x2c\x62\x29\xb1\xc5\x7e\x6a\xd9\xc5\x23\x99\x32\x24\x7c\xdc\xbc\xbb\xfd\x08\xc3\xd2\x85\xf0\xc2\xed\xa3\x69\x7c\xa4\x59\x28\xd2\x76\x25\xe2\x25\x96\xab\xe0\xba\xec\x85\xfa\x7c\x2e\xb5\x69\x34\x59\x86\x98\x96\x9d\x66\x89\xdf\x6f\x89\x22\x4b\x04\x2a\x58\xe4\xb6\x06\x4b\x82\xe4\x15\x32\xa9\x0a\xae\x2c\x2c\xb0\x23\xb3\xc0\x48\xff\x3a\xc9\xc2\x66\x9c\x0b\x79\xcf\xa3\x79\xdc\xc3\xf7\x8d\x0b\x4f\xa3\x1f\x43\x7b\x3c\x11\x93\x83\xda\x13\x41\x9a\xd4\x80\xa2\xa8\x83\xe4\x2c\x23\x93\x64\xfa\xf1\x66\x78\xbe\x0a\xe1\xf1\xac\x30\x51\xa1\x7d\x1b\x38\x2a\xf5\x93\x29\xa3\x1c\x98\x86\x39\x45\x52\x52\x51\x7d\x3c\xa4\xb7\xc3\x83\xe6\xf6\x50\x9b\xab\x83\x55\x4f\xa3\x96\x47\xa4\xf2\xd8\xf8\x1e\xda\x8f\x2d\x65\x53\x91\x45\x70\x76\xd7\x48\x29\x6b\x74\xcc\xe9\x2a\xe9\x2f\x6f\xda\xae\x0f\x51\x9c\x89\xf9\x0e\xa8\x0b\xcf\x85\x22\xa6\x7f\x1b\xc6\xca\x85\x0e\x59\x8e\x53\xfc\xe6\xf5\x19\xa0\xa2\x59\xeb\xbd\x14\x90\x47\x0a\x4c\xd2\xe6\x10\xeb\x1c\x46\x9d\x67\x3c\x2c\x78\x0f\x86\x4f\x64\xf5\xe9\x74\xcf\x4d\xfd\x2f\x25\x7c\x9e\x31\x49\x79\xb7\xcc\x2c\xfd\x03\x39\xbf\x42\x6d\x52\xa0\xb7\xae\x43\x6d\x8f\xe4\xd6\xf8\x8c\x76\x2e\x03\x27\x5b\xf8\x61\xec\x34\xd7\xeb\x61\xbf\x1c\x3a\xa9\x84\xbc\x07\x01\xaa\xa0\xa8\xe0\x8a\x01\x8d\x71\x0f\x71\x74\x7e\xcf\xcd\x28\x59\x45\x21\xb2\x34\x9e\xd6\x3d\x40\x87\x76\xbb\x3f\x1b\x70\x38\x23\x43\x23\x3d\xcf\x17\xf8\x66\x0b\xd1\xa3\x05\x6c\x82\x8b\xf1\x58\x4e\x9d\x2f\x31\x00\xe4\xa2\x9d\xa7\xfe\x3f\x9f\xac\xf2\x3c\x51\x48\x07\xac\x5e\xee\xd6\x2f\x2d\x6a\x15\x88\x72\x19\x40\x87\x3e\x77\xf8\x47\x03\xb4\xfb\xe7\x4e\x1f\xdc\x46\x2b\x0a\xd0\xe9\x75\x9b\xb5\x08\x5c\x18\xaa\xe0\x78\x89\x9d\x49\xee\xe1\x19\x4b\xe6\xa9\x9d\x9e\x14\x4c\x50\xc4\x14\xba\x9c\xd5\xba\x3f\xb7\x4c\x83\x99\x55\x20\x69\xc6\xa5\xc9\x5b\xcd\xb0\x97\xdb\xbd\x83\x6c\x87\x4d\x2b\x4e\xce\xef\x62\xe9\x9c\x21\xb4\x47\x6c\xce\xee\xf2\x74\x62\xc7\xdc\xba\xf4\x4a\x0b\xdf\xf9\xae\x05\x2b\x07\xb8\x41\x6d\x32\xde\xfe\x4d\x1b\xcd\x5b\xf8\xe6\x4a\xed\x22\xe7\xac\x94\x56\x1e\x49\x3d\x5f\x4d\xa0\xdc\x1a\x9e\x68\x47\xf9\x62\x20\xa4\x3d\xb4\x64\x8b\xa2\xee\x5f\x90\x0a\xf3\x2d\x0a\xe6\x91\xdc\xfe\x7c\xf3\xfe\x90\xbe\xd3\xc4\x1d\xc5\x79\x30\x58\x44\xaa\x06\x0e\xa9\xdc\xa7\x22\xbb\x80\x6b\x1a\x8f\xa4\xe5\xee\x08\x37\x6c\xae\x97\x48\xf8\xfd\x8f\xd9\xa3\x5a\x62\xd3\x90\x67\x52\xa3\xbb\x68\xb9\xfa\xbe\x78\x31\xb9\xc7\xe6\xcf\xc6\xd9\x52\x89\xb1\x86\x5f\x7e\x9d\x95\x85\x49\xdd\x0d\xd7\x4f\x19\xfc\x33\x00\x00\xff\xff\xc1\xbb\x04\xf7\xac\x10\x00\x00") + +func clusterApiInfrastructureClusterXK8sIo_awsmanagedclustersYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiInfrastructureClusterXK8sIo_awsmanagedclustersYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml", + ) +} + +func clusterApiInfrastructureClusterXK8sIo_awsmanagedclustersYaml() (*asset, error) { + bytes, err := clusterApiInfrastructureClusterXK8sIo_awsmanagedclustersYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml", size: 4268, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf0, 0xc1, 0x3b, 0xe3, 0x67, 0xea, 0x68, 0x92, 0x74, 0xe9, 0x17, 0xd9, 0x9c, 0xc6, 0x23, 0x7c, 0xf7, 0x79, 0x65, 0x1b, 0x87, 0x3, 0x6a, 0x6c, 0x5, 0xbe, 0x63, 0x57, 0x83, 0xb4, 0x27, 0x26}} + return a, nil +} + +var _clusterApiInfrastructureClusterXK8sIo_awsmanagedmachinepoolsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x4b\x6f\x23\x47\x92\xbe\xeb\x57\x04\xbc\x87\xf6\x02\x12\xb5\xdb\x36\x0c\x2f\x81\x3d\x10\xea\xb6\x47\xe8\x56\x43\x10\x65\xfb\x30\x1e\x18\x51\x59\x41\x32\xad\xac\xcc\x72\x3e\x28\xd1\x83\xf9\xef\x83\x88\xac\x2c\x16\xc9\x22\xd9\xed\xb1\xe7\xe2\xd1\xa5\x9b\x55\xf9\x88\xfc\x22\xe2\x8b\x47\x16\xb6\xfa\x7b\xf2\x41\x3b\x3b\x05\x6c\x35\xbd\x44\xb2\xfc\x2b\x4c\x9e\xbe\x0e\x13\xed\xae\xd7\xff\x7b\xf1\xa4\x6d\x3d\x85\x9b\x14\xa2\x6b\x1e\x28\xb8\xe4\x15\xbd\xa1\x85\xb6\x3a\x6a\x67\x2f\x1a\x8a\x58\x63\xc4\xe9\x05\x80\xc1\x8a\x4c\xe0\xff\x01\x28\x93\x42\x24\x3f\x79\xb9\xea\x97\x42\xd3\xae\xf0\xcb\x29\x74\xff\xfb\xe2\x02\x00\xad\x75\x11\x79\xa1\x32\xcd\xd9\xe8\x9d\x31\xe4\xaf\x96\x64\x27\x4f\xa9\xa2\x2a\x69\x53\x93\x97\x35\x8a\xb0\xeb\xff\x99\xbc\x9e\xfc\xdf\x05\x80\xf2\x24\xd3\x1f\x75\x43\x21\x62\xd3\x4e\xc1\x26\x63\x2e\x00\x2c\x36\x34\x05\x7c\x0e\x0d\x5a\x5c\x52\xdd\xa0\x5a\x69\x4b\xad\x73\x26\x4c\xb4\x5d\x78\x0c\xd1\x27\x15\x93\xa7\xc9\xbe\xb0\x17\xa1\x25\xc5\x02\x2d\xbd\x4b\xed\x14\xce\x0d\xcf\xbb\x95\x23\x60\xa4\xa5\xf3\xba\xfc\xbe\x2a\x58\x5c\x61\xab\xe5\x49\x86\x74\xf6\xc3\xfc\x2e\x8b\x76\x97\x45\xbb\x77\xce\xc8\x7b\xa3\x43\x7c\x77\x7c\xcc\x7b\x1d\xa2\x8c\x6b\x4d\xf2\x68\x8e\x1d\x52\x86\x04\x6d\x97\xc9\xa0\x3f\x32\xe8\x02\x20\x28\xd7\xd2\x14\x3e\xf0\x01\x5a\x54\x54\x5f\x00\x74\x38\xcb\x01\xae\x00\xeb\x5a\x74\x8d\xe6\xde\x6b\x1b\xc9\xdf\x38\x93\x1a\xdb\x1f\xaf\xa6\xa0\xbc\x6e\xa3\x68\x66\x20\x27\x78\xc2\x7a\x03\x21\x62\x4c\x59\x1a\x80\x9f\x83\xb3\xf7\x18\x57\x53\x98\xe4\xe7\x13\x19\xd4\xbd\xcd\x3a\x7b\x18\x3c\x89\x1b\x16\x2e\x44\xaf\xed\x72\x6c\xbb\x0f\xa9\xa9\xc8\x83\x5b\x80\xa7\xd6\x68\x85\xa7\x36\xda\x19\x50\xf6\xda\x79\x98\xb7\xe3\x43\x2e\xc9\x5f\x6c\x87\x0d\x4c\x96\x11\x5b\x51\x83\xd3\x6e\x8a\x6b\xc9\xce\xee\x6f\xbf\xff\x62\xbe\xf3\x18\x76\xe5\x1c\x55\x24\xe8\x00\x71\x45\x90\x67\xc2\xc2\x79\xf9\x39\xae\x4e\x98\xdd\xdf\xf6\x6b\xb7\xde\xb5\xe4\x63\x6f\x63\xf9\x6f\xe0\xce\x83\xa7\x7b\x92\xbc\x62\x61\xf3\x28\xa8\xd9\x8f\x29\x0b\xd1\xe9\x9c\xea\xee\x7c\x8c\x69\x5c\xe9\xc0\xc0\x7a\x0a\x64\xb3\x9f\xf2\x63\xb4\xe0\xaa\x9f\x49\xc5\x09\xcc\xc9\xf3\x44\x08\x2b\x97\x4c\xcd\xee\xbb\x26\x1f\xc1\x93\x72\x4b\xab\x7f\xed\x57\x0b\x10\x9d\x6c\x63\x30\x52\x88\x02\xb1\xb7\x68\x60\x8d\x26\xd1\x25\xa0\xad\xa1\xc1\x0d\x78\xe2\x75\x21\xd9\xc1\x0a\x32\x24\x4c\xe0\xce\x79\x62\x57\x74\x53\x58\xc5\xd8\x86\xe9\xf5\xf5\x52\xc7\x42\x55\xca\x35\x4d\xb2\x3a\x6e\xae\x85\x43\x74\x95\xa2\xf3\xe1\xba\xa6\x35\x99\xeb\xa0\x97\x57\xe8\xd5\x4a\x47\x12\x17\xbe\xc6\x56\x5f\x89\xb0\x56\xc8\x67\xd2\xd4\xff\xe5\x3b\x72\x0b\xaf\x76\xc0\x3b\xb0\xc0\xfc\x27\x3e\x7c\x02\x65\xf6\x5f\xd6\x2f\x76\x53\xf3\x29\xb6\x60\xf2\x23\xc6\xe3\xe1\xed\xfc\x11\xca\xd6\x19\xf0\x8c\xed\x76\x68\xd8\xc2\xcc\x10\x69\xbb\x20\x9f\x47\x2e\xbc\x6b\x64\x15\xb2\x75\xeb\xb4\x8d\xf2\x43\x19\x4d\x36\x42\x48\x55\xa3\x23\xeb\xef\x97\x44\x21\xb2\x06\x26\x70\x23\x8c\x0b\x15\x41\x6a\x6b\x8c\x54\x4f\xe0\xd6\xc2\x0d\x36\x64\x6e\x30\xd0\x1f\x0e\x32\xa3\x19\xae\x18\xbc\x8f\x83\x79\x18\x5e\xf6\x07\x67\x9c\x06\x2f\x0a\x6b\x1f\xd1\xc9\xa8\x0f\xce\x5b\x52\x3b\x7e\x50\x53\xd0\x9e\xed\x36\x62\x24\xb6\xf6\xe3\x3c\x7d\xda\x1b\xc5\x23\x7b\xea\x7c\xc4\xe5\xc1\x5b\xd8\xa1\xd6\x63\x6b\x9c\x40\x67\xec\x90\x3b\x3b\x8a\x05\x5a\x70\x6d\x7e\x04\x81\xa2\xf8\x35\xbf\x8a\x8e\xb7\xe7\x7f\x66\x3f\xcc\x7b\x13\x64\x1b\x93\xc3\x42\xb5\x11\x3c\xf8\x65\xeb\xdd\x5a\xd7\xe4\x2f\x41\xdb\x5e\xe6\xe2\xd1\x8e\x91\xc3\xba\xce\x53\x6a\x5a\x60\x32\x71\x72\x20\xe5\x11\x9d\x09\x0a\x8d\x7e\xe4\xb7\x23\x27\x93\xc5\xa6\x30\x7b\xff\xfa\xa7\x97\xaf\xbf\xfa\xe9\xab\x2f\xcf\x9c\xfe\xee\x96\x57\xda\x51\xe8\xec\xee\x56\x36\x3f\x98\x49\x36\x35\x87\x7b\x5e\x9d\xda\x6c\xf8\xf2\xa7\x6f\xef\xbf\x3b\x32\x60\xf6\x70\x37\x36\xfb\x84\x16\xb1\x19\xa7\xee\xb1\x13\x8e\xb1\x77\xb1\x5a\x3e\xac\x27\x43\x18\x7a\x46\x9f\xc0\xed\x02\xac\x2b\x3f\xc1\xe6\x90\xa9\x03\x84\xd4\xb6\x46\x53\xcd\x2b\xd8\x21\x3b\x97\xa1\x25\x22\xbd\x4b\x15\x79\x4b\x91\x42\xff\xea\x59\x1b\x23\x34\x12\x24\x63\xd8\xfd\x6b\xb4\x7d\x4f\x76\xc9\xd1\xf7\xf5\xa7\xa0\x50\xeb\xf0\x34\xd7\xbf\x8e\x5a\xc2\x00\x83\x37\xdd\x30\x71\x78\xbd\xd0\x1d\x06\xde\xb9\x28\x4b\x40\xd0\xbf\x1e\xaa\x7b\xe1\x7c\x83\x51\xa2\xfb\x17\xc7\xa4\x1a\x46\xfe\xed\x1f\x3d\x85\x0f\xae\x26\x49\x06\x39\x4f\x3a\x23\xde\xdb\x77\xf3\x9d\xe1\x7b\x62\x72\x46\x91\x83\x2b\x81\x2d\xe3\xd8\xb1\xd8\xd3\x94\xf3\x9e\x42\xeb\x6c\x2d\x01\xc2\x65\x9e\x1f\x10\x8f\x68\x73\xe3\x12\xd4\xce\xbe\x8a\xdd\xd2\x1b\xc0\xbc\xac\x28\x12\x8b\xdf\xe4\x67\x45\x53\x92\x2a\xb3\x93\x62\xa0\x1a\x9c\xed\x85\x91\xb4\x4f\x22\xf0\x50\xb4\x42\x03\x5d\x0e\x02\x9c\x84\x1c\xf3\xea\x51\x65\x6a\x1b\x22\x5a\x45\xc7\x5c\x7b\x80\xd8\xed\x60\xe8\x1e\x5a\x0c\x4a\x59\x69\xdc\x8d\x4f\x88\x30\x2c\x48\x86\x7f\xbf\x3f\xed\xbe\x97\x9d\x06\xb2\xe7\xad\xc7\x3c\x88\x75\xde\xf1\x60\xf8\x14\x96\x2c\x24\x7c\xfb\x86\x0b\x80\x33\x88\xde\xef\x0c\x06\xf4\x62\x1b\xfd\x1a\x70\xfb\x26\xb0\xa2\x0b\xb2\x81\xed\x4f\x72\xcf\x14\x5d\x50\x68\xd8\xfa\xb2\x61\x8e\x58\xe4\xd0\x6e\xfb\x2c\xa5\x44\x0c\x1d\x76\x4c\xe6\x40\x4c\x1d\xa9\xf9\x74\xb0\xf3\x4b\xf4\x1e\x37\x7b\xef\x3c\x35\x2e\xd2\x4c\x29\x0a\x23\xcb\xee\x80\xf2\x30\x18\x3a\x50\xd5\xca\x3d\x17\x91\x03\x28\xb4\xec\x2c\x28\x83\xa8\xee\x96\x37\xfb\xbb\x9e\x0a\xfa\xfc\x97\x83\xe9\x9c\x54\xf2\x3a\x6e\xbe\x65\xa8\x46\xc7\xed\x49\x38\x1f\x99\x36\x90\xf4\x79\xa5\xd5\x0a\x42\xf7\x3a\x2b\x28\x88\x72\xd1\x18\xf7\x4c\x75\x27\x37\xcc\x2c\x50\xd3\xc6\x4d\x46\x4c\x6a\x94\x00\xad\xf3\x11\x5e\xbf\x2e\x3a\x6c\x53\x65\xb4\xea\x32\x71\xda\xb7\xb6\x33\xca\x3a\xab\xb0\xd3\x4a\x13\x88\xc2\xea\x1d\x6d\xc6\xf9\xf4\x10\x98\xf9\x5f\xba\xc1\x07\x70\xbc\xbd\x79\xcd\xaf\xe1\x89\x36\x45\x7b\x1c\x94\x24\xbf\xc9\x68\x14\xe5\x0a\x77\x1a\x5a\xc4\x0c\xce\xa5\xc0\xc0\xd3\xfa\x3c\xba\x6b\x3f\x40\x6b\xd0\x12\x87\x48\x5e\xe9\x90\xf5\xce\x9e\xfe\x84\x1b\x7b\x67\xe8\x23\x82\xc8\x43\x37\xec\x48\xf0\xb8\x9d\xdd\xc9\x4a\x3d\xc1\x08\xab\x88\x41\xc8\x29\x73\x3c\x34\x72\x86\xd6\xd3\x15\xbd\xe8\x20\x35\xc7\x73\x17\x10\x22\x47\x03\xd0\x11\x30\x40\xb2\x85\xec\x25\x08\x70\x14\x25\x43\x91\xf8\xb5\xe4\x19\x86\x62\x49\x24\x78\xe1\xb7\xef\xe6\x6f\x2d\x56\x86\x58\x8a\x05\x21\x27\xfb\xb0\x30\xb8\x94\x82\xd6\xa7\x2e\x98\xb8\x2c\xed\x41\xa2\x81\xbd\x64\x5d\x48\xfa\xa4\xb0\xd2\xb1\xd3\x19\xf8\xe6\x1d\x87\x6d\xd1\x2b\xac\x56\x00\x9b\xcd\xbf\x85\x8a\x56\x5c\xa6\x09\x69\x8d\x92\xd5\x69\x27\x6f\xf0\x65\x3c\x5b\x81\xb3\xe9\x06\x9c\x49\x39\x20\x67\x51\x7f\xdc\xf2\x27\x2c\x34\xa4\xca\x52\xbc\x7d\x73\x8e\x4e\xe7\x65\xdc\x21\x43\xc9\x9b\xcc\x4c\xe2\x8b\x7d\x6b\x23\x45\x07\xbb\xf1\xa5\xb4\x19\xfa\x90\xf2\x07\x47\x8c\x63\xb5\xa3\x34\x89\x3e\xb9\x7a\x94\x59\x3b\x99\xb8\xab\x02\x17\xeb\xbf\x53\x01\xa9\x38\xee\x0e\xfa\xa3\x47\xc5\xbb\xe9\x07\xf6\xd2\xa8\xe4\xbd\x34\x02\xc8\xaf\xb5\xa2\xad\x40\xc7\xd2\xbb\x8f\x47\x7e\x7c\xeb\x7e\x67\x69\x10\xf1\xb6\xdb\x96\x11\xdc\xe4\x26\x28\xcc\xee\x6f\xb7\xfd\x0e\x3e\x36\x96\xda\x94\xc5\x1b\xe3\xda\xd3\x4e\xc8\x59\x5e\x88\x8f\x1e\x6d\xd0\xa5\x13\x7c\x2c\x62\xed\xa5\x6c\x21\x42\xd4\x39\x6b\xde\x02\x0d\xb1\x5f\x8a\x0d\x97\x23\x83\xb3\xd4\xd9\x87\x04\x15\xeb\xe2\x8a\xfc\x04\x1e\xd9\x6c\xbb\xc6\x57\x45\xf0\x5c\x8a\xa8\x64\x6b\xf2\x66\xc3\x26\xbe\x5d\x55\xad\xd0\x2e\xa5\xdd\xc2\xf8\x33\xf5\x06\x61\xda\x27\xeb\x9e\xed\x65\x26\xc6\x14\x4a\x57\x48\xc4\xea\x17\x64\xc8\x16\x9a\x4c\x5d\x56\x91\xb2\x5e\x29\x6a\x23\xb3\xf0\x78\x7c\xda\x52\x44\x8d\x91\xae\x78\xc5\xdf\x1a\xc7\x1b\x0a\x01\x97\x1f\x87\xea\x0c\x56\xa9\x41\x2b\xbd\x5f\x16\xae\x4c\x06\x6d\x6b\xad\x50\x62\x50\x4d\x11\xb5\x09\x80\x95\x4b\xb9\x65\xb5\xc5\xbc\x83\x35\x1f\xb7\xc1\x0d\x23\x2b\xd1\xfa\xd8\x29\xcf\x4a\xef\x09\xc3\x58\x59\x3d\x22\xfc\x23\x47\x4d\x19\xde\x33\x56\xaf\xc1\x57\x41\x0c\x6d\x20\x2a\xe7\xcc\x83\xce\x19\x4f\xee\x88\x50\x89\xca\x58\x7a\xb5\x72\x2e\x88\x2a\xd9\x66\xc0\x79\x51\x7a\xdc\x1e\x91\xa3\xa0\xb3\x81\x93\x72\x8e\xbf\xb0\x4c\xe8\xd1\x46\xe2\x5a\xfe\xfe\xf6\x00\x8d\xae\x79\xf7\xaf\x21\x12\x68\x4d\x9c\x40\x7e\x14\x26\xf3\x6e\x70\xa9\x1d\xc4\xbb\xe9\xa5\x35\x5a\xe9\x08\xca\x60\x08\x7c\xe2\xde\xd3\x1f\x32\x7e\xca\xd5\x74\x09\x21\xa7\x9a\x29\x90\x0f\x7c\xf8\x9d\x34\x5b\x37\x0d\xd5\x1a\x39\xbb\xce\x3e\xc3\xb5\x48\x9d\x51\x2f\xd4\xa5\x63\xca\x2b\xf3\x1b\x54\x91\xcd\xde\x79\x2e\x45\xcc\x26\x43\xde\xcb\x97\x41\xba\xfb\x6e\xfe\xc8\x08\x49\xa7\xcb\x9a\x4d\xf6\xa2\xcc\xd3\xff\xff\x0d\x9a\x70\xd4\x5d\xce\xc3\x36\x12\x22\x8e\x81\x96\xd9\xa2\xe3\xda\xde\x86\x2e\x85\x4a\xdc\x02\x1e\x7d\xa2\x4b\x10\x71\x2e\xe1\x3b\x2b\x24\xf0\x9b\xe5\x8a\xa3\x05\xf6\x88\x54\x52\x5e\xbb\xc5\x80\x95\x86\x16\xcc\xfa\xd1\x6c\xf8\x6e\x42\x2f\xd8\xb4\x86\x26\xca\x35\xd7\xc3\xde\x30\xda\x0d\x4c\xfa\xd9\x13\xde\xb8\xeb\xce\x4b\xa8\x17\x43\x0e\x91\x15\x87\xca\xbb\x10\x06\x5d\x45\xa3\x9f\x08\x66\x6b\xd4\x86\x59\xe1\x12\xaa\xc4\x86\xac\x30\x05\x02\xf4\x95\x8e\x1e\xfd\x66\x10\xee\x06\xa9\xfc\x22\x19\xf8\x3c\x10\xc1\x84\x73\x84\x72\x9d\xb3\x1d\xfa\xdf\x39\x91\xc7\x4a\x1b\xb6\x83\xe8\xa0\x26\xe5\xec\xc2\x68\x25\x34\xab\x1b\xae\x7c\xd0\x8e\x34\x25\x3f\x0a\x61\x4f\xbf\x24\xed\xa9\x1e\xc3\xf8\x6a\xf7\x7a\x6b\xf7\xd5\x68\xbb\xe2\x64\xea\x75\xaa\x66\x5a\xa0\x36\xc9\xd3\xdd\x31\x32\xde\x51\xf5\x67\xdf\xec\x8c\xee\x9b\x40\xec\x16\x5d\xa9\x4f\x6b\x92\x0b\x03\x14\x0a\xf6\x94\x6f\x2b\x22\xf9\x46\x73\x38\x6e\xbd\xab\x0c\x35\x72\x95\x63\x95\x36\x25\x34\x0d\xef\xaf\xd8\x29\x65\x65\xae\x9b\x50\x73\x6a\xdf\x38\x2f\x9d\xc7\x8a\x69\xaf\xbb\xfa\x08\x49\x4b\xa0\x12\x52\x35\x6e\xb9\xe4\x87\x3c\x37\x87\x0a\x36\x9b\xd4\xb4\x99\xfd\x7f\xb4\x43\xca\xeb\xa2\x6b\xc7\x7a\x2c\xbc\xf0\x72\x47\xc1\x6b\x02\xf2\xde\xf9\x90\x4f\x81\x83\xdb\x63\x58\xa0\xa2\xf2\xdc\x13\x13\x16\xa9\x98\xab\xc2\x8a\x60\xa1\x5f\x98\x6d\x53\x74\x0d\x46\xad\xd0\x98\x0d\xb8\x35\xf9\x1c\x78\x3f\x17\x63\x2d\x69\x93\x4b\x11\x97\xc4\x56\xc6\x36\xab\x6d\x88\x84\x75\x09\x67\x94\xb7\x08\xae\xa1\xb8\xe2\x63\xb1\xe8\xc9\xd6\xd8\x90\x8d\xb2\xec\xb3\x77\x5c\x76\xe9\xb8\xda\x87\xef\x55\x4e\x9c\x61\x1b\x69\x16\x7a\x99\x7c\xcf\xa4\x83\x82\xd4\x90\xcf\x77\x64\xb2\x5b\x83\x36\xa1\xc9\x95\x7b\x77\xb9\x02\x3a\xf4\x76\x3a\x81\xb7\xd9\x7f\x33\x01\x15\x85\x76\x50\x3d\x97\x7c\x45\xdb\x35\x1a\x5d\x83\x72\x4d\xa5\x6d\xbe\x84\xe7\x09\x81\x22\x47\xe9\xbe\x25\xc4\x32\x5e\x16\x37\xef\x01\x4d\x96\x8b\x3a\xe7\xe3\xf6\xa6\x60\x28\x6b\x77\xa6\xdc\x39\x0a\x9a\x95\x3f\x50\x8e\x8e\x81\xcc\x02\x2a\x92\x1c\xc9\xeb\xa2\x82\x46\x87\x82\x02\x1f\xe3\x47\x0b\x33\xbb\xe9\xd4\xcd\xc6\x3a\xd4\xb6\x53\x2a\x79\xa8\x93\x2f\x86\xd9\x1b\x6a\x0f\xe0\x00\xeb\x6d\x63\x47\x2e\x2a\x30\x64\xf3\xef\xaf\x25\x87\x56\xdd\xdd\xbf\xa1\xad\xaf\x3b\x7b\xe5\x8c\xcb\xee\x9d\xf1\x55\x60\xcb\x68\x53\x9c\x7c\xf6\x29\xe5\x6b\xe7\xc5\x0f\x47\x92\x92\x51\x27\xee\x42\xea\xbf\xcd\x87\x43\x52\x4a\x5b\x15\xbb\x3b\xcb\x1d\xf7\x2d\xf5\x82\x18\x5f\xeb\x29\xdf\x0a\xff\x69\xfc\xf6\x3f\x3e\xfb\x27\xf4\x59\xf9\x44\xe5\xc4\xed\xe4\x82\xf3\xb8\x73\xad\x67\xac\x37\x50\x93\x75\xb1\x68\xa4\xbb\xdd\x18\xf9\x2c\x64\xdb\x5d\x5f\x61\x80\x9f\x9d\xb6\xd4\xa5\xc5\xb9\x86\x3e\x22\x7b\xe5\x9c\x21\xb4\x07\xc2\xe7\x2f\x5c\xce\xf6\xc6\xf3\xb0\xf2\x4d\x4a\xe3\x82\x7c\xc6\x41\x36\xb2\x8f\x95\xa6\x86\x3d\xf8\xde\xe6\x30\xa9\xfa\xad\x17\x6d\xe3\x79\xd6\x15\x0c\xbf\x10\x1a\xae\xb1\x97\x41\x1d\x3c\xcc\x22\x4f\xa5\x23\x99\x1f\x44\xe7\x39\x75\x1a\x3c\x49\x55\x9f\xa2\x96\x6d\xbb\x34\x1f\xfe\xfe\x8f\x8b\x6d\xc6\x9f\xab\x6d\xaa\x3f\x6c\xbf\xf3\xca\x5f\x71\x7d\x96\x2d\xa9\x7c\x8a\x25\x3f\x07\x4d\x1b\xf8\xeb\xdf\x2e\xf2\xc6\x54\x7f\x5f\xbe\xaa\xe2\x87\xff\x0c\x00\x00\xff\xff\x4f\xc6\x92\x20\x7b\x27\x00\x00") + +func clusterApiInfrastructureClusterXK8sIo_awsmanagedmachinepoolsYamlBytes() ([]byte, error) { + return bindataRead( + _clusterApiInfrastructureClusterXK8sIo_awsmanagedmachinepoolsYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml", + ) +} + +func clusterApiInfrastructureClusterXK8sIo_awsmanagedmachinepoolsYaml() (*asset, error) { + bytes, err := clusterApiInfrastructureClusterXK8sIo_awsmanagedmachinepoolsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml", size: 10107, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x48, 0xb, 0x67, 0x24, 0x3b, 0xd2, 0x5a, 0x61, 0x4e, 0x3c, 0xcb, 0x90, 0xe8, 0x3c, 0x38, 0xa5, 0xae, 0xe, 0x87, 0x31, 0x24, 0xd3, 0x14, 0xff, 0x16, 0x11, 0x7e, 0xdf, 0xc0, 0x93, 0xa9, 0x32}} + return a, nil +} + +var _cluster_apiGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\xd4\xcf\x8b\xe2\x30\x14\x07\xf0\xf3\xe6\xaf\x08\x3d\xb5\x0b\xb6\x78\xdb\x6b\x57\x0f\xbb\x87\x01\xd1\x01\x8f\x43\x48\x9f\x36\xb4\x4d\x42\x5e\xe2\x28\xe2\xff\x3e\xf4\xc7\x30\x38\xa2\xcd\xd8\x81\xa9\xb7\x90\x1f\xcf\x6f\x3e\x36\x4f\x33\x5e\xb0\x2d\x50\x86\x08\x16\x09\x11\x95\x56\xc6\x52\xa6\x05\xec\x2d\x48\x14\x4a\xe2\x6e\x4a\x83\xe2\x0f\xc6\x42\x25\x67\xf3\x13\xa6\x05\x82\xd9\x81\x49\x74\xb1\xad\xd7\xf0\x7c\x43\xb2\x9b\x06\x84\xd8\x83\x06\x3a\x2b\x1d\x5a\x30\xe9\xe2\x7f\x37\xc2\x99\x43\xab\xaa\x25\xa0\x72\x86\xc3\x1c\x36\x42\x0a\x2b\x94\xa4\x68\x8d\xe3\xf6\x78\x22\x64\xe3\x24\xa7\xa1\xfa\xc2\xe1\x88\xfe\x75\xa2\xcc\xc2\x88\xfe\xfe\x74\x85\xf8\xea\xef\x1d\xc9\x2f\x03\xd6\x19\x49\x2b\x87\xf6\xda\xb6\xb0\x5e\x4c\x6b\xa5\x25\xb0\x0c\x4c\x18\xf0\x36\x4b\xad\x90\x74\xe3\x78\x3f\x69\xa1\x5e\xba\x09\x8c\x0f\xac\x2a\x83\x28\x22\xa7\x0b\x88\x27\xc6\x73\x21\x61\x0e\xba\x54\x87\x0a\xa4\xbd\x8f\xc4\xbf\xcc\x68\x70\xaa\x36\x72\xf6\x11\xb9\x9f\xe9\x1f\xb0\xd2\xe6\xb3\x1c\x78\x31\xc8\xc9\xa7\xce\xd8\xa0\xf2\x26\x33\x6f\x32\xf7\x4b\x0d\xe2\x79\x18\x13\x0f\x88\x15\x0c\x7b\x52\xb7\xce\x8f\x8e\x03\x6e\x3e\xa2\x74\xbd\x1a\xd4\x77\x3d\xce\xff\x94\x88\x90\x1b\xc3\xda\xec\xce\x40\x7c\x01\xc4\x5e\xd1\xa3\x19\xa7\xeb\x55\xf7\xaf\x2f\x94\x2a\xef\x46\xf2\xa9\x31\x62\xa8\xee\x63\xd2\x75\x7c\x2f\xac\xa1\x50\x0f\x8c\xe4\x07\xf4\x0c\x95\x2e\x99\x1d\x0c\xd5\x5b\x67\xfc\x60\xf6\xfd\x0a\x7d\x70\x92\x6d\x21\x1b\xda\xae\x3c\xcb\x8c\x9a\xad\xb9\x81\x6f\xf3\x6a\x36\x7f\x4f\x0f\xf3\x2e\x35\x7e\xbd\x2b\x1d\xed\x2d\x00\x00\xff\xff\xbe\x04\x09\x8c\xf7\x0c\x00\x00") + +func cluster_apiGoBytes() ([]byte, error) { + return bindataRead( + _cluster_apiGo, + "cluster_api.go", + ) +} + +func cluster_apiGo() (*asset, error) { + bytes, err := cluster_apiGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "cluster_api.go", size: 3319, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x85, 0x17, 0xb2, 0xcd, 0xd2, 0xb7, 0x41, 0xf4, 0xc6, 0x1d, 0x96, 0x42, 0xf3, 0xf, 0xad, 0xe4, 0x28, 0x67, 0xc0, 0x24, 0x47, 0x63, 0x6a, 0x81, 0xd, 0x9c, 0x9f, 0xa, 0xda, 0xc6, 0x4a, 0x11}} + return a, nil +} + +var _hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x56\x4d\x6f\x23\x37\x0f\xbe\xfb\x57\x10\xfb\x1e\xf2\x16\x88\xc7\xbb\xdd\x4b\xe1\xdb\xc2\x1b\xa0\x41\x3f\x36\x48\x82\x5c\x8a\x1e\x64\x0d\x3d\xc3\x46\x23\xa9\x14\xe5\x34\x2d\xfa\xdf\x0b\x4a\xe3\xaf\xd8\x0e\xd2\xa2\x9d\xd3\x88\x43\x51\x0f\x1f\x92\xcf\xc8\x44\x7a\x40\x4e\x14\xfc\x1c\x4c\x24\xfc\x4d\xd0\xeb\x2a\x35\x8f\xdf\xa4\x86\xc2\x6c\xfd\x61\xf2\x48\xbe\x9d\xc3\x22\x27\x09\xc3\x2d\xa6\x90\xd9\xe2\x67\x5c\x91\x27\xa1\xe0\x27\x03\x8a\x69\x8d\x98\xf9\x04\xc0\x78\x1f\xc4\xa8\x39\xe9\x12\xc0\x06\x2f\x1c\x9c\x43\x9e\x76\xe8\x9b\xc7\xbc\xc4\x65\x26\xd7\x22\x97\xe0\x9b\xa3\xd7\xef\x9b\x8f\xcd\xfb\x09\x80\x65\x2c\xdb\xef\x69\xc0\x24\x66\x88\x73\xf0\xd9\xb9\x09\x80\x37\x03\xce\x41\x01\xb2\x37\x8e\xfc\x8a\x8d\x75\x39\x09\x72\x6a\xfa\xe7\x88\x9c\x7a\x5a\x49\x13\x22\xfa\xfa\x46\x61\x92\x22\x5a\xc5\xd1\x71\xc8\x71\x0e\xe7\xdc\x6a\xf0\x0d\x62\x23\xd8\x05\xa6\xcd\x7a\x0a\xe3\x31\x53\x13\xa9\x58\x2a\x1f\x57\x23\x92\x6b\x45\xb2\xa8\x2e\xe5\xb3\xa3\x24\xdf\x9d\x75\xf9\x9e\x92\x14\xb7\xe8\x32\x1b\x77\x26\xa3\xe2\x91\xfa\xc0\xf2\xe3\x0e\xd9\x14\x90\xec\xee\x6d\x74\x22\xdf\x65\x67\xf8\x74\xa0\x09\x40\xb2\x21\xe2\x1c\x4a\x9c\x68\x2c\xb6\x13\x80\x91\xf7\x12\x77\x3a\x32\xbb\xfe\x60\x5c\xec\xcd\x87\x1a\xd5\xf6\x38\x98\x7a\x2c\x80\x92\xf5\xe9\xe6\xfa\xe1\xe3\xdd\x81\x19\xa0\xc5\x64\x99\xa2\x94\x1a\x9e\xca\x16\x28\x81\xf4\x08\x75\x23\xac\x02\x97\xe5\x49\xd7\x4f\x37\xd7\xdb\xc0\x91\x43\x44\x96\x6d\x11\xea\xb3\xd7\xac\x7b\xd6\x17\x30\x2e\x14\x69\xf5\x82\x56\xbb\x14\x2b\x84\x31\x67\x6c\xc7\xe4\x20\xac\x40\x7a\x4a\xc0\x18\x19\x13\xfa\xda\xb7\x6a\x36\x1e\xc2\xf2\x17\xb4\xd2\xc0\x1d\xb2\x6e\xd4\x5a\x64\xd7\x6a\x3b\xaf\x91\x05\x18\x6d\xe8\x3c\xfd\xbe\x8d\x96\x40\x42\x39\xc6\x19\xc1\x24\x40\xbe\x66\x08\x6b\xe3\x32\x5e\x82\xf1\x2d\x0c\xe6\x19\x18\x35\x2e\x64\xbf\x17\xa1\xb8\xa4\x06\x7e\x08\x8c\x40\x7e\x15\xe6\xd0\x8b\xc4\x34\x9f\xcd\x3a\x92\xcd\x20\xda\x30\x0c\xd9\x93\x3c\xcf\xca\x4c\xd1\x32\x4b\xe0\x34\x6b\x71\x8d\x6e\x96\xa8\x9b\x1a\xb6\x3d\x09\x5a\xc9\x8c\x33\x13\x69\x5a\xc0\xfa\x32\x8c\xcd\xd0\xfe\x8f\xc7\xd1\x4d\x17\x07\xe4\xc9\xb3\xb6\x47\x12\x26\xdf\xed\x7d\x28\x4d\xfe\x0a\xcb\xda\xe1\x5a\x5d\x33\x6e\xad\x59\xec\xc8\x54\x93\xf2\x71\x7b\x75\x77\x0f\x9b\xa3\x2b\xe1\x95\xdb\x9d\x6b\xda\xd1\xac\x14\x91\x5f\x21\x57\xcf\x15\x87\xa1\x44\x41\xdf\xc6\x40\x5e\xca\xc2\x3a\x42\x2f\x90\xf2\x72\x20\xd1\xfa\xfd\x9a\x31\x89\x56\xa0\x81\x45\x51\x20\x58\x22\xe4\xd8\x1a\xc1\xb6\x81\x6b\x0f\x0b\x33\xa0\x5b\x98\x84\xff\x39\xc9\xca\x66\x9a\x2a\x79\x6f\xa3\x79\x5f\x3c\x5f\x3a\x57\x9e\xf6\x3e\x6c\xe4\xec\x4c\x4d\x4e\x4d\xd5\x5d\x44\x7b\x30\x06\x2d\x26\x62\x6d\x5b\x31\x82\xda\xec\x67\x75\xec\xf5\x59\xac\xe2\x3e\xc4\x2c\x78\x8b\xd1\x91\x35\x47\x9f\x37\x79\xe8\x2c\x74\x2f\x82\x6e\xff\x0c\x37\xce\x78\xbc\x1a\xcb\x7b\x1c\xe1\x20\xc1\xc5\x89\x2d\x7b\x6d\x74\xd8\x29\x39\x61\xab\x43\x39\x96\x54\x65\x1d\x9e\x48\xfa\xda\x42\x35\x12\x44\x0d\xd5\x1c\x9d\x7a\x3e\x65\x7d\xfa\x90\x4e\x20\x3d\x42\xfb\x6d\x50\x1d\xa8\xa8\x74\x8b\xca\x2c\x04\x0f\x4f\x3d\xd9\x8a\xe2\xd3\xcd\x35\xa4\xd2\xf9\xea\xa7\x6f\xe4\xbb\x63\x34\x70\xbe\x7d\xb6\x80\x03\xbf\x05\xd2\x4d\xe0\x2d\x24\xdd\xf2\x8f\xe1\xac\x02\x0f\x46\x4a\x69\x3f\x7e\xfd\x0a\xe0\xd3\xa5\x87\x32\xb3\xda\x86\xc7\x98\xa7\x85\xab\x13\x66\xc5\x7b\xa6\xc1\x8e\x06\xa5\x1e\xd1\x1d\xfd\x28\x8e\x08\xb9\xb8\xff\xf2\xf9\x0b\xfc\xdf\xb8\x25\xb2\x84\xaf\xe6\x10\x43\xcc\x2a\xe1\x5b\x42\x54\xb8\xcb\xa5\x04\x55\x12\x52\x1e\x8a\x7a\xb0\x49\xc2\xb9\xa8\x00\xac\xc9\x80\x79\x4a\x90\xda\x47\xe0\xe0\x50\xbb\x67\x45\x0e\x2f\x21\x75\x97\xb0\x8e\xf6\x52\xa5\xca\xa3\xa4\xe6\xe2\x4c\x02\x27\xea\x7a\x9a\xa1\xe9\x98\xd6\x9b\xd4\x42\x8c\xe4\xf4\x77\xf5\xa2\x6c\x3a\x50\x8c\xb0\x2c\x4d\xf1\xef\x48\x06\xa3\x69\x9f\xcf\x09\xc5\x32\x04\x87\xe6\x0d\xc9\x1d\x19\x2b\xc2\x39\x08\x67\xac\x06\x09\x6c\x3a\xdc\xb7\xe4\xe5\xf6\x0f\xb8\x01\x30\x52\x04\x7f\xfc\x39\xd9\xb1\x65\xac\xc5\x28\xd8\xee\xdd\xbc\xea\x8d\xef\xdd\xbb\x83\x8b\x5b\x59\xda\xe0\x5b\xaa\xf7\x5d\xf8\xe9\xe7\x49\x3d\x18\xdb\x87\xcd\x05\x4b\x8d\x7f\x05\x00\x00\xff\xff\xef\xf4\xa0\x83\x64\x0b\x00\x00") + +func hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYamlBytes() ([]byte, error) { + return bindataRead( + _hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYaml, + "hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml", + ) +} + +func hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYaml() (*asset, error) { + bytes, err := hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml", size: 2916, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf3, 0xe5, 0xac, 0x3d, 0xe, 0x69, 0x9a, 0x83, 0xf2, 0x52, 0x5f, 0x96, 0xbc, 0x5a, 0xf9, 0xee, 0x26, 0x9c, 0xde, 0x3a, 0xa3, 0x1f, 0xe0, 0x30, 0xfe, 0x5b, 0xf8, 0xeb, 0x9c, 0x13, 0x57, 0xae}} + return a, nil +} + +var _hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x57\x4d\x6f\x1b\x37\x10\xbd\xeb\x57\x0c\x9c\x43\x2e\xd1\x2a\x41\x2e\x85\x2e\x45\xa0\x14\xa8\x9b\x34\x0e\xec\x20\x97\xa2\x07\x8a\x1c\xed\x32\xe6\x92\x2c\x67\xa8\x54\x2d\xfa\xdf\x8b\x21\x77\x65\x69\x25\x3b\x0e\xda\x5e\x8a\xec\x45\xda\xe1\x70\x3e\x1e\x1f\x1f\xb9\x2a\xda\x8f\x98\xc8\x06\xbf\x04\x15\x2d\xfe\xce\xe8\xe5\x8d\x9a\xdb\xef\xa8\xb1\x61\xb1\x7d\x31\xbb\xb5\xde\x2c\x61\x95\x89\x43\x7f\x8d\x14\x72\xd2\xf8\x1a\x37\xd6\x5b\xb6\xc1\xcf\x7a\x64\x65\x14\xab\xe5\x0c\x40\x79\x1f\x58\x89\x99\xe4\x15\x40\x07\xcf\x29\x38\x87\x69\xde\xa2\x6f\x6e\xf3\x1a\xd7\xd9\x3a\x83\xa9\x04\x1f\x53\x6f\x9f\x37\x2f\x9b\xe7\x33\x00\x9d\xb0\x4c\xff\x60\x7b\x24\x56\x7d\x5c\x82\xcf\xce\xcd\x00\xbc\xea\x71\x09\x5d\x20\x46\xa3\x5d\x26\xc6\x44\x4d\xb7\x8b\x98\xa8\xb3\x1b\x6e\x42\x44\x5f\xff\xd9\x30\xa3\x88\x5a\x0a\x68\x53\xc8\x71\x09\xf7\xb9\xd5\xa8\x43\xa9\xb5\xcd\x1f\x4b\x82\x55\x4d\x50\xec\xce\x12\xbf\x39\x1d\x7b\x6b\x89\xcb\x78\x74\x39\x29\x37\x2d\xad\x0c\x51\x17\x12\xbf\xbb\x4b\x31\x87\x4e\xef\xff\x0c\x2e\xd6\xb7\xd9\xa9\x34\x99\x3f\x03\x20\x1d\x22\x2e\xa1\x4c\x8f\x4a\xa3\x99\x01\x0c\x80\x95\x70\xf3\x01\x92\xed\x0b\xe5\x62\xa7\x5e\xd4\x70\xba\xc3\x5e\xd5\x6c\x00\xd2\xec\xab\xf7\x97\x1f\x5f\xde\x1c\x99\x01\x0c\x92\x4e\x36\x72\x01\xff\xa8\x2d\xb0\x04\xdc\x21\xd4\x19\xb0\x09\xa9\xbc\x1e\x37\x07\xaf\xde\x5f\xee\x63\xc5\x14\x22\x26\xb6\x63\x93\xf5\x39\x20\xd6\x81\x75\x92\xf9\xa9\x14\x57\xbd\xc0\x08\xa3\xb0\x26\x1f\xda\x44\x33\xf4\x03\x61\x03\xdc\x59\x82\x84\x31\x21\xa1\xaf\x1c\x13\xb3\xf2\x10\xd6\x9f\x50\x73\x03\x37\x98\x64\xa2\xa0\x9e\x9d\x11\xea\x6d\x31\x31\x24\xd4\xa1\xf5\xf6\x8f\x7d\x34\x02\x0e\x25\x8d\x53\x8c\xc4\x60\x3d\x63\xf2\xca\xc1\x56\xb9\x8c\xcf\x40\x79\x03\xbd\xda\x41\x42\x89\x0b\xd9\x1f\x44\x28\x2e\xd4\xc0\xcf\x21\x21\x58\xbf\x09\x4b\xe8\x98\x23\x2d\x17\x8b\xd6\xf2\xb8\x69\x74\xe8\xfb\xec\x2d\xef\x16\x85\xff\x76\x9d\x39\x24\x5a\x18\xdc\xa2\x5b\x90\x6d\xe7\x2a\xe9\xce\x32\x6a\xce\x09\x17\x2a\xda\x79\x29\xd6\x97\x8d\xd3\xf4\xe6\x49\x1a\xb6\x19\x3d\x3d\x02\x8f\x77\xc2\x08\xe2\x64\x7d\x7b\x30\x50\x98\xfb\x00\xca\xc2\x5e\x59\x57\x35\x4c\xad\x5d\xdc\x81\x29\x26\xc1\xe3\xfa\x87\x9b\x0f\x30\xa6\xae\x80\x57\x6c\xef\x5c\xe9\x0e\x66\x81\xc8\xfa\x0d\xa6\xea\xb9\x49\xa1\x2f\x51\xd0\x9b\x18\xac\xe7\xf2\xa2\x9d\x45\xcf\x40\x79\xdd\x5b\x96\xf5\xfb\x2d\x23\xb1\xac\x40\x03\xab\xa2\x16\xb0\x46\xc8\xd1\x28\x46\xd3\xc0\xa5\x87\x95\xea\xd1\xad\x14\xe1\x7f\x0e\xb2\xa0\x49\x73\x01\xef\x71\x30\x1f\x0a\xdd\xd4\xb9\xe2\x74\x30\x30\x2a\xd0\x3d\x6b\x72\xb4\xe7\x6e\x22\xea\x23\xfe\x1b\x24\x9b\x84\xaf\xac\x18\x85\xe5\xa7\xaa\xf4\xf0\xee\x93\xa7\xe8\xb3\x72\xab\xd0\xc7\xcc\x78\x8d\xd1\x59\xad\x4e\xbc\xc6\x06\x64\x13\xb4\x93\xd8\x00\x31\x98\xd5\xe5\xeb\xeb\xfb\x26\x9d\x40\x34\x54\xb4\xb5\x06\xd3\x2a\xa1\x39\x93\xee\x08\x86\xb7\x41\x2b\x77\x55\xb0\xbb\xc6\x0d\x26\xf4\x1a\xcb\x99\xa1\xac\x27\x40\x1f\x72\xdb\x15\x06\xa4\xbe\xee\x78\x0e\xe0\x90\x61\x17\x32\xb8\xa0\x05\x1d\xc1\x2b\x8d\x73\xcd\x48\x58\xeb\xc9\x9a\x3a\x48\xaa\xc7\xaa\xf3\xa2\xa2\xcd\x49\x41\xf7\x23\x28\x4f\xd1\xd8\x33\xf6\xe9\x1e\x13\x99\xae\x32\xb5\x2f\x87\xcf\x32\x58\x8e\xc0\xe4\x91\xb1\x90\xd8\x04\x4d\xc2\x5f\x8d\x91\x69\x11\xb6\x98\xb6\x16\x3f\x2f\x3e\x87\x74\x6b\x7d\x3b\xff\x6c\xb9\x9b\xd7\x96\x68\x51\x7a\x58\x3c\x29\x3f\xf0\xe1\xea\xf5\xd5\x12\x5e\x19\x03\x81\x3b\x4c\x90\x09\x37\xd9\xc1\xc6\xa2\x33\xd4\x1c\xc8\xef\xb3\x22\x0f\xcf\x20\x5b\xf3\xfd\xd3\xb3\x8d\x3c\xb0\x96\xf7\xd2\xbb\x00\x97\x9d\xbb\x41\x9d\x90\xbf\xb0\xca\xef\xf7\x8e\x55\x85\x64\x22\xd0\x60\xf0\x12\x19\x8d\x10\xb0\xaa\xf2\xb0\xfc\x98\x20\x65\xcf\xb6\xc2\xda\x8a\x6c\x80\xc0\x22\xc7\x3e\x5c\xf2\xa8\xf2\x9d\xda\xa2\x1c\x02\x17\x8d\x09\xfa\x16\x93\x0e\x7e\x63\xdb\x4f\x14\xfc\x05\xdc\xe2\x6e\x8c\x36\x4a\xdc\x61\xea\x9f\x6e\xae\xde\x7d\xa3\xc3\xbf\x46\x87\x84\x0e\x15\x9d\x41\xe7\x61\x44\x75\xa7\xbc\x47\x77\x1e\xd4\x07\x6b\x01\xb0\xbd\x6a\x1f\xb3\x1c\x97\xe2\x37\xde\x6c\x86\x3a\xeb\xe4\x42\x08\xd1\xea\xfd\x4d\x67\xb8\xb1\x42\x74\xca\xe3\xd7\x17\x25\x27\x9c\x68\xf7\x69\x55\xf3\x9a\xf1\x6b\x20\x25\x59\x7f\x8d\x5f\x2d\xc1\x44\xdd\x1b\xdc\x7d\xd3\xde\xff\xeb\x66\x3b\x4f\xb2\xf9\x3d\x47\xfe\xc4\x69\x38\xd3\xa7\xd6\xc3\x53\x7b\x3a\xb6\xd7\xef\xc9\xc0\xb0\x95\x26\xd6\x03\xd6\x4e\x47\x0a\x2f\x1f\x75\x7d\x62\xc5\x99\x1e\x7d\x81\x2a\xde\x47\x57\xa8\xb0\x96\x32\xfe\xe9\x1d\x2a\xa1\x32\x67\xf6\x51\x2d\x7a\x1d\x82\x43\xe5\x1f\xb5\x32\x25\xd0\x97\x1b\x3f\x31\xd6\x26\x96\xc0\x29\x57\x98\x89\x43\x12\xd1\x3b\xb0\xe4\xf5\xfe\x73\x61\x4c\x3b\xc0\x07\x7f\xfe\x35\xbb\x43\x52\x69\x61\x3a\x9a\x77\xd3\x6f\xde\x8b\x8b\xa3\x0f\xd9\xf2\xaa\x83\x37\xb6\x7e\xc8\xc3\x2f\xbf\xce\x6a\x62\x34\x1f\xc7\x0f\x50\x31\xfe\x1d\x00\x00\xff\xff\x18\x40\xea\x5d\x3d\x10\x00\x00") + +func hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYamlBytes() ([]byte, error) { + return bindataRead( + _hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYaml, + "hypershift-operator/hypershift.openshift.io_hostedclusters.yaml", + ) +} + +func hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYaml() (*asset, error) { + bytes, err := hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "hypershift-operator/hypershift.openshift.io_hostedclusters.yaml", size: 4157, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4b, 0x34, 0x9f, 0xc4, 0x1, 0xfb, 0x55, 0xf0, 0x5e, 0x79, 0xbb, 0x20, 0x57, 0xac, 0x79, 0x8e, 0x50, 0xf8, 0x48, 0xf7, 0xf9, 0xd7, 0xfe, 0xa0, 0x65, 0x42, 0xae, 0x54, 0x4e, 0xbc, 0x1e, 0x2e}} + return a, nil +} + +var _hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x58\x4f\x6f\x5b\x37\x0c\xbf\xfb\x53\x10\xed\xa1\x97\xfa\xb9\x5d\x2f\x83\x2f\x43\xe1\x16\x58\xd0\x6e\x0d\x92\xa2\x97\x61\x07\x59\xa2\xdf\xd3\xa2\x27\xbd\x91\x94\xb3\x6c\xd8\x77\x1f\x28\xd9\xce\x8b\xff\x2d\x2d\xb6\x4b\xd1\x5c\xf2\x44\x51\x14\xf9\xd3\x8f\xa4\x64\x33\xf8\x4f\x48\xec\x53\x9c\x83\x19\x3c\xfe\x21\x18\x75\xc4\xcd\xcd\xf7\xdc\xf8\x34\x5b\xbf\x9c\xdc\xf8\xe8\xe6\xb0\xc8\x2c\xa9\xbf\x42\x4e\x99\x2c\xbe\xc1\x95\x8f\x5e\x7c\x8a\x93\x1e\xc5\x38\x23\x66\x3e\x01\x30\x31\x26\x31\x2a\x66\x1d\x02\xd8\x14\x85\x52\x08\x48\xd3\x16\x63\x73\x93\x97\xb8\xcc\x3e\x38\xa4\x62\x7c\xbb\xf5\xfa\x45\xf3\xaa\x79\x31\x01\xb0\x84\x65\xf9\x47\xdf\x23\x8b\xe9\x87\x39\xc4\x1c\xc2\x04\x20\x9a\x1e\xe7\xd0\x25\x16\x74\x1b\xab\x43\x30\x11\xb9\xe9\xee\x06\x24\xee\xfc\x4a\x9a\x34\x60\xac\x5f\x3e\x4d\x78\x40\xab\x5e\xb4\x94\xf2\x30\x87\x53\x6a\xd5\xf4\xd6\x5f\x23\xd8\x26\xf2\xdb\xf1\x14\x6c\xc8\x2c\x48\x53\x33\xf8\x22\xa9\x68\xfc\x58\xfc\x58\x54\x3f\x2e\xd5\x8f\x32\x19\x3c\xcb\xbb\x13\x0a\xef\x3d\x4b\x51\x1a\x42\x26\x13\x8e\xc6\x52\xe6\xb9\x4b\x24\x3f\xdf\xfb\x34\x85\xce\x0e\xf7\x5f\x1b\x25\x1f\xdb\x1c\x0c\x1d\x33\x33\x01\x60\x9b\x06\x9c\x43\xb1\x32\x18\x8b\x6e\x02\xb0\x41\xbb\x58\x9d\x6e\xf0\x5c\xbf\x34\x61\xe8\xcc\xcb\x6a\xd3\x76\xd8\x9b\xba\x29\x80\x82\xf4\xfa\xf2\xe2\xd3\xab\xeb\x07\x62\x00\x87\x6c\xc9\x0f\x52\x4e\xee\x30\x4e\x70\xca\x0d\x64\x90\x4e\xbf\xd9\x13\x3a\x60\x31\x82\x90\x56\xa7\x80\x2b\xb8\x50\x1a\x90\x64\x87\x7d\xfd\x1b\x31\x74\x24\xdd\xf3\xe2\x99\x3a\x5a\xb5\x1e\x6c\xbf\x09\x59\x1d\x28\x41\xa8\x07\xd2\x79\x06\xc2\x81\x90\x31\x56\xb2\xaa\xd8\x44\x48\xcb\xdf\xd0\x4a\x03\xd7\x48\xba\x50\x0f\x22\x07\xa7\x1c\x5e\x23\x09\x10\xda\xd4\x46\xff\xe7\xce\x1a\x83\xa4\xb2\x4d\x30\x82\x2c\xe0\xa3\x20\x45\x13\x60\x6d\x42\xc6\xe7\x60\xa2\x83\xde\xdc\x01\xa1\xda\x85\x1c\x47\x16\x8a\x0a\x37\xf0\x53\x22\x04\x1f\x57\x69\x0e\x9d\xc8\xc0\xf3\xd9\xac\xf5\xb2\xcd\x3e\x9b\xfa\x3e\x47\x2f\x77\xb3\x72\xbe\x7e\x99\x25\x11\xcf\x1c\xae\x31\xcc\xd8\xb7\x53\x43\xb6\xf3\x82\x56\x32\xe1\xcc\x0c\x7e\x5a\x9c\x8d\x25\x03\x9b\xde\x3d\xa5\x4d\xbe\xf2\xb3\x07\xe0\xc9\x9d\xb2\x83\x85\x7c\x6c\x47\x13\x85\xdb\x67\x50\x56\x6a\x83\x67\x30\x9b\xa5\x35\x8a\x7b\x30\x55\xa4\x78\x5c\xbd\xbd\xfe\x08\xdb\xad\x2b\xe0\x15\xdb\x7b\x55\xbe\x87\x59\x21\xf2\x71\x85\x54\x35\x57\x94\xfa\x62\x05\xa3\x1b\x92\x8f\x52\x06\x36\x78\x8c\x02\x9c\x97\xbd\x17\x3d\xbf\xdf\x33\xb2\xe8\x09\x34\xb0\x28\x65\x07\x96\x08\x79\x70\x46\xd0\x35\x70\x11\x61\x61\x7a\x0c\x0b\xc3\xf8\xbf\x83\xac\x68\xf2\x54\xc1\x7b\x1c\xcc\xe3\x8a\xb9\xaf\x5c\x71\x1a\x4d\x6c\xab\xd8\x89\x33\x39\xcc\xa7\xeb\x01\xed\x17\xe7\xe0\xe9\x3c\x2c\x33\xc9\x2d\x2e\xde\x5c\xed\x8b\x4f\x06\xba\xb1\xb6\xf6\x0e\x69\x41\xe8\x0e\x0c\xee\x05\xf3\x3e\x59\x13\x3e\x14\x04\xae\x70\x85\x84\xd1\x62\x69\x21\xc6\x47\x06\x8c\x29\xb7\x5d\x39\x47\xea\x6b\xde\x4a\x82\x80\x02\x77\x29\x43\x48\x5a\xbb\x4b\xc0\xb4\x5d\xeb\xb6\xb4\xf3\x91\xbd\xab\x93\x6c\x7a\xac\x15\x5f\xeb\x62\x73\xe0\xd0\xe9\xe8\xf5\xaf\x54\xcd\x23\xf2\xfd\x4c\xd1\xc2\x5b\x8b\xcd\xce\x1d\x39\xca\x43\xed\x88\x14\x51\xb0\x50\xd1\x25\xcb\xca\x42\x8b\x83\xf0\x2c\xad\x91\xd6\x1e\x6f\x67\xb7\x89\x6e\x7c\x6c\xa7\xb7\x5e\xba\x69\x0d\x89\x67\x25\x86\xd9\xd3\xf2\x0f\x3e\x7e\x78\xf3\x61\x0e\xaf\x9d\x83\x24\x1d\x12\x64\xc6\x55\x0e\xb0\xf2\x18\x1c\x37\xa3\x22\xfa\xbc\x24\xf9\x73\xc8\xde\xfd\xf0\xec\x68\x20\x67\xce\xf2\x24\x49\x0b\x70\x39\x84\x6b\xb4\x84\xf2\xed\x94\xbf\xde\x53\x26\x0c\x68\x18\x2f\x7a\xd3\x1e\x81\xe8\x8c\x55\xd6\x28\x2d\x7e\x76\xfd\x60\xee\xde\xe1\xdd\x37\x4a\x7d\xad\x94\xd2\x4e\xae\xed\xe9\x21\x38\xd3\x6d\xaf\xd9\x97\x8e\xbb\xc9\xfe\xdc\xae\x00\xed\x4d\x8c\x39\xbb\x37\x35\x62\xe5\xfe\x4c\xe1\xdd\xa3\x3a\xb4\x18\xc9\xfc\x79\x3d\xba\x2c\x79\xd0\xa5\xd3\x52\x7d\xf9\x4f\xda\xb4\x1d\x2d\x79\xbb\xb9\x44\x1d\x72\xef\x3c\x5f\xf5\x55\xf1\x08\xbe\xaa\x8f\x7a\x23\xd4\x08\x74\x49\x2c\xf4\x8d\x70\xdb\x79\xdb\x15\xe9\xeb\xcb\x8b\x82\x32\x92\xea\x15\xbc\x63\x7b\x98\x3d\xf0\x6f\x04\xd2\xdb\x07\x3d\xc6\xa5\xcb\x44\x3b\x97\x74\xc9\x17\xbb\x53\xab\xc5\x5c\xaf\xf5\xaf\xbe\x3b\xe3\xb0\x5e\xfb\x5b\xa4\x03\x8d\xe3\xcc\x86\xfa\x8e\x4b\xbc\x5f\x59\x2b\xe9\xe9\x50\x7c\xb6\x1a\x1b\x77\xb4\x36\xae\x4c\x0e\x32\x87\x95\x09\x8c\xe7\x4b\xe7\x95\x9a\x00\x87\x31\x49\x61\xa2\xa9\xf7\xed\x23\xef\x3a\x85\xee\x7a\x07\x5d\xd9\x5a\xeb\x28\xa1\x45\xbf\xc6\xdd\x95\xfc\x84\xff\xcb\x94\x02\x9a\xf8\xa8\xdc\x3f\x46\xe0\x83\x9c\x36\xee\x11\xd9\x79\x20\xac\x49\x36\x07\xa1\x5c\x81\x61\x49\xa4\xbd\x6c\x24\xc9\xcb\xdd\xb3\x69\xeb\xd9\x26\xc7\xe1\xaf\xbf\x27\xf7\xe9\x6e\xac\x96\x5b\x74\xa3\xb7\x7a\xfd\x75\xe0\xc9\x93\x07\x0f\xfd\x32\xb4\x29\x3a\x5f\x7f\x19\x81\x5f\x7e\x9d\xd4\x8d\xd1\x7d\xda\x3e\xca\x55\xf8\x4f\x00\x00\x00\xff\xff\x73\x03\x00\xfc\x8e\x11\x00\x00") + +func hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYamlBytes() ([]byte, error) { + return bindataRead( + _hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYaml, + "hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml", + ) +} + +func hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYaml() (*asset, error) { + bytes, err := hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml", size: 4494, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6f, 0x37, 0xdb, 0x30, 0x1d, 0x75, 0xa2, 0x12, 0x7c, 0xc1, 0xd0, 0xa8, 0x90, 0x95, 0xb5, 0xc5, 0xa0, 0x8e, 0xa0, 0xf9, 0x7b, 0xa2, 0x6e, 0x97, 0x78, 0x9b, 0x94, 0x47, 0x60, 0x48, 0x8d, 0xf3}} + return a, nil +} + +var _hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x58\x4b\x73\xdb\x38\x12\xbe\xeb\x57\x74\x65\x0f\xbe\x44\x54\x1e\x7b\xd8\xd2\xcd\xa5\x24\x5b\xae\xdd\xf5\xba\x2c\xc7\x39\x4c\x4d\x4d\x41\x40\x93\x42\x0c\x02\x9c\x06\x20\x47\x99\x9a\xff\x3e\xd5\x00\x29\x89\x12\xf5\x88\x67\x06\x27\xb2\xd1\xe8\xc7\xd7\x0d\x74\x03\xa2\xd1\x8f\x48\x5e\x3b\x3b\x05\xd1\x68\xfc\x16\xd0\xf2\x9f\x2f\x9e\xfe\xe5\x0b\xed\x26\xab\xb7\xa3\x27\x6d\xd5\x14\x66\xd1\x07\x57\xdf\xa3\x77\x91\x24\x7e\xc0\x52\x5b\x1d\xb4\xb3\xa3\x1a\x83\x50\x22\x88\xe9\x08\x40\x58\xeb\x82\x60\xb2\xe7\x5f\x00\xe9\x6c\x20\x67\x0c\xd2\xb8\x42\x5b\x3c\xc5\x05\x2e\xa2\x36\x0a\x29\x09\xef\x54\xaf\xde\x14\xef\x8b\x37\x23\x00\x49\x98\x96\x3f\xe8\x1a\x7d\x10\x75\x33\x05\x1b\x8d\x19\x01\x58\x51\xe3\x14\xac\x53\xd8\x38\x67\x7c\xb1\x5c\x37\x48\x7e\xa9\xcb\x50\xb8\x06\x6d\xfe\xd2\x6e\xe4\x1b\x94\xac\xbb\x22\x17\x9b\x29\x1c\x63\xcb\x02\x5b\x2b\xb3\x87\xb7\x4e\xe1\x9d\x73\x26\x91\x8c\xf6\xe1\x3f\x3d\xf2\x7f\xb5\x0f\x69\xaa\x31\x91\x84\xd9\xb1\x25\x51\xfd\xd2\x51\xb8\xdd\xca\x1c\x83\x6d\x36\x1f\x2d\x8b\xb6\x55\x34\x82\xb6\x4b\x47\x00\x5e\xba\x06\xa7\x90\x56\x36\x42\xa2\x1a\x01\xb4\xb8\x24\x49\x63\x10\x4a\x25\xa4\x85\xb9\x23\x6d\x03\xd2\xcc\x99\x58\xdb\x8d\x1e\x85\x5e\x92\x6e\x42\x42\xf2\x7a\x25\xb4\x11\x0b\x83\xc9\xee\xac\x17\xe0\xab\x77\xf6\x4e\x84\xe5\x14\x0a\x1f\x44\x88\xbe\x60\x0b\x66\x2e\xda\xd0\x72\x64\x78\x6f\xf7\xa8\x61\xcd\xb6\xb1\xd2\x0a\x69\xb4\xe5\x5b\xbd\x15\xa6\x59\x8a\xb7\xd9\x2d\xb9\xc4\x5a\x4c\xdb\x25\x8c\xf2\xf5\xdd\xcd\xe3\xfb\x79\x8f\x0c\x7d\x33\x3b\x50\x41\x71\x22\xa1\x87\xb0\x44\xe6\xd0\x84\x0a\xd8\x44\x04\x57\xf6\x23\x92\xa0\x27\xd7\x20\x05\xdd\x81\x9c\xc7\x4e\x12\xef\x50\xf7\x34\x5e\xb1\x51\x99\xab\xa7\xb4\xc5\x9a\xd5\x26\x83\x59\x6f\x58\x6a\x0f\x84\x0d\xa1\x47\x9b\xf3\x99\xc9\xc2\x82\x5b\x7c\x45\x19\x0a\x98\x23\xf1\x42\x8e\x7a\x34\x8a\xd3\x7c\x85\x14\x80\x50\xba\xca\xea\xef\x1b\x69\x1e\x82\x4b\x6a\x8c\x08\xe8\x43\x82\x92\xac\x30\xb0\x12\x26\xe2\x6b\x10\x56\x41\x2d\xd6\x40\xc8\x72\x21\xda\x1d\x09\x89\xc5\x17\xf0\x3f\x47\x08\xda\x96\x6e\x0a\xcb\x10\x1a\x3f\x9d\x4c\x2a\x1d\xba\x0d\x2a\x5d\x5d\x47\xab\xc3\x7a\x92\xf6\x9a\x5e\xc4\xe0\xc8\x4f\x14\xae\xd0\x4c\xbc\xae\xc6\x82\xe4\x52\x07\x94\x21\x12\x4e\x44\xa3\xc7\xc9\x58\x9b\x36\x69\x51\xab\x7f\x50\xbb\xa5\xfd\x55\x0f\xbc\x1c\x7a\x1f\x48\xdb\x6a\x67\x22\x6d\x95\x13\x28\xf3\x9e\x01\xed\x41\xb4\x4b\xb3\x17\x5b\x30\x99\xc4\x78\xdc\x7f\x9c\x3f\x40\xa7\x3a\x03\x9e\xb1\xdd\xb2\xfa\x2d\xcc\x0c\x91\xb6\x25\x52\xe6\x2c\xc9\xd5\x49\x0a\x5a\xd5\x38\x6d\x43\xfa\x91\x46\xa3\x0d\xe0\xe3\xa2\xd6\x81\xe3\xf7\x6b\x44\x1f\x38\x02\x05\xcc\xd2\xc9\x04\x0b\x84\xd8\x28\x11\x50\x15\x70\x63\x61\x26\x6a\x34\x33\xe1\xf1\x6f\x07\x99\xd1\xf4\x63\x06\xef\x32\x98\x77\x0f\xd5\x7d\xe6\x8c\xd3\xce\x44\x77\xe4\x1d\x89\x49\xb7\x8b\xe6\x0d\xca\x1f\xdc\x6f\xc7\xf7\x5c\xda\x77\x31\xb8\xb9\x14\x46\xdb\x6a\x7f\xea\xd4\xb2\xe4\x9f\xf8\x36\x44\x1e\x3a\x71\xf6\x16\x6a\xfb\x92\x85\x9c\x0c\xec\xeb\xe1\xda\x31\xdb\x32\x44\xd5\xf6\x80\x7a\x04\x7f\x1e\xd2\x44\x1f\x90\xf8\x18\x3f\xd4\xd1\x0b\xc7\x6c\xcb\xc9\x1b\x85\x03\xc1\x87\x6a\x3e\x77\xb0\x9b\xee\x6d\x89\x05\x1a\x67\xab\x94\xc9\x47\x6c\x3a\x48\x20\x1e\x9b\x33\xfe\xd0\xa2\x53\x68\x35\x46\x84\xd2\x51\x7d\xc6\x8f\x2e\x59\xee\x5a\xf6\xce\x99\x6e\xf9\x98\xd3\x52\x97\x5a\xf2\xe9\x58\xea\x2a\x52\x3e\x48\x4b\x47\x20\x92\x6d\xc0\x25\xb0\x80\xff\x5b\xb3\x06\x67\x37\x08\x74\x02\x36\xa7\xeb\x02\xc1\x63\x38\x74\xfd\x74\x8a\x89\xe7\x41\xf2\x9e\x17\xd7\x5f\xe6\x9d\xe1\x7d\x33\xa3\x47\x05\xcf\x4b\xb4\xa0\xad\x0f\xc2\x70\x96\x83\xb3\xbc\xe0\xd0\x92\xf3\xd6\xf0\x48\x82\xac\xc4\x3b\x72\xa5\x36\x03\x79\xd2\x8f\xce\x60\x4c\xf7\x65\x3d\x30\xeb\x51\x41\x3d\x57\x6f\x76\x96\xf4\xce\x01\x94\xef\x36\xf2\x92\xee\x02\xb0\x2a\xa0\xfe\xe7\xd8\x08\xaa\xf0\xcf\x98\xe9\xe3\xc2\xe2\x40\xfe\x0d\x1a\x78\xfd\x65\xde\xf5\x97\xf7\x58\x22\x21\xdb\x93\x6a\x09\x6d\x7e\x83\xe3\xd2\xd2\x65\x16\x47\x6f\x53\x44\x16\x6b\xb8\xf9\xf0\x1a\xae\xef\x6f\x5f\x83\x23\x28\xb5\x09\x48\xbe\x9f\x5f\x2d\x03\xcf\x7f\xca\xf3\xa9\xb6\x70\x86\x65\x99\x5c\x19\xe6\xe9\x73\xcd\x01\xaf\xb9\x2c\x84\x25\x57\x7e\x8b\xf0\xac\x8d\x61\x7d\xd1\x70\x25\x07\xc1\xc5\x4d\xab\x9c\x2f\x48\xe4\x68\x38\x33\xe0\xa2\xec\xe0\x21\xe8\xc8\xe9\x36\x8c\x17\x3b\x52\x6e\x00\x38\xb9\xf0\x82\x58\xf1\x68\x41\xfb\x01\x23\xae\x3a\x1c\x73\xd1\xc7\xc0\x26\x3d\xe1\x7a\x92\x0b\x7f\x23\x34\xf9\xbc\x99\x82\x03\xad\xb8\x26\x96\xeb\x14\xd2\x36\x6c\x0f\x4b\x5c\x83\x20\x04\xd1\x34\x46\xa3\x02\x21\xa5\x23\x95\x1a\x85\xdc\x3b\x51\x34\xe8\xdb\x8c\x55\x1c\x66\x26\x72\xe8\xaf\xef\x6e\xb6\xe5\x5a\x39\xe9\x0b\xf1\xec\x0b\x51\x8b\xef\xce\x16\xd2\xd5\x93\xeb\x2f\xf3\x8f\xb3\x77\x93\xdc\x7c\x4d\x3e\x7b\xa4\x7f\x47\xad\x70\xf2\x99\x5b\xf1\x5f\xb2\xe5\xda\x56\xc5\x32\xd4\xe6\xea\xa4\xcf\x3a\x60\x7d\x06\x96\x3d\x60\xb2\xf4\x0c\x4b\x86\x75\x00\x06\xdb\x4b\xe1\x33\xe2\x2f\xcb\xa1\x3c\xec\x60\x21\x3a\x63\xf2\xed\x4e\x1d\xca\x26\x17\x9d\x1b\xe9\xb6\x94\xc2\x24\x85\xc7\xb1\xe7\x6b\x62\xd0\x2b\x3c\x9e\xf1\xdb\x71\x61\xee\xe5\x91\xbb\xde\x1f\x36\xfd\x31\x2d\x03\x6d\xa5\x89\x0a\x7d\xde\xef\x94\xf7\x6f\x8b\x7e\xd7\x4f\x7f\xda\xfd\x7d\xa1\x4b\x17\xa5\xc3\x0b\xbc\xef\xd8\x05\x91\x58\x9f\xe1\x3e\xde\xd3\xf4\xc7\x38\x05\xef\x2c\x53\xc6\xe3\x0c\xdb\x89\x0e\x68\x88\xf1\x9c\x1b\xfa\x8c\xf1\xfd\xfa\xf5\xe1\xaf\x3d\xed\xce\xfa\x72\x1a\xe0\x71\xaf\x06\x9f\xe8\x49\x8f\x68\x38\x3a\x39\xac\x76\xbc\xdb\x62\xee\xcd\xec\x5f\xe6\x3b\x7a\xd7\x49\x5d\x74\x89\x48\xef\x02\x97\x5c\x23\x12\x63\xaf\x81\x70\x0b\xcf\x17\xb5\x97\xdf\x24\x4e\x74\xaa\x07\x36\x24\xbe\xae\x67\xab\x9d\x4f\xb7\x6e\xb4\x81\x8b\x7c\x67\x87\x8d\xf5\x02\x29\xa7\x4b\x63\xb4\x14\xfe\x58\xe3\x3c\xd4\x02\x1f\x0b\xc0\x30\xcc\x83\x78\x1e\x10\xb3\x61\x53\x08\x14\x73\xf4\x7c\x70\x24\x2a\xdc\xa5\xc4\xc5\xe6\x2e\xde\xa9\xf6\x52\xec\x36\x8a\xdc\xa4\xdc\xb7\x1e\x75\xef\x39\x0d\xca\x83\xd7\x9c\x2e\x9c\xfb\xbc\xc3\x6f\x3f\x6d\xe8\xe1\xb7\xdf\x47\xdb\x2c\x10\x52\x62\x13\x50\xdd\xee\x3f\x93\xbd\x7a\xd5\x7b\x05\x4b\xbf\xd2\xd9\xfc\x46\xe5\xa7\xf0\xd3\xcf\xa3\xec\x1d\xaa\xc7\xee\x1d\x8b\x89\x7f\x04\x00\x00\xff\xff\xc2\x98\xa9\xde\x6b\x14\x00\x00") + +func hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYamlBytes() ([]byte, error) { + return bindataRead( + _hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml, + "hypershift-operator/hypershift.openshift.io_nodepools.yaml", + ) +} + +func hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml() (*asset, error) { + bytes, err := hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "hypershift-operator/hypershift.openshift.io_nodepools.yaml", size: 5227, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2b, 0xeb, 0xc7, 0x71, 0x60, 0x10, 0x71, 0x62, 0x3, 0xa1, 0x95, 0x5c, 0x4e, 0xb3, 0xdd, 0xe7, 0xd4, 0xdf, 0xab, 0xb9, 0x18, 0xec, 0xf1, 0xa8, 0x35, 0x38, 0x8b, 0xea, 0xfe, 0xea, 0x49, 0x80}} + return a, nil +} + +var _hypershiftOperatorOperatorClusterroleYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x94\xb1\x8e\xdb\x30\x0c\x86\x77\x3f\x85\x70\xcb\x01\x05\xa2\x43\xb7\xc2\x6b\x87\xee\x45\xd1\x9d\x91\x98\x98\x38\x49\x14\x48\x2a\x4d\xfa\xf4\x85\x63\xbb\x3d\xd4\x09\xea\x06\x37\x99\xa2\xa9\xcf\xe4\x4f\xd2\x50\xe9\x3b\x8a\x12\x97\xde\xc9\x1e\x82\x87\x66\x03\x0b\xfd\x04\x23\x2e\xfe\xf5\x93\x7a\xe2\x97\xd3\xc7\xee\x95\x4a\xec\xdd\xe7\xd4\xd4\x50\xbe\x72\xc2\x2e\xa3\x41\x04\x83\xbe\x73\x2e\x08\x5e\x2f\x7c\xa3\x8c\x6a\x90\x6b\xef\x4a\x4b\xa9\x73\xae\x40\xc6\xde\x0d\x97\x8a\xa2\x03\x1d\x6c\xc7\x15\x05\x8c\xa5\x93\x96\x50\xfb\x6e\xe7\xa0\xd2\x17\xe1\x56\x75\x24\xed\xde\xc4\x7a\xae\x58\x26\x8b\xb8\x73\x4e\x50\xb9\x49\xc0\x39\xf0\xf9\xc3\x73\xe7\xdc\x09\x65\xff\xc6\xb1\xc2\x05\x2e\x07\x3a\xfe\x2f\xea\x88\x76\x7d\x26\xd2\xc9\xf8\x01\x16\x86\x35\x1d\x2a\xe1\xd9\xb0\x8c\x0a\xea\x2c\xd7\x1a\x1f\x9a\x1a\xe7\xc5\x19\xf1\x40\x85\x46\xb9\x74\x43\xfe\x7b\x66\x53\x13\xa8\x3e\x4c\xe2\xfb\xf3\xee\xf7\x77\xae\xe5\x99\x70\xaa\x09\x0a\xde\x8e\xa0\x72\x10\x50\x93\x16\xac\xc9\x9d\x98\x0c\x61\xa0\x82\x7a\xfb\x2d\x9e\xab\xdf\x42\x81\x18\x47\x15\xee\x32\x6e\x17\xb0\x76\x3e\xd4\xe7\x65\xae\xde\x65\x68\x84\x9b\xe1\xbb\x90\x14\x43\x13\xb2\xcb\x3f\x60\x4b\xd8\xd8\x4e\x3c\x5b\xe0\x32\xf6\x9c\x8a\x6d\x19\x91\xbb\x8b\xfb\x68\xd2\x4f\x4f\xeb\x9b\x78\xc2\x29\x9b\x65\xa5\x32\xd4\xe9\x58\x39\xfe\x31\x5e\x12\x1f\x97\x8a\x04\xe7\x0b\x85\x23\xce\x16\x64\xd4\x0a\x61\x3e\x2a\xca\x89\x02\x42\x08\xdc\x16\xfa\xec\xdb\x52\x38\xd4\x6b\x0a\x7f\x65\x1a\xb1\x26\xbe\x64\xdc\x26\x1e\x5a\x88\x7e\xfc\x8f\xed\x41\xd1\x07\x16\x64\xf5\x81\xf3\xa3\xda\xcd\xab\xf4\xc8\xf0\xfc\x0a\x00\x00\xff\xff\x0f\xa6\x42\x82\x8d\x05\x00\x00") + +func hypershiftOperatorOperatorClusterroleYamlBytes() ([]byte, error) { + return bindataRead( + _hypershiftOperatorOperatorClusterroleYaml, + "hypershift-operator/operator-clusterrole.yaml", + ) +} + +func hypershiftOperatorOperatorClusterroleYaml() (*asset, error) { + bytes, err := hypershiftOperatorOperatorClusterroleYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "hypershift-operator/operator-clusterrole.yaml", size: 1421, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0x61, 0xaf, 0xb8, 0xd9, 0x50, 0xb2, 0xa6, 0x9e, 0xbb, 0x84, 0x73, 0x34, 0xe3, 0xad, 0xa3, 0xca, 0x38, 0xa4, 0x4, 0x23, 0x7b, 0x76, 0x28, 0x90, 0x8a, 0x9, 0xa8, 0xb5, 0x75, 0x1c, 0xe3}} + return a, nil +} + +var _hypershiftOperatorOperatorDeploymentYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x52\x4d\x6b\xe3\x40\x0c\xbd\xfb\x57\x08\xb3\x87\x5d\x58\xaf\xc9\x75\x6e\x66\x9b\x9e\x9a\x60\x5a\x28\x94\x52\x8a\x32\x56\xe2\xa1\xf3\xc5\x8c\xec\xe2\x7f\x5f\x26\x1f\x13\x9b\x44\x27\xfb\xe9\xbd\xe7\x27\xc9\xe8\xd5\x2b\x85\xa8\x9c\x15\x80\xde\xc7\x7a\x5c\x15\x5f\xca\x76\x02\x1e\xc8\x6b\x37\x19\xb2\x5c\x18\x62\xec\x90\x51\x14\x00\x16\x0d\x45\x8f\x92\x04\xf4\x93\xa7\x10\x7b\xb5\xe7\x33\x2e\xc0\x79\x0a\xc8\x2e\x14\xd1\x93\x4c\xf4\x40\x5e\x2b\x89\x51\xc0\xaa\x00\x88\xa4\x49\xb2\x0b\xa9\x03\x60\x90\x65\xff\x84\x3b\xd2\xf1\x04\xdc\xb8\x00\x30\x19\xaf\x91\xe9\xac\x98\x05\x49\xa5\x17\xe2\x3b\x72\x80\x4b\x90\xe3\x33\x85\x51\x49\x6a\xa4\x74\x83\xe5\xed\x2d\x19\x40\x3a\xcb\xa8\x2c\x85\xec\x5a\xdd\x73\x4d\xa5\x0c\x1e\x16\x5b\x10\x29\x68\xe4\x25\xa1\x1d\xb4\x6e\x9d\x56\x72\x12\xd0\xe8\x6f\x9c\x62\xee\x93\x1d\xaf\xd1\x2f\x9f\xd9\xbc\x7d\x6e\x9b\xcd\xfa\xa5\x6d\xfe\xaf\x73\x13\x60\x44\x3d\xd0\x63\x70\x46\xcc\x40\x80\xbd\x22\xdd\x3d\xd3\x7e\x89\x9e\xf1\x16\xb9\x17\x79\x67\xff\xf2\xe5\x32\x57\x3a\x63\x30\xdd\xfa\x1d\xca\x7a\x88\xa1\xde\x29\x5b\x5f\xe7\xa9\x2e\x23\x97\xf0\x91\x35\x18\x0e\xf1\x28\x08\x83\x2d\xff\x42\x59\x55\xd9\x37\xbd\xfe\xfa\x3d\x1f\xe0\xcf\x89\xd1\xe5\x5f\xe9\x48\x4e\xe0\xdc\xfa\x27\x00\x00\xff\xff\x82\x25\x2d\x50\x84\x02\x00\x00") + +func hypershiftOperatorOperatorDeploymentYamlBytes() ([]byte, error) { + return bindataRead( + _hypershiftOperatorOperatorDeploymentYaml, + "hypershift-operator/operator-deployment.yaml", + ) +} + +func hypershiftOperatorOperatorDeploymentYaml() (*asset, error) { + bytes, err := hypershiftOperatorOperatorDeploymentYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "hypershift-operator/operator-deployment.yaml", size: 644, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x47, 0xcf, 0xea, 0xce, 0x14, 0x21, 0x31, 0xae, 0x9d, 0x10, 0xe2, 0xbf, 0x63, 0xe0, 0xfa, 0x73, 0x98, 0x4e, 0xad, 0x9e, 0x1b, 0xaf, 0x68, 0x9b, 0x49, 0x6d, 0x3a, 0x26, 0xb3, 0x81, 0x78, 0x44}} + return a, nil +} + +var _hypershift_operatorGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x57\x4d\x6f\xe3\x36\x13\x3e\x8b\xbf\x82\xaf\x0e\x2f\xec\x22\x91\x1b\xa0\x87\xc2\x80\x0f\xd9\x6c\xd1\x0d\xda\xee\x06\xc9\xa2\x97\x20\x28\x18\x6a\x1c\xb3\x91\x48\x82\xa4\xdc\xb8\x82\xff\x7b\x31\x22\x2d\x51\x92\xe3\xda\xd9\x16\xdd\x1c\x1c\x71\xbe\xe7\xe1\x33\x23\x5b\x33\xfe\xcc\x9e\x80\x32\x6b\xc1\x59\x42\x44\xa9\x95\x71\x74\x42\x12\xa6\xb5\x5d\x5f\xd0\xf4\xf9\x7b\x9b\x09\x35\x63\x5a\xcc\x50\x34\x5b\x5f\xa4\x24\xe1\xca\xc0\x40\x89\x22\xaf\x34\x8f\x8c\x0f\x94\x28\xf2\x4a\xa6\x05\xbc\x38\x90\x56\x28\x39\x88\xdf\xc9\xcf\x99\x16\x16\xcc\x1a\xcc\x4c\x3f\x3f\xa1\xce\xf6\x0d\x7c\xac\x12\x1c\xeb\x87\x28\x19\x5f\x09\x09\x66\xd3\xf9\xa1\x51\x63\x3e\x25\xc4\x6d\x34\xd0\x0f\x1b\x0d\xe6\x6e\x25\x96\xee\x23\x2b\xc1\x6a\xc6\x81\x5a\x67\x2a\xee\x68\x4d\x12\x94\xe1\x51\xc8\x27\xb2\x25\x64\x59\x49\x4e\x27\x6a\x9f\xd3\x94\xbe\xab\x44\x91\x4f\xa6\xf4\x1b\x0f\x47\xd6\xc5\xab\x49\x22\xdb\xc3\x7c\x41\xff\x3f\xb4\xa8\x49\x92\x7c\xde\x68\xf8\x05\x1c\x9b\x53\xdf\x48\xb6\x13\xa0\x32\xf9\x49\xc8\x7c\x4e\xfd\x5f\xda\xfa\xa5\x67\xa8\xbb\xbc\xb9\xfe\x15\x0c\x22\x31\xa7\x21\xf2\x8f\x46\x55\x1a\xcd\xd0\x60\x8b\x1f\x9f\x1e\x7f\x07\xee\x7a\x09\x3a\x51\x93\x02\xcd\xe7\x54\x65\xb1\xdb\x96\x24\x06\x5c\x65\x24\x6d\x1b\x40\x1c\x06\xc8\x7d\xd2\x60\x98\x53\xe6\x3d\xe8\x42\x6d\x4a\x90\x6e\x00\xa1\xef\x1c\xff\x02\x96\xc9\xce\xe5\xba\x44\xbe\x1d\x42\x78\x1c\x3c\x82\xda\xd3\x32\x8b\x12\xd7\x24\xc9\xdb\xd3\x19\x05\x63\x10\x71\x09\x7f\x74\x36\x93\xb2\xb2\xee\x12\x29\x7e\x0b\x2c\x07\x33\x49\x57\x98\xcd\x62\xb6\x73\x15\xd2\xcd\x76\x0f\xe7\x5d\xb8\x6c\xc3\xca\x22\x9d\x4e\x49\x22\x96\x4d\xe4\xff\x2d\xa8\x14\x05\xe6\x4c\x34\x93\x82\x4f\xc0\x98\x69\x83\x5a\xe4\xd4\x01\xb0\x08\xe8\x7a\x1c\x63\x9b\x3b\x0d\x3c\xfb\x0c\xa5\x2e\x98\x03\x7f\xba\x52\xd2\x31\x64\xaf\xbd\xff\xf6\x21\xf3\x38\x61\x80\x1e\x72\xed\xf5\x74\xb1\x0e\xdc\xcf\x1d\x98\xb5\xe0\x70\xc9\xb9\xaa\x5e\xb9\xa3\x63\x6e\xa2\x1f\x66\x4c\xfc\x41\x9a\x9a\x24\x96\xc5\xb4\xef\xeb\x4f\xe4\x7e\xdf\xf9\x1f\x1f\x80\x06\x85\x79\x7c\x4f\x67\xdd\x6c\xf8\x0a\x76\xc4\x48\xc7\x43\x62\xd9\x01\xf4\xaf\x8a\xca\x3a\x30\xb7\xaa\xd8\x6d\x98\xfa\x20\xcc\x91\x7d\x84\xb1\x5f\xa7\x59\x1c\xac\x26\x89\x51\x05\xc4\x64\x8f\xd4\x27\xb2\x9d\x7b\x4f\x0c\x78\x02\xdd\x43\xff\xe8\x75\x1c\x02\xef\x84\xcc\x85\x7c\x8a\x38\x18\x77\x44\xe9\xbe\x46\x49\x32\x60\xd6\x7e\xc2\x1d\x26\xef\xb8\x86\x83\xe0\xee\xea\xac\x49\xf2\x18\x1e\x91\xc9\xaf\x1a\x9e\xc8\xe6\x71\x80\x31\xa3\x43\xae\xb7\xaf\xf4\x7d\x17\xde\x92\x37\xc1\xdc\xb7\xb0\x6c\xf3\x84\x73\x1d\xca\x68\xd2\xce\x69\x8a\xda\x8c\x55\x6e\xa5\x8c\xf8\x93\x39\xa1\x64\xe6\x5f\xb4\xbe\xe0\xae\xab\xb8\xa7\x74\x30\x3c\x2a\x46\xac\xf7\xa2\x49\xee\xaa\xa6\x74\x3b\xa7\xf7\x0f\xa1\x92\x20\x6a\x2a\x69\x3e\x62\xec\xf6\x2e\x82\x78\x4e\xd5\x80\x16\x6d\xba\xc1\xa0\xef\xb1\xea\xe6\x7e\x3b\x9e\xf1\x40\x83\x3d\x34\xff\xa0\xac\x83\x3c\x74\x68\xaf\x2a\xeb\x54\x79\x0b\x56\x55\x86\xc3\x7b\x58\x0a\x29\x10\xb6\x83\xb3\x7f\x5c\x88\xde\x0b\xb0\xf7\x05\x2a\x7b\x35\x6b\xdd\x36\x80\xfb\xe0\x35\xb3\xe3\x96\x45\x27\xcb\x94\x06\xe9\x9f\x84\xfa\x6d\xd5\x54\x1f\x36\x88\x6d\xd7\xc7\x18\xa9\x8f\x2a\x87\x1b\xa5\x8a\xb7\x81\xf4\xb7\xde\x5f\x2b\x3e\x52\xe5\xa0\xb1\xf0\x03\xd0\x04\x06\x28\xe9\x8c\x2a\x6e\x0a\x26\xe1\x4b\x88\x74\x44\x98\x37\x82\xc5\x4d\x8e\x9b\xf0\x5f\x27\x93\xef\x40\x63\x07\xb6\xf7\x42\xe2\x26\xcf\x7e\x66\x8f\x50\x58\xba\xe8\xde\x4b\xb1\x94\x96\x4c\xdf\xfb\x2f\x34\x0f\xfe\x5f\xbd\x6d\x26\xb9\x33\xba\x4f\x03\x5b\xb3\x97\xf3\xf0\xbb\x61\x7d\xc1\x0a\xbd\x62\xdf\xa5\x0f\x74\x41\xd3\x70\x6a\x7e\xc8\x78\x7a\x70\x93\xef\xb9\xb6\x1f\x5e\x1c\x18\xc9\x8a\x6b\xb9\x34\xec\x8b\x56\xc0\x49\x91\xbe\xd6\xcb\x83\xd0\x84\xc0\x26\x46\x0b\xe1\xbf\xbf\xbe\xbf\x02\x00\x00\xff\xff\xc6\x6a\x81\x39\xe9\x0e\x00\x00") + +func hypershift_operatorGoBytes() ([]byte, error) { + return bindataRead( + _hypershift_operatorGo, + "hypershift_operator.go", + ) +} + +func hypershift_operatorGo() (*asset, error) { + bytes, err := hypershift_operatorGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "hypershift_operator.go", size: 3817, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xef, 0x27, 0xc3, 0x10, 0xf1, 0x76, 0xae, 0x16, 0x65, 0x24, 0x31, 0x7e, 0x92, 0x3c, 0xeb, 0xbe, 0x42, 0xa5, 0x16, 0x6e, 0xfd, 0xf0, 0x7, 0xeb, 0x5d, 0xb9, 0x53, 0x45, 0x8b, 0x1b, 0x27, 0x33}} + return a, nil +} + +var _utilGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x52\xc1\x6e\xea\x30\x10\x3c\xc7\x5f\xe1\x97\x03\x8a\x11\x2f\x81\xdb\xd3\xab\x38\x20\x38\x55\x05\x24\x7a\xea\xd1\xa4\x1b\xba\x22\xb1\xad\xb5\x03\x8d\x10\xff\x5e\x39\x01\x92\x42\x91\x7a\xa8\xd4\xeb\xee\xcc\xac\x67\xc6\x46\xa6\x5b\xb9\x01\x2e\xad\x05\x67\x19\xc3\xc2\x68\x72\x3c\x62\x41\xb8\xae\x1c\xd8\x90\x05\x21\xea\x90\xb1\x40\x1a\x63\x77\x23\x1e\x6e\xff\xd9\x18\x75\x22\x0d\x26\x7e\x94\xec\x46\x21\x0b\x68\x2d\xd3\xab\xa5\x1f\x35\x4b\x69\x10\xde\x1d\x28\x8b\x5a\x5d\x49\xb4\xf3\xbf\xd2\xa0\x05\xda\x01\x25\x66\xbb\xf1\x3b\xfb\x19\xd0\x68\x75\xb8\x85\x4c\xdf\x50\x01\x55\x35\xa1\x74\x98\x27\x95\x2c\xf2\x90\x09\xc6\xb2\x52\xa5\xbc\x28\xad\x9b\x78\x5f\x2b\x90\xaf\x40\x51\xed\x91\x5b\x47\xa8\x36\x82\xa3\x8e\x9b\x39\x3f\xb0\x80\xc0\x95\xa4\x78\x6d\x39\x5e\xc0\xfe\xc4\x98\x9f\x15\x1a\xae\x10\xec\x78\xd2\x56\xb0\x9f\x81\xc9\x75\x55\x80\x72\x51\x21\x15\x66\x60\x5d\x2b\x2a\x78\xd4\x6f\x12\x8b\x5b\xdc\x80\x03\x91\x26\xe1\x2f\x6a\xfe\x7f\xcc\x6f\x10\x87\x23\x0b\x30\xf3\x30\xbf\xf6\x76\xfc\x6b\x5e\x26\xf3\xa7\x25\x3d\x3e\x2f\x17\x33\x48\xb5\x7f\xd8\xf9\xe0\x80\x8f\x86\x43\x11\x37\xe3\xa8\xa7\xc5\x43\xcd\xfd\x33\xe6\x0a\x73\x7f\xe6\xec\x4c\x61\x5e\x5f\x67\xc1\x91\x5d\xec\xf6\xf4\xc0\x2f\x2e\xa6\x7c\x60\xd3\xd2\x3a\x5d\xac\xc0\xea\x92\x52\x98\x41\x86\x0a\x1d\x6a\xf5\xa5\xc7\xfe\x55\xb5\xf1\x3d\x76\xc7\xf1\xf7\x08\x3f\x1f\x84\x91\x0a\xd3\x08\x88\x84\xcf\xa0\x8d\xa0\x5b\xe9\x34\x2f\xad\x03\x5a\xe9\x1c\xee\x74\xda\x7c\xf4\xb8\x03\xbc\x29\xf5\x16\xf2\x5b\xad\x7e\x04\x00\x00\xff\xff\x5f\xb1\xab\x9b\xdd\x03\x00\x00") + +func utilGoBytes() ([]byte, error) { + return bindataRead( + _utilGo, + "util.go", + ) +} + +func utilGo() (*asset, error) { + bytes, err := utilGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "util.go", size: 989, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0xf9, 0x64, 0x5c, 0x35, 0x6, 0x62, 0x74, 0xca, 0xbc, 0x26, 0x7f, 0xc6, 0x79, 0xc8, 0x86, 0xc8, 0xb, 0x2b, 0xd9, 0x1b, 0x29, 0xc8, 0xfc, 0x57, 0xc9, 0x59, 0x20, 0xb4, 0xbc, 0xce, 0x4c}} + 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) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; 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) +} + +// AssetString returns the asset contents as a string (instead of a []byte). +func AssetString(name string) (string, error) { + data, err := Asset(name) + return string(data), err +} + +// 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 +} + +// MustAssetString is like AssetString but panics when Asset would return an +// error. It simplifies safe initialization of global variables. +func MustAssetString(name string) string { + return string(MustAsset(name)) +} + +// 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) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; 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) +} + +// AssetDigest returns the digest of the file with the given name. It returns an +// error if the asset could not be found or the digest could not be loaded. +func AssetDigest(name string) ([sha256.Size]byte, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s can't read by error: %v", name, err) + } + return a.digest, nil + } + return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s not found", name) +} + +// Digests returns a map of all known files and their checksums. +func Digests() (map[string][sha256.Size]byte, error) { + mp := make(map[string][sha256.Size]byte, len(_bindata)) + for name := range _bindata { + a, err := _bindata[name]() + if err != nil { + return nil, err + } + mp[name] = a.digest + } + return mp, nil +} + +// 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){ + "cluster-api/cluster.x-k8s.io_clusters.yaml": clusterApiClusterXK8sIo_clustersYaml, + "cluster-api/cluster.x-k8s.io_machinedeployments.yaml": clusterApiClusterXK8sIo_machinedeploymentsYaml, + "cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml": clusterApiClusterXK8sIo_machinehealthchecksYaml, + "cluster-api/cluster.x-k8s.io_machines.yaml": clusterApiClusterXK8sIo_machinesYaml, + "cluster-api/cluster.x-k8s.io_machinesets.yaml": clusterApiClusterXK8sIo_machinesetsYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml": clusterApiInfrastructureClusterXK8sIo_awsclustersYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml": clusterApiInfrastructureClusterXK8sIo_awsmachinepoolsYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml": clusterApiInfrastructureClusterXK8sIo_awsmachinesYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml": clusterApiInfrastructureClusterXK8sIo_awsmachinetemplatesYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml": clusterApiInfrastructureClusterXK8sIo_awsmanagedclustersYaml, + "cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml": clusterApiInfrastructureClusterXK8sIo_awsmanagedmachinepoolsYaml, + "cluster_api.go": cluster_apiGo, + "hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml": hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYaml, + "hypershift-operator/hypershift.openshift.io_hostedclusters.yaml": hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYaml, + "hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml": hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYaml, + "hypershift-operator/hypershift.openshift.io_nodepools.yaml": hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml, + "hypershift-operator/operator-clusterrole.yaml": hypershiftOperatorOperatorClusterroleYaml, + "hypershift-operator/operator-deployment.yaml": hypershiftOperatorOperatorDeploymentYaml, + "hypershift_operator.go": hypershift_operatorGo, + "util.go": utilGo, +} + +// AssetDebug is true if the assets were built with the debug flag enabled. +const AssetDebug = false + +// 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, and +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + canonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(canonicalName, "/") + 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{ + "cluster-api": {nil, map[string]*bintree{ + "cluster.x-k8s.io_clusters.yaml": {clusterApiClusterXK8sIo_clustersYaml, map[string]*bintree{}}, + "cluster.x-k8s.io_machinedeployments.yaml": {clusterApiClusterXK8sIo_machinedeploymentsYaml, map[string]*bintree{}}, + "cluster.x-k8s.io_machinehealthchecks.yaml": {clusterApiClusterXK8sIo_machinehealthchecksYaml, map[string]*bintree{}}, + "cluster.x-k8s.io_machines.yaml": {clusterApiClusterXK8sIo_machinesYaml, map[string]*bintree{}}, + "cluster.x-k8s.io_machinesets.yaml": {clusterApiClusterXK8sIo_machinesetsYaml, map[string]*bintree{}}, + "infrastructure.cluster.x-k8s.io_awsclusters.yaml": {clusterApiInfrastructureClusterXK8sIo_awsclustersYaml, map[string]*bintree{}}, + "infrastructure.cluster.x-k8s.io_awsmachinepools.yaml": {clusterApiInfrastructureClusterXK8sIo_awsmachinepoolsYaml, map[string]*bintree{}}, + "infrastructure.cluster.x-k8s.io_awsmachines.yaml": {clusterApiInfrastructureClusterXK8sIo_awsmachinesYaml, map[string]*bintree{}}, + "infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml": {clusterApiInfrastructureClusterXK8sIo_awsmachinetemplatesYaml, map[string]*bintree{}}, + "infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml": {clusterApiInfrastructureClusterXK8sIo_awsmanagedclustersYaml, map[string]*bintree{}}, + "infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml": {clusterApiInfrastructureClusterXK8sIo_awsmanagedmachinepoolsYaml, map[string]*bintree{}}, + }}, + "cluster_api.go": {cluster_apiGo, map[string]*bintree{}}, + "hypershift-operator": {nil, map[string]*bintree{ + "hypershift.openshift.io_externalinfraclusters.yaml": {hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYaml, map[string]*bintree{}}, + "hypershift.openshift.io_hostedclusters.yaml": {hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYaml, map[string]*bintree{}}, + "hypershift.openshift.io_hostedcontrolplanes.yaml": {hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYaml, map[string]*bintree{}}, + "hypershift.openshift.io_nodepools.yaml": {hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml, map[string]*bintree{}}, + "operator-clusterrole.yaml": {hypershiftOperatorOperatorClusterroleYaml, map[string]*bintree{}}, + "operator-deployment.yaml": {hypershiftOperatorOperatorDeploymentYaml, map[string]*bintree{}}, + }}, + "hypershift_operator.go": {hypershift_operatorGo, map[string]*bintree{}}, + "util.go": {utilGo, 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 + } + return os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) +} + +// 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 { + canonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...) +} diff --git a/config/cluster-api/cluster.x-k8s.io_clusters.yaml b/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml similarity index 99% rename from config/cluster-api/cluster.x-k8s.io_clusters.yaml rename to internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml index 12aae4ef9357..ae4b56da5513 100644 --- a/config/cluster-api/cluster.x-k8s.io_clusters.yaml +++ b/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/cluster-api/cluster.x-k8s.io_machinedeployments.yaml b/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml similarity index 99% rename from config/cluster-api/cluster.x-k8s.io_machinedeployments.yaml rename to internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml index c28488a54d7e..dd5145bf0edc 100644 --- a/config/cluster-api/cluster.x-k8s.io_machinedeployments.yaml +++ b/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml b/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml similarity index 99% rename from config/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml rename to internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml index 01bdc5c59d07..af66f81a5a12 100644 --- a/config/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml +++ b/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/cluster-api/cluster.x-k8s.io_machines.yaml b/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml similarity index 99% rename from config/cluster-api/cluster.x-k8s.io_machines.yaml rename to internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml index 5b425d15db8a..3c734734de2c 100644 --- a/config/cluster-api/cluster.x-k8s.io_machines.yaml +++ b/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/cluster-api/cluster.x-k8s.io_machinesets.yaml b/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml similarity index 99% rename from config/cluster-api/cluster.x-k8s.io_machinesets.yaml rename to internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml index 57d0c176515e..4dad9595b92f 100644 --- a/config/cluster-api/cluster.x-k8s.io_machinesets.yaml +++ b/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml similarity index 99% rename from config/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml rename to internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml index 3ca2f31ad216..9e19d5df9617 100644 --- a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml +++ b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml similarity index 99% rename from config/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml rename to internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml index 31abec835368..4fba93192ae3 100644 --- a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml +++ b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml similarity index 99% rename from config/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml rename to internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml index 5f7cda140b11..e6ec221978aa 100644 --- a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml +++ b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml similarity index 99% rename from config/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml rename to internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml index 23d990f4b56f..03edb1f1428b 100644 --- a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml +++ b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml similarity index 99% rename from config/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml rename to internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml index e776b97cb752..7de9b4d53a12 100644 --- a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml +++ b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml similarity index 99% rename from config/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml rename to internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml index bc6621a13561..546fb3e5e4f3 100644 --- a/config/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml +++ b/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/internal/cmd/install/assets/cluster_api.go b/internal/cmd/install/assets/cluster_api.go new file mode 100644 index 000000000000..37116bd45137 --- /dev/null +++ b/internal/cmd/install/assets/cluster_api.go @@ -0,0 +1,69 @@ +package assets + +import apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + +type ClusterAPIClustersCustomResourceDefinition struct{} + +func (o ClusterAPIClustersCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/cluster.x-k8s.io_clusters.yaml")) +} + +type ClusterAPIMachineDeploymentsCustomResourceDefinition struct{} + +func (o ClusterAPIMachineDeploymentsCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/cluster.x-k8s.io_machinedeployments.yaml")) +} + +type ClusterAPIMachineHealthChecksCustomResourceDefinition struct{} + +func (o ClusterAPIMachineHealthChecksCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml")) +} + +type ClusterAPIMachinesCustomResourceDefinition struct{} + +func (o ClusterAPIMachinesCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/cluster.x-k8s.io_machines.yaml")) +} + +type ClusterAPIMachineSetsCustomResourceDefinition struct{} + +func (o ClusterAPIMachineSetsCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/cluster.x-k8s.io_machinesets.yaml")) +} + +type ClusterAPIAWSClustersCustomResourceDefinition struct{} + +func (o ClusterAPIAWSClustersCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml")) +} + +type ClusterAPIAWSMachinePoolsCustomResourceDefinition struct{} + +func (o ClusterAPIAWSMachinePoolsCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml")) +} + +type ClusterAPIAWSMachinesCustomResourceDefinition struct{} + +func (o ClusterAPIAWSMachinesCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml")) +} + +type ClusterAPIAWSMachineTemplatesCustomResourceDefinition struct{} + +func (o ClusterAPIAWSMachineTemplatesCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml")) +} + +type ClusterAPIAWSManagedClustersCustomResourceDefinition struct{} + +func (o ClusterAPIAWSManagedClustersCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml")) +} + +type ClusterAPIAWSManagedMachinePoolsCustomResourceDefinition struct{} + +func (o ClusterAPIAWSManagedMachinePoolsCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml")) +} diff --git a/config/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml b/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml similarity index 99% rename from config/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml rename to internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml index aae3000599a4..0cbd28651221 100644 --- a/config/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml +++ b/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml b/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml similarity index 99% rename from config/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml rename to internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml index 5b490c2c1e89..b4a33a5bdd8d 100644 --- a/config/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml +++ b/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml b/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml similarity index 99% rename from config/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml rename to internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml index f4a25883e968..c9c1b4358712 100644 --- a/config/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml +++ b/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/hypershift-operator/hypershift.openshift.io_nodepools.yaml b/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml similarity index 99% rename from config/hypershift-operator/hypershift.openshift.io_nodepools.yaml rename to internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml index 0f22458239d9..107fe8bb5fa9 100644 --- a/config/hypershift-operator/hypershift.openshift.io_nodepools.yaml +++ b/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml @@ -1,5 +1,3 @@ - ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/config/hypershift-operator/operator-clusterrole.yaml b/internal/cmd/install/assets/hypershift-operator/operator-clusterrole.yaml similarity index 100% rename from config/hypershift-operator/operator-clusterrole.yaml rename to internal/cmd/install/assets/hypershift-operator/operator-clusterrole.yaml diff --git a/config/hypershift-operator/operator-deployment.yaml b/internal/cmd/install/assets/hypershift-operator/operator-deployment.yaml similarity index 100% rename from config/hypershift-operator/operator-deployment.yaml rename to internal/cmd/install/assets/hypershift-operator/operator-deployment.yaml diff --git a/internal/cmd/install/assets/hypershift_operator.go b/internal/cmd/install/assets/hypershift_operator.go new file mode 100644 index 000000000000..4a6739649bcc --- /dev/null +++ b/internal/cmd/install/assets/hypershift_operator.go @@ -0,0 +1,133 @@ +package assets + +import ( + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +type HyperShiftNamespace struct { + Name string +} + +func (o HyperShiftNamespace) Build() *corev1.Namespace { + namespace := &corev1.Namespace{ + TypeMeta: metav1.TypeMeta{ + Kind: "Namespace", + APIVersion: corev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: o.Name, + }, + } + return namespace +} + +type HyperShiftOperatorDeployment struct { + Namespace string + OperatorImage string +} + +func (o HyperShiftOperatorDeployment) Build() *appsv1.Deployment { + deployment, err := newDeployment(mustAssetReader("hypershift-operator/operator-deployment.yaml")) + if err != nil { + panic(err) + } + deployment.Namespace = o.Namespace + deployment.Spec.Template.Spec.Containers[0].Image = o.OperatorImage + return deployment +} + +type HyperShiftOperatorServiceAccount struct { + Namespace string +} + +func (o HyperShiftOperatorServiceAccount) Build() *corev1.ServiceAccount { + sa := &corev1.ServiceAccount{ + TypeMeta: metav1.TypeMeta{ + Kind: "ServiceAccount", + APIVersion: corev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: o.Namespace, + Name: "operator", + }, + } + return sa +} + +type HyperShiftOperatorClusterRole struct{} + +func (o HyperShiftOperatorClusterRole) Build() *rbacv1.ClusterRole { + role, err := newClusterRole(mustAssetReader("hypershift-operator/operator-clusterrole.yaml")) + if err != nil { + panic(err) + } + return role +} + +type HyperShiftOperatorClusterRoleBinding struct { + ClusterRole *rbacv1.ClusterRole + ServiceAccount *corev1.ServiceAccount +} + +func (o HyperShiftOperatorClusterRoleBinding) Build() *rbacv1.ClusterRoleBinding { + binding := &rbacv1.ClusterRoleBinding{ + TypeMeta: metav1.TypeMeta{ + Kind: "ClusterRoleBinding", + APIVersion: rbacv1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "hypershift-operator", + }, + RoleRef: rbacv1.RoleRef{ + APIGroup: "rbac.authorization.k8s.io", + Kind: "ClusterRole", + Name: o.ClusterRole.Name, + }, + Subjects: []rbacv1.Subject{ + { + Kind: "ServiceAccount", + Name: o.ServiceAccount.Name, + Namespace: o.ServiceAccount.Namespace, + }, + }, + } + return binding +} + +type HyperShiftHostedClustersCustomResourceDefinition struct{} + +func (o HyperShiftHostedClustersCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("hypershift-operator/hypershift.openshift.io_hostedclusters.yaml")) +} + +type HyperShiftNodePoolsCustomResourceDefinition struct{} + +func (o HyperShiftNodePoolsCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + return mustCustomResourceDefinition(mustAssetReader("hypershift-operator/hypershift.openshift.io_nodepools.yaml")) +} + +type HyperShiftHostedControlPlaneCustomResourceDefinition struct{} + +func (o HyperShiftHostedControlPlaneCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + crd := mustCustomResourceDefinition(mustAssetReader("hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml")) + if crd.Labels == nil { + crd.Labels = map[string]string{} + } + crd.Labels["cluster.x-k8s.io/v1alpha4"] = "v1alpha1" + return crd +} + +type HyperShiftExternalInfraClustersCustomResourceDefinition struct{} + +func (o HyperShiftExternalInfraClustersCustomResourceDefinition) Build() *apiextensionsv1.CustomResourceDefinition { + crd := mustCustomResourceDefinition(mustAssetReader("hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml")) + if crd.Labels == nil { + crd.Labels = map[string]string{} + } + crd.Labels["cluster.x-k8s.io/v1alpha4"] = "v1alpha1" + return crd +} diff --git a/internal/cmd/install/assets/util.go b/internal/cmd/install/assets/util.go new file mode 100644 index 000000000000..87122f10be25 --- /dev/null +++ b/internal/cmd/install/assets/util.go @@ -0,0 +1,41 @@ +package assets + +import ( + "bytes" + "io" + + appsv1 "k8s.io/api/apps/v1" + rbacv1 "k8s.io/api/rbac/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + "k8s.io/apimachinery/pkg/util/yaml" +) + +func mustAssetReader(asset string) io.Reader { + return bytes.NewReader(MustAsset(asset)) +} + +func newDeployment(manifest io.Reader) (*appsv1.Deployment, error) { + o := appsv1.Deployment{} + if err := yaml.NewYAMLOrJSONDecoder(manifest, 100).Decode(&o); err != nil { + return nil, err + } + + return &o, nil +} + +func mustCustomResourceDefinition(manifest io.Reader) *apiextensionsv1.CustomResourceDefinition { + o := apiextensionsv1.CustomResourceDefinition{} + if err := yaml.NewYAMLOrJSONDecoder(manifest, 100).Decode(&o); err != nil { + panic(err) + } + return &o +} + +func newClusterRole(manifest io.Reader) (*rbacv1.ClusterRole, error) { + o := rbacv1.ClusterRole{} + if err := yaml.NewYAMLOrJSONDecoder(manifest, 100).Decode(&o); err != nil { + return nil, err + } + + return &o, nil +} diff --git a/internal/cmd/install/install.go b/internal/cmd/install/install.go new file mode 100644 index 000000000000..090413bacdc2 --- /dev/null +++ b/internal/cmd/install/install.go @@ -0,0 +1,184 @@ +/* + + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package install + +import ( + "fmt" + "os" + + configv1 "github.com/openshift/api/config/v1" + operatorv1 "github.com/openshift/api/operator/v1" + routev1 "github.com/openshift/api/route/v1" + securityv1 "github.com/openshift/api/security/v1" + "github.com/spf13/cobra" + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer/json" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + capiaws "sigs.k8s.io/cluster-api-provider-aws/api/v1alpha3" + capiv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + + hyperv1 "openshift.io/hypershift/api/v1alpha1" + "openshift.io/hypershift/internal/cmd/install/assets" +) + +var ( + scheme = runtime.NewScheme() + yamlSerializer = json.NewSerializerWithOptions( + json.DefaultMetaFactory, scheme, scheme, + json.SerializerOptions{Yaml: true, Pretty: true, Strict: true}, + ) +) + +func init() { + capiaws.AddToScheme(scheme) + clientgoscheme.AddToScheme(scheme) + hyperv1.AddToScheme(scheme) + capiv1.AddToScheme(scheme) + configv1.AddToScheme(scheme) + securityv1.AddToScheme(scheme) + operatorv1.AddToScheme(scheme) + routev1.AddToScheme(scheme) + rbacv1.AddToScheme(scheme) + corev1.AddToScheme(scheme) + apiextensionsv1.AddToScheme(scheme) +} + +type Options struct { + Namespace string + HyperShiftImage string + CAPIManagerImage string + CAPIProviderImage string + + Output string +} + +func NewCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "install", + Short: "Installs the HyperShift operator", + } + + var opts Options + + cmd.Flags().StringVar(&opts.Namespace, "namespace", "hypershift", "The namespace in which to install HyperShift") + cmd.Flags().StringVar(&opts.HyperShiftImage, "hypershift-image", "registry.ci.openshift.org/hypershift/hypershift:latest", "The HyperShift image to deploy") + cmd.Flags().StringVar(&opts.CAPIManagerImage, "capi-manager-image", "quay.io/hypershift/cluster-api:hypershift", "The CAPI Manager image to deploy") + cmd.Flags().StringVar(&opts.CAPIProviderImage, "capi-provider-image", "quay.io/hypershift/cluster-api-provider-aws:master", "The CAPI Provider image to deploy") + cmd.Flags().StringVar(&opts.Output, "output", "", "Render the resources to be installed as YAML instead of applying them") + + cmd.Run = func(cmd *cobra.Command, args []string) { + var objects []runtime.Object + + objects = append(objects, buildHyperShiftOperatorManifests(opts)...) + objects = append(objects, buildClusterAPIManifests()...) + + for _, object := range objects { + err := yamlSerializer.Encode(object, os.Stdout) + if err != nil { + panic(err) + } + fmt.Println("---") + } + } + + return cmd +} + +func buildHyperShiftOperatorManifests(opts Options) []runtime.Object { + var objects []runtime.Object + + hostedClustersCRD := assets.HyperShiftHostedClustersCustomResourceDefinition{}.Build() + objects = append(objects, hostedClustersCRD) + + nodePoolsCRD := assets.HyperShiftNodePoolsCustomResourceDefinition{}.Build() + objects = append(objects, nodePoolsCRD) + + hostedControlPlanesCRD := assets.HyperShiftHostedControlPlaneCustomResourceDefinition{}.Build() + objects = append(objects, hostedControlPlanesCRD) + + externalInfraClustersCRD := assets.HyperShiftExternalInfraClustersCustomResourceDefinition{}.Build() + objects = append(objects, externalInfraClustersCRD) + + namespace := assets.HyperShiftNamespace{ + Name: opts.Namespace, + }.Build() + objects = append(objects, namespace) + + operatorServiceAccount := assets.HyperShiftOperatorServiceAccount{ + Namespace: namespace.Name, + }.Build() + objects = append(objects, operatorServiceAccount) + + operatorClusterRole := assets.HyperShiftOperatorClusterRole{}.Build() + objects = append(objects, operatorClusterRole) + + operatorClusterRoleBinding := assets.HyperShiftOperatorClusterRoleBinding{ + ClusterRole: operatorClusterRole, + ServiceAccount: operatorServiceAccount, + }.Build() + objects = append(objects, operatorClusterRoleBinding) + + deployment := assets.HyperShiftOperatorDeployment{ + Namespace: namespace.Name, + OperatorImage: opts.HyperShiftImage, + }.Build() + objects = append(objects, deployment) + + return objects +} + +func buildClusterAPIManifests() []runtime.Object { + var objects []runtime.Object + + clustersCRD := assets.ClusterAPIClustersCustomResourceDefinition{}.Build() + objects = append(objects, clustersCRD) + + machineDeploymentsCRD := assets.ClusterAPIMachineDeploymentsCustomResourceDefinition{}.Build() + objects = append(objects, machineDeploymentsCRD) + + machineHealthChecksCRD := assets.ClusterAPIMachineHealthChecksCustomResourceDefinition{}.Build() + objects = append(objects, machineHealthChecksCRD) + + machinesCRD := assets.ClusterAPIMachinesCustomResourceDefinition{}.Build() + objects = append(objects, machinesCRD) + + machineSetsCRD := assets.ClusterAPIMachineSetsCustomResourceDefinition{}.Build() + objects = append(objects, machineSetsCRD) + + awsClustersCRD := assets.ClusterAPIAWSClustersCustomResourceDefinition{}.Build() + objects = append(objects, awsClustersCRD) + + awsMachinePoolsCRD := assets.ClusterAPIAWSMachinePoolsCustomResourceDefinition{}.Build() + objects = append(objects, awsMachinePoolsCRD) + + awsMachinesCRD := assets.ClusterAPIAWSMachinesCustomResourceDefinition{}.Build() + objects = append(objects, awsMachinesCRD) + + awsMachineTemplatesCRD := assets.ClusterAPIAWSMachineTemplatesCustomResourceDefinition{}.Build() + objects = append(objects, awsMachineTemplatesCRD) + + awsManagedClustersCRD := assets.ClusterAPIAWSManagedClustersCustomResourceDefinition{}.Build() + objects = append(objects, awsManagedClustersCRD) + + awsManagedMachinePoolsCRD := assets.ClusterAPIAWSManagedMachinePoolsCustomResourceDefinition{}.Build() + objects = append(objects, awsManagedMachinePoolsCRD) + + return objects +} diff --git a/main.go b/main.go new file mode 100644 index 000000000000..00264a85d92f --- /dev/null +++ b/main.go @@ -0,0 +1,42 @@ +/* + + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" + + installcmd "openshift.io/hypershift/internal/cmd/install" +) + +func main() { + cmd := &cobra.Command{ + Use: "hypershift", + Run: func(cmd *cobra.Command, args []string) { + cmd.Help() + os.Exit(1) + }, + } + cmd.AddCommand(installcmd.NewCommand()) + + if err := cmd.Execute(); err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.Exit(1) + } +} From 9cf2f1df345300f3e6db081fc4ebf6c4fc44d0df Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Tue, 9 Feb 2021 09:33:53 -0500 Subject: [PATCH 02/20] cli: convert more resources to Go --- internal/cmd/install/assets/bindata.go | 66 ++------ .../operator-clusterrole.yaml | 95 ----------- .../operator-deployment.yaml | 27 ---- .../cmd/install/assets/hypershift_operator.go | 152 ++++++++++++++++-- internal/cmd/install/assets/util.go | 20 +-- internal/cmd/install/install.go | 98 +++++------ 6 files changed, 188 insertions(+), 270 deletions(-) delete mode 100644 internal/cmd/install/assets/hypershift-operator/operator-clusterrole.yaml delete mode 100644 internal/cmd/install/assets/hypershift-operator/operator-deployment.yaml diff --git a/internal/cmd/install/assets/bindata.go b/internal/cmd/install/assets/bindata.go index 526191e1f0cb..9eb124f88811 100644 --- a/internal/cmd/install/assets/bindata.go +++ b/internal/cmd/install/assets/bindata.go @@ -16,10 +16,8 @@ // internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml (4.157kB) // internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml (4.494kB) // internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml (5.227kB) -// internal/cmd/install/assets/hypershift-operator/operator-clusterrole.yaml (1.421kB) -// internal/cmd/install/assets/hypershift-operator/operator-deployment.yaml (644B) -// internal/cmd/install/assets/hypershift_operator.go (3.817kB) -// internal/cmd/install/assets/util.go (989B) +// internal/cmd/install/assets/hypershift_operator.go (6.746kB) +// internal/cmd/install/assets/util.go (548B) package assets @@ -408,47 +406,7 @@ func hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml() (*asset, error) { return a, nil } -var _hypershiftOperatorOperatorClusterroleYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x94\xb1\x8e\xdb\x30\x0c\x86\x77\x3f\x85\x70\xcb\x01\x05\xa2\x43\xb7\xc2\x6b\x87\xee\x45\xd1\x9d\x91\x98\x98\x38\x49\x14\x48\x2a\x4d\xfa\xf4\x85\x63\xbb\x3d\xd4\x09\xea\x06\x37\x99\xa2\xa9\xcf\xe4\x4f\xd2\x50\xe9\x3b\x8a\x12\x97\xde\xc9\x1e\x82\x87\x66\x03\x0b\xfd\x04\x23\x2e\xfe\xf5\x93\x7a\xe2\x97\xd3\xc7\xee\x95\x4a\xec\xdd\xe7\xd4\xd4\x50\xbe\x72\xc2\x2e\xa3\x41\x04\x83\xbe\x73\x2e\x08\x5e\x2f\x7c\xa3\x8c\x6a\x90\x6b\xef\x4a\x4b\xa9\x73\xae\x40\xc6\xde\x0d\x97\x8a\xa2\x03\x1d\x6c\xc7\x15\x05\x8c\xa5\x93\x96\x50\xfb\x6e\xe7\xa0\xd2\x17\xe1\x56\x75\x24\xed\xde\xc4\x7a\xae\x58\x26\x8b\xb8\x73\x4e\x50\xb9\x49\xc0\x39\xf0\xf9\xc3\x73\xe7\xdc\x09\x65\xff\xc6\xb1\xc2\x05\x2e\x07\x3a\xfe\x2f\xea\x88\x76\x7d\x26\xd2\xc9\xf8\x01\x16\x86\x35\x1d\x2a\xe1\xd9\xb0\x8c\x0a\xea\x2c\xd7\x1a\x1f\x9a\x1a\xe7\xc5\x19\xf1\x40\x85\x46\xb9\x74\x43\xfe\x7b\x66\x53\x13\xa8\x3e\x4c\xe2\xfb\xf3\xee\xf7\x77\xae\xe5\x99\x70\xaa\x09\x0a\xde\x8e\xa0\x72\x10\x50\x93\x16\xac\xc9\x9d\x98\x0c\x61\xa0\x82\x7a\xfb\x2d\x9e\xab\xdf\x42\x81\x18\x47\x15\xee\x32\x6e\x17\xb0\x76\x3e\xd4\xe7\x65\xae\xde\x65\x68\x84\x9b\xe1\xbb\x90\x14\x43\x13\xb2\xcb\x3f\x60\x4b\xd8\xd8\x4e\x3c\x5b\xe0\x32\xf6\x9c\x8a\x6d\x19\x91\xbb\x8b\xfb\x68\xd2\x4f\x4f\xeb\x9b\x78\xc2\x29\x9b\x65\xa5\x32\xd4\xe9\x58\x39\xfe\x31\x5e\x12\x1f\x97\x8a\x04\xe7\x0b\x85\x23\xce\x16\x64\xd4\x0a\x61\x3e\x2a\xca\x89\x02\x42\x08\xdc\x16\xfa\xec\xdb\x52\x38\xd4\x6b\x0a\x7f\x65\x1a\xb1\x26\xbe\x64\xdc\x26\x1e\x5a\x88\x7e\xfc\x8f\xed\x41\xd1\x07\x16\x64\xf5\x81\xf3\xa3\xda\xcd\xab\xf4\xc8\xf0\xfc\x0a\x00\x00\xff\xff\x0f\xa6\x42\x82\x8d\x05\x00\x00") - -func hypershiftOperatorOperatorClusterroleYamlBytes() ([]byte, error) { - return bindataRead( - _hypershiftOperatorOperatorClusterroleYaml, - "hypershift-operator/operator-clusterrole.yaml", - ) -} - -func hypershiftOperatorOperatorClusterroleYaml() (*asset, error) { - bytes, err := hypershiftOperatorOperatorClusterroleYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "hypershift-operator/operator-clusterrole.yaml", size: 1421, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0x61, 0xaf, 0xb8, 0xd9, 0x50, 0xb2, 0xa6, 0x9e, 0xbb, 0x84, 0x73, 0x34, 0xe3, 0xad, 0xa3, 0xca, 0x38, 0xa4, 0x4, 0x23, 0x7b, 0x76, 0x28, 0x90, 0x8a, 0x9, 0xa8, 0xb5, 0x75, 0x1c, 0xe3}} - return a, nil -} - -var _hypershiftOperatorOperatorDeploymentYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x52\x4d\x6b\xe3\x40\x0c\xbd\xfb\x57\x08\xb3\x87\x5d\x58\xaf\xc9\x75\x6e\x66\x9b\x9e\x9a\x60\x5a\x28\x94\x52\x8a\x32\x56\xe2\xa1\xf3\xc5\x8c\xec\xe2\x7f\x5f\x26\x1f\x13\x9b\x44\x27\xfb\xe9\xbd\xe7\x27\xc9\xe8\xd5\x2b\x85\xa8\x9c\x15\x80\xde\xc7\x7a\x5c\x15\x5f\xca\x76\x02\x1e\xc8\x6b\x37\x19\xb2\x5c\x18\x62\xec\x90\x51\x14\x00\x16\x0d\x45\x8f\x92\x04\xf4\x93\xa7\x10\x7b\xb5\xe7\x33\x2e\xc0\x79\x0a\xc8\x2e\x14\xd1\x93\x4c\xf4\x40\x5e\x2b\x89\x51\xc0\xaa\x00\x88\xa4\x49\xb2\x0b\xa9\x03\x60\x90\x65\xff\x84\x3b\xd2\xf1\x04\xdc\xb8\x00\x30\x19\xaf\x91\xe9\xac\x98\x05\x49\xa5\x17\xe2\x3b\x72\x80\x4b\x90\xe3\x33\x85\x51\x49\x6a\xa4\x74\x83\xe5\xed\x2d\x19\x40\x3a\xcb\xa8\x2c\x85\xec\x5a\xdd\x73\x4d\xa5\x0c\x1e\x16\x5b\x10\x29\x68\xe4\x25\xa1\x1d\xb4\x6e\x9d\x56\x72\x12\xd0\xe8\x6f\x9c\x62\xee\x93\x1d\xaf\xd1\x2f\x9f\xd9\xbc\x7d\x6e\x9b\xcd\xfa\xa5\x6d\xfe\xaf\x73\x13\x60\x44\x3d\xd0\x63\x70\x46\xcc\x40\x80\xbd\x22\xdd\x3d\xd3\x7e\x89\x9e\xf1\x16\xb9\x17\x79\x67\xff\xf2\xe5\x32\x57\x3a\x63\x30\xdd\xfa\x1d\xca\x7a\x88\xa1\xde\x29\x5b\x5f\xe7\xa9\x2e\x23\x97\xf0\x91\x35\x18\x0e\xf1\x28\x08\x83\x2d\xff\x42\x59\x55\xd9\x37\xbd\xfe\xfa\x3d\x1f\xe0\xcf\x89\xd1\xe5\x5f\xe9\x48\x4e\xe0\xdc\xfa\x27\x00\x00\xff\xff\x82\x25\x2d\x50\x84\x02\x00\x00") - -func hypershiftOperatorOperatorDeploymentYamlBytes() ([]byte, error) { - return bindataRead( - _hypershiftOperatorOperatorDeploymentYaml, - "hypershift-operator/operator-deployment.yaml", - ) -} - -func hypershiftOperatorOperatorDeploymentYaml() (*asset, error) { - bytes, err := hypershiftOperatorOperatorDeploymentYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "hypershift-operator/operator-deployment.yaml", size: 644, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x47, 0xcf, 0xea, 0xce, 0x14, 0x21, 0x31, 0xae, 0x9d, 0x10, 0xe2, 0xbf, 0x63, 0xe0, 0xfa, 0x73, 0x98, 0x4e, 0xad, 0x9e, 0x1b, 0xaf, 0x68, 0x9b, 0x49, 0x6d, 0x3a, 0x26, 0xb3, 0x81, 0x78, 0x44}} - return a, nil -} - -var _hypershift_operatorGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x57\x4d\x6f\xe3\x36\x13\x3e\x8b\xbf\x82\xaf\x0e\x2f\xec\x22\x91\x1b\xa0\x87\xc2\x80\x0f\xd9\x6c\xd1\x0d\xda\xee\x06\xc9\xa2\x97\x20\x28\x18\x6a\x1c\xb3\x91\x48\x82\xa4\xdc\xb8\x82\xff\x7b\x31\x22\x2d\x51\x92\xe3\xda\xd9\x16\xdd\x1c\x1c\x71\xbe\xe7\xe1\x33\x23\x5b\x33\xfe\xcc\x9e\x80\x32\x6b\xc1\x59\x42\x44\xa9\x95\x71\x74\x42\x12\xa6\xb5\x5d\x5f\xd0\xf4\xf9\x7b\x9b\x09\x35\x63\x5a\xcc\x50\x34\x5b\x5f\xa4\x24\xe1\xca\xc0\x40\x89\x22\xaf\x34\x8f\x8c\x0f\x94\x28\xf2\x4a\xa6\x05\xbc\x38\x90\x56\x28\x39\x88\xdf\xc9\xcf\x99\x16\x16\xcc\x1a\xcc\x4c\x3f\x3f\xa1\xce\xf6\x0d\x7c\xac\x12\x1c\xeb\x87\x28\x19\x5f\x09\x09\x66\xd3\xf9\xa1\x51\x63\x3e\x25\xc4\x6d\x34\xd0\x0f\x1b\x0d\xe6\x6e\x25\x96\xee\x23\x2b\xc1\x6a\xc6\x81\x5a\x67\x2a\xee\x68\x4d\x12\x94\xe1\x51\xc8\x27\xb2\x25\x64\x59\x49\x4e\x27\x6a\x9f\xd3\x94\xbe\xab\x44\x91\x4f\xa6\xf4\x1b\x0f\x47\xd6\xc5\xab\x49\x22\xdb\xc3\x7c\x41\xff\x3f\xb4\xa8\x49\x92\x7c\xde\x68\xf8\x05\x1c\x9b\x53\xdf\x48\xb6\x13\xa0\x32\xf9\x49\xc8\x7c\x4e\xfd\x5f\xda\xfa\xa5\x67\xa8\xbb\xbc\xb9\xfe\x15\x0c\x22\x31\xa7\x21\xf2\x8f\x46\x55\x1a\xcd\xd0\x60\x8b\x1f\x9f\x1e\x7f\x07\xee\x7a\x09\x3a\x51\x93\x02\xcd\xe7\x54\x65\xb1\xdb\x96\x24\x06\x5c\x65\x24\x6d\x1b\x40\x1c\x06\xc8\x7d\xd2\x60\x98\x53\xe6\x3d\xe8\x42\x6d\x4a\x90\x6e\x00\xa1\xef\x1c\xff\x02\x96\xc9\xce\xe5\xba\x44\xbe\x1d\x42\x78\x1c\x3c\x82\xda\xd3\x32\x8b\x12\xd7\x24\xc9\xdb\xd3\x19\x05\x63\x10\x71\x09\x7f\x74\x36\x93\xb2\xb2\xee\x12\x29\x7e\x0b\x2c\x07\x33\x49\x57\x98\xcd\x62\xb6\x73\x15\xd2\xcd\x76\x0f\xe7\x5d\xb8\x6c\xc3\xca\x22\x9d\x4e\x49\x22\x96\x4d\xe4\xff\x2d\xa8\x14\x05\xe6\x4c\x34\x93\x82\x4f\xc0\x98\x69\x83\x5a\xe4\xd4\x01\xb0\x08\xe8\x7a\x1c\x63\x9b\x3b\x0d\x3c\xfb\x0c\xa5\x2e\x98\x03\x7f\xba\x52\xd2\x31\x64\xaf\xbd\xff\xf6\x21\xf3\x38\x61\x80\x1e\x72\xed\xf5\x74\xb1\x0e\xdc\xcf\x1d\x98\xb5\xe0\x70\xc9\xb9\xaa\x5e\xb9\xa3\x63\x6e\xa2\x1f\x66\x4c\xfc\x41\x9a\x9a\x24\x96\xc5\xb4\xef\xeb\x4f\xe4\x7e\xdf\xf9\x1f\x1f\x80\x06\x85\x79\x7c\x4f\x67\xdd\x6c\xf8\x0a\x76\xc4\x48\xc7\x43\x62\xd9\x01\xf4\xaf\x8a\xca\x3a\x30\xb7\xaa\xd8\x6d\x98\xfa\x20\xcc\x91\x7d\x84\xb1\x5f\xa7\x59\x1c\xac\x26\x89\x51\x05\xc4\x64\x8f\xd4\x27\xb2\x9d\x7b\x4f\x0c\x78\x02\xdd\x43\xff\xe8\x75\x1c\x02\xef\x84\xcc\x85\x7c\x8a\x38\x18\x77\x44\xe9\xbe\x46\x49\x32\x60\xd6\x7e\xc2\x1d\x26\xef\xb8\x86\x83\xe0\xee\xea\xac\x49\xf2\x18\x1e\x91\xc9\xaf\x1a\x9e\xc8\xe6\x71\x80\x31\xa3\x43\xae\xb7\xaf\xf4\x7d\x17\xde\x92\x37\xc1\xdc\xb7\xb0\x6c\xf3\x84\x73\x1d\xca\x68\xd2\xce\x69\x8a\xda\x8c\x55\x6e\xa5\x8c\xf8\x93\x39\xa1\x64\xe6\x5f\xb4\xbe\xe0\xae\xab\xb8\xa7\x74\x30\x3c\x2a\x46\xac\xf7\xa2\x49\xee\xaa\xa6\x74\x3b\xa7\xf7\x0f\xa1\x92\x20\x6a\x2a\x69\x3e\x62\xec\xf6\x2e\x82\x78\x4e\xd5\x80\x16\x6d\xba\xc1\xa0\xef\xb1\xea\xe6\x7e\x3b\x9e\xf1\x40\x83\x3d\x34\xff\xa0\xac\x83\x3c\x74\x68\xaf\x2a\xeb\x54\x79\x0b\x56\x55\x86\xc3\x7b\x58\x0a\x29\x10\xb6\x83\xb3\x7f\x5c\x88\xde\x0b\xb0\xf7\x05\x2a\x7b\x35\x6b\xdd\x36\x80\xfb\xe0\x35\xb3\xe3\x96\x45\x27\xcb\x94\x06\xe9\x9f\x84\xfa\x6d\xd5\x54\x1f\x36\x88\x6d\xd7\xc7\x18\xa9\x8f\x2a\x87\x1b\xa5\x8a\xb7\x81\xf4\xb7\xde\x5f\x2b\x3e\x52\xe5\xa0\xb1\xf0\x03\xd0\x04\x06\x28\xe9\x8c\x2a\x6e\x0a\x26\xe1\x4b\x88\x74\x44\x98\x37\x82\xc5\x4d\x8e\x9b\xf0\x5f\x27\x93\xef\x40\x63\x07\xb6\xf7\x42\xe2\x26\xcf\x7e\x66\x8f\x50\x58\xba\xe8\xde\x4b\xb1\x94\x96\x4c\xdf\xfb\x2f\x34\x0f\xfe\x5f\xbd\x6d\x26\xb9\x33\xba\x4f\x03\x5b\xb3\x97\xf3\xf0\xbb\x61\x7d\xc1\x0a\xbd\x62\xdf\xa5\x0f\x74\x41\xd3\x70\x6a\x7e\xc8\x78\x7a\x70\x93\xef\xb9\xb6\x1f\x5e\x1c\x18\xc9\x8a\x6b\xb9\x34\xec\x8b\x56\xc0\x49\x91\xbe\xd6\xcb\x83\xd0\x84\xc0\x26\x46\x0b\xe1\xbf\xbf\xbe\xbf\x02\x00\x00\xff\xff\xc6\x6a\x81\x39\xe9\x0e\x00\x00") +var _hypershift_operatorGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x59\x5f\x6f\xdb\x38\x12\x7f\x96\x3e\x05\x21\x1c\x0a\xa7\x68\x64\xe4\xee\x1e\x0e\x02\xf2\xe0\xa6\xe9\x35\xd8\x4d\x6b\xc4\x45\x80\x45\x50\x14\x34\x35\xb6\xb9\x95\x48\x81\xa4\xdc\x78\x0d\x7f\xf7\x05\xff\x48\xa2\x2c\x59\x75\x5a\x37\x5b\x3d\x58\xe2\xfc\xe3\x70\x66\x38\xfc\x49\x2e\x30\xf9\x82\x97\x80\xb0\x94\xa0\x64\x18\xd2\xbc\xe0\x42\xa1\x51\x18\xe0\xa2\x90\xeb\x0b\x14\x7d\xf9\x9f\x8c\x29\x1f\xe3\x82\x8e\x35\x69\xbc\xbe\x88\xc2\x80\x70\x01\x7b\x4c\x4d\xb2\x4c\x31\xc7\x64\x8f\xa9\x49\x96\x89\x0b\x0a\x8f\x0a\x98\xa4\x9c\xed\xd9\x6f\xe8\xe7\xb8\xa0\x12\xc4\x1a\xc4\xb8\xf8\xb2\xd4\x3c\xd9\x16\xb0\xb6\x72\x50\xb8\x6d\x22\xc7\x64\x45\x19\x88\x4d\xa3\xa7\x85\x8c\xf8\x59\x18\xaa\x4d\x01\xe8\xdd\xa6\x00\x31\x5b\xd1\x85\x7a\x8f\x73\x90\x05\x26\x80\xa4\x12\x25\x51\x68\x1b\x06\x9a\xa6\x87\x94\x2d\xc3\x5d\x18\x2e\x4a\x46\xd0\x88\xf7\x29\x9d\xa1\xd7\x25\xcd\xd2\xd1\x19\x7a\x69\xc3\x11\x37\xf6\xb6\x61\xc0\xea\x41\x72\x89\x5e\xec\x4b\x6c\xc3\x20\xf8\xb8\x29\xe0\x16\x14\x4e\x90\x5d\x48\x5c\x11\x34\x33\xf8\x8d\xb2\x34\x41\xf6\x8a\x6a\xbd\xe8\x95\xe6\x4d\xa6\x37\xf7\x20\x74\x24\x12\xe4\x2c\xcf\xc8\x0a\x72\xf8\xbf\xe0\x65\xe1\x58\xf1\xcc\xac\x62\x74\xa6\x55\x76\xfa\xe7\xc3\xfc\x4f\x20\xaa\x35\x65\x43\x32\x93\xea\x79\x12\xc4\x8d\x9f\x95\xda\x2e\x0c\x04\xa8\x52\x30\x54\x2f\x49\x47\x66\x2f\x96\x1f\x0a\x10\x58\x71\xf1\x06\x8a\x8c\x6f\x72\x60\x6a\x2f\xa8\x36\x16\xe6\xea\xc4\x2b\x0c\x2a\xf5\x9b\x5c\x57\x63\x95\x80\x60\x06\x62\x4d\x09\x4c\x08\xe1\x25\x53\xb5\x62\x9b\xdc\x9f\xa7\xae\x43\x5e\xc2\x6c\x71\xc7\x9e\xb3\xdb\x30\x48\x9b\x91\x4e\x59\x47\x66\xfb\x84\x10\xda\xb4\x71\xe7\x83\xcd\x5a\xbd\xdc\x2a\xc2\x66\xd0\x8a\x75\x30\x2b\x80\x24\xa8\x33\xb5\x26\x1b\xeb\x77\x50\x64\x94\x60\x99\x20\xca\xd4\x7f\xfe\x3d\x55\x62\x74\x61\x12\x1c\xcc\x20\x03\xa2\xb8\x48\xd0\x0b\xe7\xd8\xef\x78\x0e\x59\x45\x36\xda\xc1\x2d\x56\x64\x65\xe8\x32\x41\x39\x2e\x1e\x6c\xa0\x3f\xd9\x9b\x95\x09\x22\x9d\xe7\x28\xd9\x77\xdf\x3a\xe8\x7e\x3f\x42\x5e\x64\x58\x41\x5d\x7f\x53\x9e\x56\xb4\xda\xd9\x23\xa2\x15\x04\xdf\xf2\xe6\xa0\x3b\xce\x93\xea\x66\x23\xd7\x78\xd3\x78\xb1\x57\x45\x55\x8d\xb7\xa9\x75\x1a\x82\x20\xb8\xe2\x4c\x61\xdd\x46\x64\x82\x1e\x3e\x39\x93\x35\xb1\xf2\xab\xba\xfb\x19\xef\xcd\xbb\xbe\x4c\x5d\xfb\x42\x3c\x6e\x95\x7c\x5b\x70\x5a\x66\xd9\x94\x67\x94\x6c\x9a\x15\x95\x59\x36\xc9\xbe\xe2\x8d\xac\x45\xaf\xd9\xda\xf3\xef\x9a\xad\xef\x71\xed\x9c\xe7\x5e\xe5\x60\x74\xfb\xc7\xe7\xf7\x93\xdb\xeb\xd9\x74\x72\x75\xdd\x78\x16\x04\xf7\x38\x2b\xe1\xad\xe0\x79\x52\xf7\x29\x6b\x6c\xc6\x4b\x61\x5b\x55\x75\xbd\xa5\x90\xa5\x77\xb0\x68\x24\x6d\x3e\x0d\xbd\x5d\x6a\xbe\xc6\x14\xab\x55\x82\x22\x5d\x02\x29\x56\x38\x66\xed\x76\xe6\xae\x9d\x37\xf0\x9e\x9b\xc7\xe6\xe9\x8a\xe7\x39\xd6\xfd\xf1\xa1\x2a\x96\x68\x5c\x4a\x31\x9e\x53\x36\x5e\xe9\x16\x20\x75\x0b\x38\xaf\xf3\xd0\x68\x4e\xc4\x52\x9a\x3c\x34\x9a\xa2\x64\xd1\x2b\x14\x9d\x9f\x7b\x6e\xa1\xe8\x5f\x23\x3f\x5e\x67\x56\xa2\x69\x11\x46\x58\x13\xbb\x73\xec\xfa\xea\x73\xd7\x6d\xa7\x8d\xb1\x81\x7e\xba\xd7\x01\xfb\x7a\x6a\xb7\x9d\x0e\x36\xc4\xb6\xc5\xee\x29\xb6\x37\xe3\x36\x0c\x24\xf6\xcf\xb0\x36\xff\x89\x07\x59\x5b\xf9\x19\x4e\xb3\x81\x86\x7b\xb8\x55\xb7\xf3\x24\xf1\x40\x7e\xae\xb2\x52\x2a\x10\x77\x3c\xab\x50\xc4\x76\x30\xfa\x9e\xbc\x17\x7a\x0b\x99\x62\xdf\xd8\x36\x0c\x84\xbe\xeb\xc8\x77\xd9\x4f\x39\x8b\xa2\xbe\x1d\x51\x87\xf1\xae\xcc\xc0\xf4\x39\x37\x89\xed\x3b\x9a\x6a\x4c\xd8\xcd\x3c\x99\xde\x98\x64\x48\x7f\xc7\x35\x66\x63\x5e\x00\xb3\x4f\x94\x57\x1b\xe1\x0e\xa4\xe9\x1f\x2d\x9d\x97\x15\xf7\x1e\xc4\xdc\x6e\xc4\x1e\xae\xfd\x1d\x98\x9a\x70\xb6\xa0\xcb\x53\x4d\xbb\x04\xa5\x77\x72\x46\xa5\xb9\x7f\xd5\x87\xe4\xb1\x9e\xb4\x60\x69\x6c\x91\xe8\xa0\x2b\xa4\x94\x8a\xe7\xc2\xb1\x52\x58\x50\x46\x95\x56\x3e\x49\x64\xdc\x09\x3e\xe7\x5c\x49\x25\x70\x11\x13\x5b\x33\xf1\xe3\xb9\xf3\xcd\x35\x27\x1d\x42\x25\x78\x56\x64\x98\xc1\x61\x29\xca\x16\x02\xdb\xba\x2e\xc5\x80\x9c\x03\xde\xf2\xb0\x04\x3c\x16\xf1\xb1\xd6\x70\x9a\xea\x68\x0e\xda\x3a\xbc\xb0\x7e\xc6\x33\x54\x65\xb5\xb9\x9e\x7d\x3b\x08\x5e\x2a\x78\xf6\x59\x25\x90\x52\x50\xb5\x39\x7e\xe2\x4a\x43\xd7\x1e\x3c\x2a\xc2\x99\x2e\x52\xca\xd4\x69\x8a\x3f\xd2\x2d\x2c\xc6\xa5\x5a\x71\x41\xff\xc2\x7a\x57\x1d\xb3\x23\x4f\x14\x8e\xa1\x39\xaa\xba\x5d\x83\x5e\xab\xb7\x05\x17\x74\x99\xe3\xa2\x21\x15\x3c\x6d\x0f\xc6\x19\x5f\xd6\x04\x09\x44\x80\x67\x80\xf1\x14\xbc\x51\x75\xc2\x49\x4f\xc1\x1c\xb7\xd8\x1e\xb7\x1d\xba\x6c\xef\x0d\xb7\xfe\xef\x58\xbb\x7e\x61\x19\x8c\x71\x83\x75\x4e\x94\x6a\x50\x24\x8d\x35\x98\x9c\x63\x09\xb1\x86\x0d\x5c\xc6\x84\xe7\xcf\x91\x69\xd7\xec\x7e\xca\x86\x6b\x43\x0f\x8d\x00\x8e\x03\x1f\xaf\x29\x4b\x29\x5b\x7a\x00\xd1\x07\x13\xfa\xa5\xbb\x0b\x22\x4e\xf2\x7e\xdd\xf5\x61\x10\xd7\x54\x7e\x6e\xc3\x60\xee\x1e\xfb\x11\x8e\x13\x7c\x22\xbe\xec\x1a\xe8\x62\x4c\x37\xd7\x29\xbf\x98\x7c\x03\x62\xf1\x0c\xcc\x4b\x93\x9b\xd9\x8d\xb7\xa1\x57\x60\x09\x1a\xe8\x5e\xaf\xda\xeb\xf4\x57\x19\xed\x21\x59\xee\xc7\x70\xef\xdb\x42\x69\x5c\xf7\xc1\x9e\x23\x79\x48\xcf\x8b\x66\x2f\x58\xf7\x41\xf3\xc0\x3b\x74\x0b\x7a\xf7\x48\x19\xde\xa1\xaa\x77\x85\xd1\x53\xf8\xef\xb8\x54\x90\xba\x15\xca\x2b\x03\xa5\xaa\x1d\xf7\xa6\x86\x52\x83\x40\xfc\x38\x13\xad\x6f\x45\xad\x2f\x96\xf1\xc1\x59\xb7\xf5\x02\xf2\x52\xaa\x43\x62\x23\xcd\x9c\x48\x09\xea\x0e\x70\x0a\x62\xd4\x57\x3b\xe3\x03\xd8\xfa\xf3\xca\x78\xef\x20\x8e\x8c\x37\x38\xcf\xa2\xb3\xb3\x9e\x48\xbd\xe7\x29\x4c\x39\xcf\xbe\x2f\x48\xdf\xd4\xfe\x55\xe3\xa3\x4f\xc4\x42\x3b\x3e\x10\x1a\x57\x01\x16\xff\x4e\x35\xfe\xfd\x91\x42\x3a\xc2\xcc\x77\x06\x8b\x88\x54\xf7\xc6\x9f\x5e\x4c\xde\x8b\x40\x13\xb6\x80\x2e\x10\x11\xa9\xfd\x88\x28\xd1\xe5\x25\x62\x34\xd3\x5e\x05\x3e\xb5\xe7\xab\xdd\xce\xec\xe4\x46\xe8\xa1\x03\xc8\xc7\xeb\x0b\x9c\x15\x2b\xfc\xdf\xe8\x13\xba\x44\x91\x1b\x99\x7f\x0e\x6c\x79\x10\x91\xf6\xa4\xed\xfa\x51\x81\x60\x38\xbb\xd1\x2f\x11\x3f\xd4\x02\x9e\x64\xe9\x57\x4d\x1e\xb8\x45\x98\x77\xaa\x4e\x43\xf8\xe7\xd3\xf7\x77\x00\x00\x00\xff\xff\xf9\x15\xa9\x11\x5a\x1a\x00\x00") func hypershift_operatorGoBytes() ([]byte, error) { return bindataRead( @@ -463,12 +421,12 @@ func hypershift_operatorGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "hypershift_operator.go", size: 3817, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xef, 0x27, 0xc3, 0x10, 0xf1, 0x76, 0xae, 0x16, 0x65, 0x24, 0x31, 0x7e, 0x92, 0x3c, 0xeb, 0xbe, 0x42, 0xa5, 0x16, 0x6e, 0xfd, 0xf0, 0x7, 0xeb, 0x5d, 0xb9, 0x53, 0x45, 0x8b, 0x1b, 0x27, 0x33}} + info := bindataFileInfo{name: "hypershift_operator.go", size: 6746, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfc, 0x6f, 0xe3, 0x95, 0x86, 0xba, 0xca, 0xc, 0xff, 0x46, 0xab, 0x43, 0x41, 0x7f, 0xed, 0x9d, 0x33, 0xaa, 0x82, 0x74, 0xb, 0x6c, 0xe3, 0xfc, 0x41, 0x19, 0xad, 0xa5, 0x46, 0x75, 0xc1, 0xff}} return a, nil } -var _utilGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x52\xc1\x6e\xea\x30\x10\x3c\xc7\x5f\xe1\x97\x03\x8a\x11\x2f\x81\xdb\xd3\xab\x38\x20\x38\x55\x05\x24\x7a\xea\xd1\xa4\x1b\xba\x22\xb1\xad\xb5\x03\x8d\x10\xff\x5e\x39\x01\x92\x42\x91\x7a\xa8\xd4\xeb\xee\xcc\xac\x67\xc6\x46\xa6\x5b\xb9\x01\x2e\xad\x05\x67\x19\xc3\xc2\x68\x72\x3c\x62\x41\xb8\xae\x1c\xd8\x90\x05\x21\xea\x90\xb1\x40\x1a\x63\x77\x23\x1e\x6e\xff\xd9\x18\x75\x22\x0d\x26\x7e\x94\xec\x46\x21\x0b\x68\x2d\xd3\xab\xa5\x1f\x35\x4b\x69\x10\xde\x1d\x28\x8b\x5a\x5d\x49\xb4\xf3\xbf\xd2\xa0\x05\xda\x01\x25\x66\xbb\xf1\x3b\xfb\x19\xd0\x68\x75\xb8\x85\x4c\xdf\x50\x01\x55\x35\xa1\x74\x98\x27\x95\x2c\xf2\x90\x09\xc6\xb2\x52\xa5\xbc\x28\xad\x9b\x78\x5f\x2b\x90\xaf\x40\x51\xed\x91\x5b\x47\xa8\x36\x82\xa3\x8e\x9b\x39\x3f\xb0\x80\xc0\x95\xa4\x78\x6d\x39\x5e\xc0\xfe\xc4\x98\x9f\x15\x1a\xae\x10\xec\x78\xd2\x56\xb0\x9f\x81\xc9\x75\x55\x80\x72\x51\x21\x15\x66\x60\x5d\x2b\x2a\x78\xd4\x6f\x12\x8b\x5b\xdc\x80\x03\x91\x26\xe1\x2f\x6a\xfe\x7f\xcc\x6f\x10\x87\x23\x0b\x30\xf3\x30\xbf\xf6\x76\xfc\x6b\x5e\x26\xf3\xa7\x25\x3d\x3e\x2f\x17\x33\x48\xb5\x7f\xd8\xf9\xe0\x80\x8f\x86\x43\x11\x37\xe3\xa8\xa7\xc5\x43\xcd\xfd\x33\xe6\x0a\x73\x7f\xe6\xec\x4c\x61\x5e\x5f\x67\xc1\x91\x5d\xec\xf6\xf4\xc0\x2f\x2e\xa6\x7c\x60\xd3\xd2\x3a\x5d\xac\xc0\xea\x92\x52\x98\x41\x86\x0a\x1d\x6a\xf5\xa5\xc7\xfe\x55\xb5\xf1\x3d\x76\xc7\xf1\xf7\x08\x3f\x1f\x84\x91\x0a\xd3\x08\x88\x84\xcf\xa0\x8d\xa0\x5b\xe9\x34\x2f\xad\x03\x5a\xe9\x1c\xee\x74\xda\x7c\xf4\xb8\x03\xbc\x29\xf5\x16\xf2\x5b\xad\x7e\x04\x00\x00\xff\xff\x5f\xb1\xab\x9b\xdd\x03\x00\x00") +var _utilGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x90\x3f\x4f\xc3\x30\x10\xc5\xe7\xdc\xa7\x38\x32\x54\x71\x05\x49\x0b\x0b\x02\x75\xa8\xe8\x84\x68\x8b\xca\xc4\x68\xc2\xa5\x9c\xda\xd8\xd1\xd9\x29\x54\x55\xbe\x3b\x72\x42\xff\x21\x21\x31\xd9\x3a\xfb\xf7\xee\xbd\x57\xe9\x7c\xa5\x97\x84\xda\x39\xf2\x0e\x80\xcb\xca\x8a\xc7\x04\xa2\xf8\x6d\xeb\xc9\xc5\x10\xc5\x6c\x63\x80\x48\x57\x4c\x5f\x9e\x8c\x63\x6b\xdc\x66\x88\xf1\xea\xd6\xa5\x6c\xb3\xb3\xf9\x95\xae\xd8\x91\x6c\x48\xb2\x6a\xb5\x0c\x6f\xee\xfc\x43\xb6\x19\x06\xc9\x23\x5b\xea\xfc\x83\x0d\xc9\xb6\x05\x6a\xcf\xeb\x6c\xab\xcb\x75\x0c\x0a\xa0\xa8\x4d\x8e\x65\xed\xfc\x38\xb8\x5b\x90\x7e\x27\x49\x5a\xa7\xe8\xbc\xb0\x59\x2a\x64\x9b\x76\x73\xdc\x41\x24\xe4\x6b\x31\xd8\x1a\x4f\x67\xf4\xf9\x43\x4c\xf7\x0a\x1d\xab\x14\x34\x27\xda\x0f\xb5\xf3\xb6\x5c\x90\xb3\xb5\xe4\x34\xa1\x82\x0d\x7b\xb6\x26\x29\xb5\xe1\x82\x9c\x3f\xee\x50\xd8\xff\xd5\x42\xfa\x17\x1d\xec\x58\xbc\x1b\xe1\x7f\x81\x5d\x03\x11\x17\x48\x22\x81\x0a\x15\x84\x04\xaf\xe3\xe9\xd3\x5c\x1e\x5f\xe6\xb3\x09\xe5\x36\x84\xd9\xbb\xba\xc4\xe1\x60\xa0\xd2\x6e\x9c\xf4\xac\xba\x6f\xd9\x8b\x11\x1a\x5e\x87\xed\x51\xa5\x0d\xe7\x09\x89\x28\x88\x9a\x43\x39\x3d\x7b\x48\xcf\xc6\xdf\x5c\x3f\x7b\x49\xb8\xbb\x2a\xec\xb7\xe7\x49\x95\x3d\x86\x06\xbe\x03\x00\x00\xff\xff\xb5\x12\x56\x70\x24\x02\x00\x00") func utilGoBytes() ([]byte, error) { return bindataRead( @@ -483,8 +441,8 @@ func utilGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "util.go", size: 989, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0xf9, 0x64, 0x5c, 0x35, 0x6, 0x62, 0x74, 0xca, 0xbc, 0x26, 0x7f, 0xc6, 0x79, 0xc8, 0x86, 0xc8, 0xb, 0x2b, 0xd9, 0x1b, 0x29, 0xc8, 0xfc, 0x57, 0xc9, 0x59, 0x20, 0xb4, 0xbc, 0xce, 0x4c}} + info := bindataFileInfo{name: "util.go", size: 548, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x93, 0x26, 0x40, 0x99, 0x94, 0x8, 0x7c, 0x5d, 0x57, 0x80, 0xc5, 0x49, 0x8e, 0x6, 0x9f, 0xf1, 0x6c, 0xf2, 0x85, 0x2a, 0xca, 0x4, 0xb8, 0x7a, 0x4b, 0x4f, 0xb3, 0x5c, 0xde, 0x8, 0xa1, 0xca}} return a, nil } @@ -595,10 +553,8 @@ var _bindata = map[string]func() (*asset, error){ "hypershift-operator/hypershift.openshift.io_hostedclusters.yaml": hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYaml, "hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml": hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYaml, "hypershift-operator/hypershift.openshift.io_nodepools.yaml": hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml, - "hypershift-operator/operator-clusterrole.yaml": hypershiftOperatorOperatorClusterroleYaml, - "hypershift-operator/operator-deployment.yaml": hypershiftOperatorOperatorDeploymentYaml, - "hypershift_operator.go": hypershift_operatorGo, - "util.go": utilGo, + "hypershift_operator.go": hypershift_operatorGo, + "util.go": utilGo, } // AssetDebug is true if the assets were built with the debug flag enabled. @@ -664,8 +620,6 @@ var _bintree = &bintree{nil, map[string]*bintree{ "hypershift.openshift.io_hostedclusters.yaml": {hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYaml, map[string]*bintree{}}, "hypershift.openshift.io_hostedcontrolplanes.yaml": {hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYaml, map[string]*bintree{}}, "hypershift.openshift.io_nodepools.yaml": {hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml, map[string]*bintree{}}, - "operator-clusterrole.yaml": {hypershiftOperatorOperatorClusterroleYaml, map[string]*bintree{}}, - "operator-deployment.yaml": {hypershiftOperatorOperatorDeploymentYaml, map[string]*bintree{}}, }}, "hypershift_operator.go": {hypershift_operatorGo, map[string]*bintree{}}, "util.go": {utilGo, map[string]*bintree{}}, diff --git a/internal/cmd/install/assets/hypershift-operator/operator-clusterrole.yaml b/internal/cmd/install/assets/hypershift-operator/operator-clusterrole.yaml deleted file mode 100644 index 1986a17ad0e4..000000000000 --- a/internal/cmd/install/assets/hypershift-operator/operator-clusterrole.yaml +++ /dev/null @@ -1,95 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - creationTimestamp: null - name: hypershift-operator -rules: -- apiGroups: - - hypershift.openshift.io - resources: - - '*' - verbs: - - '*' -- apiGroups: - - config.openshift.io - resources: - - '*' - verbs: - - get - - list - - watch -- apiGroups: - - apiextensions.k8s.io - resources: - - customresourcedefinitions - verbs: - - '*' -- apiGroups: - - bootstrap.cluster.x-k8s.io - - controlplane.cluster.x-k8s.io - - infrastructure.cluster.x-k8s.io - - machines.cluster.x-k8s.io - - exp.infrastructure.cluster.x-k8s.io - - addons.cluster.x-k8s.io - - exp.cluster.x-k8s.io - - cluster.x-k8s.io - resources: - - '*' - verbs: - - '*' -- apiGroups: - - operator.openshift.io - resources: - - '*' - verbs: - - '*' -- apiGroups: - - route.openshift.io - resources: - - '*' - verbs: - - '*' -- apiGroups: - - security.openshift.io - resources: - - securitycontextconstraints - verbs: - - '*' -- apiGroups: - - rbac.authorization.k8s.io - resources: - - '*' - verbs: - - '*' -- apiGroups: - - "" - resources: - - events - - configmaps - - pods - - pods/log - - secrets - - nodes - - namespaces - - serviceaccounts - - services - verbs: - - '*' -- apiGroups: - - apps - resources: - - deployments - verbs: - - '*' -- apiGroups: - - etcd.database.coreos.com - resources: - - '*' - verbs: - - '*' -- apiGroups: - - machine.openshift.io - resources: - - '*' - verbs: - - '*' diff --git a/internal/cmd/install/assets/hypershift-operator/operator-deployment.yaml b/internal/cmd/install/assets/hypershift-operator/operator-deployment.yaml deleted file mode 100644 index ac4308991f58..000000000000 --- a/internal/cmd/install/assets/hypershift-operator/operator-deployment.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - namespace: hypershift - name: operator -spec: - replicas: 1 - selector: - matchLabels: - name: operator - template: - metadata: - labels: - name: operator - spec: - serviceAccountName: operator - containers: - - name: operator - image: hypershift:latest - imagePullPolicy: Always - env: - - name: MY_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - command: [ "/usr/bin/hypershift-operator" ] - args: [ "run", "--namespace", "$(MY_NAMESPACE)", "--deployment-name", "operator" ] diff --git a/internal/cmd/install/assets/hypershift_operator.go b/internal/cmd/install/assets/hypershift_operator.go index 4a6739649bcc..e4df6be41472 100644 --- a/internal/cmd/install/assets/hypershift_operator.go +++ b/internal/cmd/install/assets/hypershift_operator.go @@ -26,22 +26,64 @@ func (o HyperShiftNamespace) Build() *corev1.Namespace { } type HyperShiftOperatorDeployment struct { - Namespace string - OperatorImage string + Namespace *corev1.Namespace + OperatorImage string + ServiceAccount *corev1.ServiceAccount } func (o HyperShiftOperatorDeployment) Build() *appsv1.Deployment { - deployment, err := newDeployment(mustAssetReader("hypershift-operator/operator-deployment.yaml")) - if err != nil { - panic(err) + deployment := &appsv1.Deployment{ + TypeMeta: metav1.TypeMeta{ + Kind: "Deployment", + APIVersion: appsv1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "operator", + Namespace: o.Namespace.Name, + }, + Spec: appsv1.DeploymentSpec{ + Replicas: int32Ptr(1), + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "name": "operator", + }, + }, + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "name": "operator", + }, + }, + Spec: corev1.PodSpec{ + ServiceAccountName: o.ServiceAccount.Name, + Containers: []corev1.Container{ + { + Name: "operator", + Image: o.OperatorImage, + ImagePullPolicy: corev1.PullAlways, + Env: []corev1.EnvVar{ + { + Name: "MY_NAMESPACE", + ValueFrom: &corev1.EnvVarSource{ + FieldRef: &corev1.ObjectFieldSelector{ + FieldPath: "metadata.namespace", + }, + }, + }, + }, + Command: []string{"/usr/bin/hypershift-operator"}, + Args: []string{"run", "--namespace", "$(MY_NAMESPACE)", "--deployment-name", "operator"}, + }, + }, + }, + }, + }, } - deployment.Namespace = o.Namespace - deployment.Spec.Template.Spec.Containers[0].Image = o.OperatorImage return deployment } type HyperShiftOperatorServiceAccount struct { - Namespace string + Namespace *corev1.Namespace } func (o HyperShiftOperatorServiceAccount) Build() *corev1.ServiceAccount { @@ -51,7 +93,7 @@ func (o HyperShiftOperatorServiceAccount) Build() *corev1.ServiceAccount { APIVersion: corev1.SchemeGroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ - Namespace: o.Namespace, + Namespace: o.Namespace.Name, Name: "operator", }, } @@ -61,9 +103,95 @@ func (o HyperShiftOperatorServiceAccount) Build() *corev1.ServiceAccount { type HyperShiftOperatorClusterRole struct{} func (o HyperShiftOperatorClusterRole) Build() *rbacv1.ClusterRole { - role, err := newClusterRole(mustAssetReader("hypershift-operator/operator-clusterrole.yaml")) - if err != nil { - panic(err) + role := &rbacv1.ClusterRole{ + TypeMeta: metav1.TypeMeta{ + Kind: "ClusterRole", + APIVersion: rbacv1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "hypershift-operator", + }, + Rules: []rbacv1.PolicyRule{ + { + APIGroups: []string{"hypershift.openshift.io"}, + Resources: []string{"*"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"config.openshift.io"}, + Resources: []string{"*"}, + Verbs: []string{"get", "list", "watch"}, + }, + { + APIGroups: []string{"apiextensions.k8s.io"}, + Resources: []string{"customresourcedefinitions"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{ + "bootstrap.cluster.x-k8s.io", + "controlplane.cluster.x-k8s.io", + "infrastructure.cluster.x-k8s.io", + "machines.cluster.x-k8s.io", + "exp.infrastructure.cluster.x-k8s.io", + "addons.cluster.x-k8s.io", + "exp.cluster.x-k8s.io", + "cluster.x-k8s.io", + }, + Resources: []string{"*"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"operator.openshift.io"}, + Resources: []string{"*"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"route.openshift.io"}, + Resources: []string{"*"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"security.openshift.io"}, + Resources: []string{"securitycontextconstraints"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"rbac.authorization.k8s.io"}, + Resources: []string{"*"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{""}, + Resources: []string{ + "events", + "configmaps", + "pods", + "pods/log", + "secrets", + "nodes", + "namespaces", + "serviceaccounts", + "services", + }, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"apps"}, + Resources: []string{"deployments"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"etcd.database.coreos.com"}, + Resources: []string{"*"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"machine.openshift.io"}, + Resources: []string{"*"}, + Verbs: []string{"*"}, + }, + }, } return role } diff --git a/internal/cmd/install/assets/util.go b/internal/cmd/install/assets/util.go index 87122f10be25..f93c9fc3950d 100644 --- a/internal/cmd/install/assets/util.go +++ b/internal/cmd/install/assets/util.go @@ -4,8 +4,6 @@ import ( "bytes" "io" - appsv1 "k8s.io/api/apps/v1" - rbacv1 "k8s.io/api/rbac/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/util/yaml" ) @@ -14,15 +12,6 @@ func mustAssetReader(asset string) io.Reader { return bytes.NewReader(MustAsset(asset)) } -func newDeployment(manifest io.Reader) (*appsv1.Deployment, error) { - o := appsv1.Deployment{} - if err := yaml.NewYAMLOrJSONDecoder(manifest, 100).Decode(&o); err != nil { - return nil, err - } - - return &o, nil -} - func mustCustomResourceDefinition(manifest io.Reader) *apiextensionsv1.CustomResourceDefinition { o := apiextensionsv1.CustomResourceDefinition{} if err := yaml.NewYAMLOrJSONDecoder(manifest, 100).Decode(&o); err != nil { @@ -31,11 +20,6 @@ func mustCustomResourceDefinition(manifest io.Reader) *apiextensionsv1.CustomRes return &o } -func newClusterRole(manifest io.Reader) (*rbacv1.ClusterRole, error) { - o := rbacv1.ClusterRole{} - if err := yaml.NewYAMLOrJSONDecoder(manifest, 100).Decode(&o); err != nil { - return nil, err - } - - return &o, nil +func int32Ptr(i int32) *int32 { + return &i } diff --git a/internal/cmd/install/install.go b/internal/cmd/install/install.go index 090413bacdc2..152582b3850a 100644 --- a/internal/cmd/install/install.go +++ b/internal/cmd/install/install.go @@ -61,12 +61,8 @@ func init() { } type Options struct { - Namespace string - HyperShiftImage string - CAPIManagerImage string - CAPIProviderImage string - - Output string + Namespace string + HyperShiftImage string } func NewCommand() *cobra.Command { @@ -79,15 +75,12 @@ func NewCommand() *cobra.Command { cmd.Flags().StringVar(&opts.Namespace, "namespace", "hypershift", "The namespace in which to install HyperShift") cmd.Flags().StringVar(&opts.HyperShiftImage, "hypershift-image", "registry.ci.openshift.org/hypershift/hypershift:latest", "The HyperShift image to deploy") - cmd.Flags().StringVar(&opts.CAPIManagerImage, "capi-manager-image", "quay.io/hypershift/cluster-api:hypershift", "The CAPI Manager image to deploy") - cmd.Flags().StringVar(&opts.CAPIProviderImage, "capi-provider-image", "quay.io/hypershift/cluster-api-provider-aws:master", "The CAPI Provider image to deploy") - cmd.Flags().StringVar(&opts.Output, "output", "", "Render the resources to be installed as YAML instead of applying them") cmd.Run = func(cmd *cobra.Command, args []string) { var objects []runtime.Object - objects = append(objects, buildHyperShiftOperatorManifests(opts)...) - objects = append(objects, buildClusterAPIManifests()...) + objects = append(objects, hyperShiftOperatorManifests(opts)...) + objects = append(objects, clusterAPIManifests()...) for _, object := range objects { err := yamlSerializer.Encode(object, os.Stdout) @@ -101,84 +94,65 @@ func NewCommand() *cobra.Command { return cmd } -func buildHyperShiftOperatorManifests(opts Options) []runtime.Object { - var objects []runtime.Object - +func hyperShiftOperatorManifests(opts Options) []runtime.Object { hostedClustersCRD := assets.HyperShiftHostedClustersCustomResourceDefinition{}.Build() - objects = append(objects, hostedClustersCRD) - nodePoolsCRD := assets.HyperShiftNodePoolsCustomResourceDefinition{}.Build() - objects = append(objects, nodePoolsCRD) - hostedControlPlanesCRD := assets.HyperShiftHostedControlPlaneCustomResourceDefinition{}.Build() - objects = append(objects, hostedControlPlanesCRD) - externalInfraClustersCRD := assets.HyperShiftExternalInfraClustersCustomResourceDefinition{}.Build() - objects = append(objects, externalInfraClustersCRD) - - namespace := assets.HyperShiftNamespace{ + operatorNamespace := assets.HyperShiftNamespace{ Name: opts.Namespace, }.Build() - objects = append(objects, namespace) - operatorServiceAccount := assets.HyperShiftOperatorServiceAccount{ - Namespace: namespace.Name, + Namespace: operatorNamespace, }.Build() - objects = append(objects, operatorServiceAccount) - operatorClusterRole := assets.HyperShiftOperatorClusterRole{}.Build() - objects = append(objects, operatorClusterRole) - operatorClusterRoleBinding := assets.HyperShiftOperatorClusterRoleBinding{ ClusterRole: operatorClusterRole, ServiceAccount: operatorServiceAccount, }.Build() - objects = append(objects, operatorClusterRoleBinding) - - deployment := assets.HyperShiftOperatorDeployment{ - Namespace: namespace.Name, - OperatorImage: opts.HyperShiftImage, + operatorDeployment := assets.HyperShiftOperatorDeployment{ + Namespace: operatorNamespace, + OperatorImage: opts.HyperShiftImage, + ServiceAccount: operatorServiceAccount, }.Build() - objects = append(objects, deployment) - return objects + return []runtime.Object{ + hostedClustersCRD, + nodePoolsCRD, + hostedControlPlanesCRD, + externalInfraClustersCRD, + operatorNamespace, + operatorServiceAccount, + operatorClusterRole, + operatorClusterRoleBinding, + operatorDeployment, + } } -func buildClusterAPIManifests() []runtime.Object { - var objects []runtime.Object - +func clusterAPIManifests() []runtime.Object { clustersCRD := assets.ClusterAPIClustersCustomResourceDefinition{}.Build() - objects = append(objects, clustersCRD) - machineDeploymentsCRD := assets.ClusterAPIMachineDeploymentsCustomResourceDefinition{}.Build() - objects = append(objects, machineDeploymentsCRD) - machineHealthChecksCRD := assets.ClusterAPIMachineHealthChecksCustomResourceDefinition{}.Build() - objects = append(objects, machineHealthChecksCRD) - machinesCRD := assets.ClusterAPIMachinesCustomResourceDefinition{}.Build() - objects = append(objects, machinesCRD) - machineSetsCRD := assets.ClusterAPIMachineSetsCustomResourceDefinition{}.Build() - objects = append(objects, machineSetsCRD) - awsClustersCRD := assets.ClusterAPIAWSClustersCustomResourceDefinition{}.Build() - objects = append(objects, awsClustersCRD) - awsMachinePoolsCRD := assets.ClusterAPIAWSMachinePoolsCustomResourceDefinition{}.Build() - objects = append(objects, awsMachinePoolsCRD) - awsMachinesCRD := assets.ClusterAPIAWSMachinesCustomResourceDefinition{}.Build() - objects = append(objects, awsMachinesCRD) - awsMachineTemplatesCRD := assets.ClusterAPIAWSMachineTemplatesCustomResourceDefinition{}.Build() - objects = append(objects, awsMachineTemplatesCRD) - awsManagedClustersCRD := assets.ClusterAPIAWSManagedClustersCustomResourceDefinition{}.Build() - objects = append(objects, awsManagedClustersCRD) - awsManagedMachinePoolsCRD := assets.ClusterAPIAWSManagedMachinePoolsCustomResourceDefinition{}.Build() - objects = append(objects, awsManagedMachinePoolsCRD) - return objects + return []runtime.Object{ + clustersCRD, + machineDeploymentsCRD, + machineHealthChecksCRD, + machinesCRD, + machineSetsCRD, + awsClustersCRD, + awsMachinePoolsCRD, + awsMachinesCRD, + awsMachineTemplatesCRD, + awsManagedClustersCRD, + awsManagedMachinePoolsCRD, + } } From 11b0740e4034212b3e43ace8102a073f1f9d7eec Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Tue, 9 Feb 2021 10:09:34 -0500 Subject: [PATCH 03/20] cli: add an example cluster generator --- internal/cmd/cluster/cluster.go | 22 +++ internal/cmd/cluster/example/example.go | 190 ++++++++++++++++++++++++ main.go | 2 + 3 files changed, 214 insertions(+) create mode 100644 internal/cmd/cluster/cluster.go create mode 100644 internal/cmd/cluster/example/example.go diff --git a/internal/cmd/cluster/cluster.go b/internal/cmd/cluster/cluster.go new file mode 100644 index 000000000000..586e090d500f --- /dev/null +++ b/internal/cmd/cluster/cluster.go @@ -0,0 +1,22 @@ +package cluster + +import ( + "github.com/spf13/cobra" + + "openshift.io/hypershift/internal/cmd/cluster/example" +) + +func NewCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "cluster", + Short: "Commands for working with HyperShift clusters", + } + + cmd.Run = func(cmd *cobra.Command, args []string) { + + } + + cmd.AddCommand(example.NewCommand()) + + return cmd +} diff --git a/internal/cmd/cluster/example/example.go b/internal/cmd/cluster/example/example.go new file mode 100644 index 000000000000..ff93a38bf05b --- /dev/null +++ b/internal/cmd/cluster/example/example.go @@ -0,0 +1,190 @@ +package example + +import ( + "fmt" + "io/ioutil" + "os" + + configv1 "github.com/openshift/api/config/v1" + operatorv1 "github.com/openshift/api/operator/v1" + routev1 "github.com/openshift/api/route/v1" + securityv1 "github.com/openshift/api/security/v1" + "github.com/spf13/cobra" + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer/json" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + capiaws "sigs.k8s.io/cluster-api-provider-aws/api/v1alpha3" + capiv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + + hyperv1 "openshift.io/hypershift/api/v1alpha1" +) + +var ( + scheme = runtime.NewScheme() + yamlSerializer = json.NewSerializerWithOptions( + json.DefaultMetaFactory, scheme, scheme, + json.SerializerOptions{Yaml: true, Pretty: true, Strict: true}, + ) +) + +func init() { + capiaws.AddToScheme(scheme) + clientgoscheme.AddToScheme(scheme) + hyperv1.AddToScheme(scheme) + capiv1.AddToScheme(scheme) + configv1.AddToScheme(scheme) + securityv1.AddToScheme(scheme) + operatorv1.AddToScheme(scheme) + routev1.AddToScheme(scheme) + rbacv1.AddToScheme(scheme) + corev1.AddToScheme(scheme) + apiextensionsv1.AddToScheme(scheme) +} + +type Options struct { + Namespace string + Name string + ReleaseImage string + + PullSecret []byte + AWSCreds []byte + SSHKey []byte +} + +func NewCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "example", + Short: "Creates a working example HostedCluster resource", + } + + var opts Options + + var pullSecretFile string + var awsCredsFile string + var sshKeyFile string + + cmd.Flags().StringVar(&opts.Namespace, "namespace", "clusters", "A namespace to contain the generated resources") + cmd.Flags().StringVar(&opts.Name, "name", "example", "A name for the cluster") + cmd.Flags().StringVar(&opts.ReleaseImage, "release-image", "quay.io/openshift-release-dev/ocp-release:4.7.0-fc.3-x86_64", "The OCP release image for the cluster") + cmd.Flags().StringVar(&pullSecretFile, "pull-secret", "", "Path to a pull secret") + cmd.Flags().StringVar(&awsCredsFile, "aws-creds", "", "Path to an AWS credentials file") + cmd.Flags().StringVar(&sshKeyFile, "ssh-key", "", "Path to an SSH key file") + + cmd.Run = func(cmd *cobra.Command, args []string) { + var err error + opts.PullSecret, err = ioutil.ReadFile(pullSecretFile) + if err != nil { + panic(err) + } + opts.AWSCreds, err = ioutil.ReadFile(awsCredsFile) + if err != nil { + panic(err) + } + opts.SSHKey, err = ioutil.ReadFile(sshKeyFile) + if err != nil { + panic(err) + } + + var objects []runtime.Object + + objects = append(objects, clusterManifests(opts)...) + + for _, object := range objects { + err := yamlSerializer.Encode(object, os.Stdout) + if err != nil { + panic(err) + } + fmt.Println("---") + } + } + + return cmd +} + +func clusterManifests(opts Options) []runtime.Object { + namespace := &corev1.Namespace{ + TypeMeta: metav1.TypeMeta{ + Kind: "Namespace", + APIVersion: corev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: opts.Namespace, + }, + } + + pullSecret := &corev1.Secret{ + TypeMeta: metav1.TypeMeta{ + Kind: "Secret", + APIVersion: corev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace.Name, + Name: opts.Name + "-pull-secret", + }, + Data: map[string][]byte{ + ".dockerconfigjson": opts.PullSecret, + }, + } + + awsCredsSecret := &corev1.Secret{ + TypeMeta: metav1.TypeMeta{ + Kind: "Secret", + APIVersion: corev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace.Name, + Name: opts.Name + "-provider-creds", + }, + Data: map[string][]byte{ + "credentials": opts.AWSCreds, + }, + } + + sshKeySecret := &corev1.Secret{ + TypeMeta: metav1.TypeMeta{ + Kind: "Secret", + APIVersion: corev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace.Name, + Name: opts.Name + "-ssh-key", + }, + Data: map[string][]byte{ + "id_rsa.pub": opts.SSHKey, + }, + } + + cluster := &hyperv1.HostedCluster{ + TypeMeta: metav1.TypeMeta{ + Kind: "HostedCluster", + APIVersion: hyperv1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace.Name, + Name: opts.Name, + }, + Spec: hyperv1.HostedClusterSpec{ + Release: hyperv1.ReleaseSpec{ + Image: opts.ReleaseImage, + }, + InitialComputeReplicas: 2, + ServiceCIDR: "172.31.0.0/16", + PodCIDR: "10.132.0.0/14", + PullSecret: corev1.LocalObjectReference{Name: pullSecret.Name}, + ProviderCreds: corev1.LocalObjectReference{Name: awsCredsSecret.Name}, + SSHKey: corev1.LocalObjectReference{Name: sshKeySecret.Name}, + }, + } + + return []runtime.Object{ + namespace, + pullSecret, + awsCredsSecret, + sshKeySecret, + cluster, + } +} diff --git a/main.go b/main.go index 00264a85d92f..7af0bd865f78 100644 --- a/main.go +++ b/main.go @@ -22,6 +22,7 @@ import ( "github.com/spf13/cobra" + clustercmd "openshift.io/hypershift/internal/cmd/cluster" installcmd "openshift.io/hypershift/internal/cmd/install" ) @@ -34,6 +35,7 @@ func main() { }, } cmd.AddCommand(installcmd.NewCommand()) + cmd.AddCommand(clustercmd.NewCommand()) if err := cmd.Execute(); err != nil { fmt.Fprintf(os.Stderr, "%v\n", err) From 1c9ab8f938edb4d1a8870f9c3b6c17684136426b Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Tue, 9 Feb 2021 16:55:32 -0500 Subject: [PATCH 04/20] cli: refactor e2e --- HACKING.md | 29 ++-- Makefile | 92 ++++++------- README.md | 35 +++-- api/fixtures/example.go | 120 +++++++++++++++++ api/scheme.go | 40 ++++++ api/version.go | 11 ++ internal/cmd/cluster/example/example.go | 171 ++++-------------------- internal/cmd/install/assets/bindata.go | 8 +- internal/cmd/install/install.go | 3 +- test/e2e/Makefile | 46 ------- test/e2e/e2e_suite_test.go | 39 +++--- test/e2e/quick_start_test.go | 104 +++++++------- 12 files changed, 340 insertions(+), 358 deletions(-) create mode 100644 api/fixtures/example.go create mode 100644 api/scheme.go create mode 100644 api/version.go delete mode 100644 test/e2e/Makefile diff --git a/HACKING.md b/HACKING.md index 48fde50f90c5..aa905187f8a5 100644 --- a/HACKING.md +++ b/HACKING.md @@ -5,22 +5,21 @@ ### Run the HyperShift Operator in a local process -1. Ensure the `KUBECONFIG` evnvironment variable points to a management cluster +1. Ensure the `KUBECONFIG` environment variable points to a management cluster with no HyperShift installed yet. 2. Build HyperShift. - make build + $ make build 3. Install HyperShift with the operator deployment scaled to zero so that it doesn't conflict with your local operator process. - make install PROFILE=development + TODO -4. Run the HyperShift operator locally. Replace `IMAGE` with a custom image, - if desired. This image is used for the Control Plane Operator. +4. Run the HyperShift operator locally. - make run-local IMAGE=registry.ci.openshift.org/hypershift/hypershift + $ bin/hypershift-operator run ### Run a custom image using the production profile @@ -28,24 +27,20 @@ make IMG=quay.io/my/hypershift:latest docker-build docker-push -2. Deploy the latest production version. +2. Install HyperShift using the custom image: - make install PROFILE=production - -3. Reconfigure the HyperShift operator deployment to use your custom image. - This image will also be used for the control plane operator. - - oc --namespace hypershift set image deployment/operator operator=quay.io/my/hypershift:latest + $ bin/hypershift install --hypershift-image quay.io/my/hypershift:latest | oc apply -f - ### Run the e2e tests 1. Install HyperShift. - - make install PROFILE=production - 2. Run the tests. - make test-e2e + $ make e2e + $ bin/test-e2e -v -args --ginkgo.v --ginkgo.trace \ + --e2e.quick-start.aws-credentials-file /my/aws-credentials \ + --e2e.quick-start.pull-secret-file /my/pull-secret \ + --e2e.quick-start.ssh-key-file /my/public-ssh-key \ ### Visualize the Go dependency tree diff --git a/Makefile b/Makefile index b374cd802be4..c2e8bd47b3eb 100644 --- a/Makefile +++ b/Makefile @@ -2,22 +2,24 @@ DIR := ${CURDIR} # Image URL to use all building/pushing image targets IMG ?= hypershift:latest + # Produce CRDs that work back to Kubernetes 1.11 (no version conversion) CRD_OPTIONS ?= "crd:trivialVersions=true" + # Runtime CLI to use for building and pushing images RUNTIME ?= docker CONTROLLER_GEN=GO111MODULE=on GOFLAGS=-mod=vendor go run ./vendor/sigs.k8s.io/controller-tools/cmd/controller-gen BINDATA=GO111MODULE=on GOFLAGS=-mod=vendor go run ./vendor/github.com/kevinburke/go-bindata/go-bindata +# Bake in a compatible OCP release image if provided +ifdef OCP_RELEASE_IMAGE +GO_LDFLAGS=-ldflags="-X 'openshift.io/hypershift/api.OCPReleaseImage=$(OCP_RELEASE_IMAGE)'" +endif + GO_GCFLAGS ?= -gcflags=all='-N -l' GO=GO111MODULE=on GOFLAGS=-mod=vendor go -GO_BUILD_RECIPE=CGO_ENABLED=0 $(GO) build $(GO_GCFLAGS) - -# Kustomize overlay to use -PROFILE ?= production - -EXAMPLE_NAMESPACE ?= hypershift +GO_BUILD_RECIPE=CGO_ENABLED=0 $(GO) build $(GO_GCFLAGS) $(GO_LDFLAGS) # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) ifeq (,$(shell go env GOBIN)) @@ -26,21 +28,20 @@ else GOBIN=$(shell go env GOBIN) endif -all: build manifests +all: build build: hypershift-operator control-plane-operator hosted-cluster-config-operator hypershift verify: build fmt vet -# Generate code -generate: - $(BINDATA) -mode 420 -modtime 1 -pkg assets \ - -o ./internal/cmd/install/assets/bindata.go \ - --prefix internal/cmd/install/assets \ - --ignore bindata.go \ - ./internal/cmd/install/assets/... - gofmt -s -w ./internal/cmd/install/assets/bindata.go +# Generate Kube manifests (e.g. CRDs) +.PHONY: hypershift-operator-manifests +hypershift-operator-manifests: + $(CONTROLLER_GEN) $(CRD_OPTIONS) paths="./..." output:crd:artifacts:config=internal/cmd/install/assets/hypershift-operator +# Build hypershift-operator binary +.PHONY: hypershift-operator +hypershift-operator: $(BINDATA) -mode 420 -modtime 1 -pkg assets \ -o ./hypershift-operator/controllers/hostedcluster/assets/bindata.go \ --prefix hypershift-operator/controllers/hostedcluster/assets \ @@ -48,6 +49,10 @@ generate: ./hypershift-operator/controllers/hostedcluster/assets/... gofmt -s -w ./hypershift-operator/controllers/hostedcluster/assets/bindata.go + $(GO_BUILD_RECIPE) -o bin/hypershift-operator ./hypershift-operator + +.PHONY: control-plane-operator +control-plane-operator: $(BINDATA) -mode 420 -modtime 1 -pkg assets \ -o ./control-plane-operator/controllers/hostedcontrolplane/assets/bindata.go \ --prefix control-plane-operator/controllers/hostedcontrolplane/assets \ @@ -55,70 +60,53 @@ generate: ./control-plane-operator/controllers/hostedcontrolplane/assets/... gofmt -s -w ./control-plane-operator/controllers/hostedcontrolplane/assets/bindata.go - $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." - -# Build hypershift-operator binary -hypershift-operator: generate - $(GO_BUILD_RECIPE) -o bin/hypershift-operator ./hypershift-operator - -control-plane-operator: generate $(GO_BUILD_RECIPE) -o bin/control-plane-operator ./control-plane-operator # Build hosted-cluster-config-operator binary -hosted-cluster-config-operator: generate +.PHONY: hosted-cluster-config-operator +hosted-cluster-config-operator: $(GO_BUILD_RECIPE) -o bin/hosted-cluster-config-operator ./hosted-cluster-config-operator -hypershift: generate +.PHONY: hypershift +hypershift: + $(BINDATA) -mode 420 -modtime 1 -pkg assets \ + -o ./internal/cmd/install/assets/bindata.go \ + --prefix internal/cmd/install/assets \ + --ignore bindata.go \ + ./internal/cmd/install/assets/... + gofmt -s -w ./internal/cmd/install/assets/bindata.go + $(GO_BUILD_RECIPE) -o bin/hypershift . # Run tests +.PHONY: test test: build $(GO) test ./... -coverprofile cover.out -# Generate Kube manifests (e.g. CRDs) -manifests: - $(CONTROLLER_GEN) $(CRD_OPTIONS) paths="./..." output:crd:artifacts:config=config/hypershift-operator - -# Installs hypershift into a cluster -install: manifests - kustomize build config/install/$(PROFILE) | oc apply -f - - -# Uninstalls hypershit from a cluster -uninstall: manifests - kustomize build config/install/$(PROFILE) | oc delete -f - - -# Builds the config with Kustomize for manual usage -.PHONY: config -config: - kustomize build config/install/$(PROFILE) +.PHONY: e2e +e2e: + $(GO) test -tags e2e -c -o bin/test-e2e ./test/e2e # Run go fmt against code +.PHONY: fmt fmt: $(GO) fmt ./... # Run go vet against code +.PHONY: vet vet: $(GO) vet ./... # Build the docker image +.PHONY: docker-build docker-build: ${RUNTIME} build . -t ${IMG} # Push the docker image +.PHONY: docker-push docker-push: ${RUNTIME} push ${IMG} +.PHONY: run-local run-local: bin/hypershift-operator run --operator-image=$(IMAGE) - -BUILD_EXAMPLE_CLUSTER=KUSTOMIZE_PLUGIN_HOME=$(DIR)/config/example-cluster/plugin kustomize build --enable_alpha_plugins ./config/example-cluster - -example-cluster: - $(BUILD_EXAMPLE_CLUSTER) - -install-example-cluster: - $(BUILD_EXAMPLE_CLUSTER) | oc apply --namespace $(EXAMPLE_NAMESPACE) -f - - -.PHONY: test-e2e -test-e2e: ## Run the e2e tests - $(MAKE) -C test/e2e run diff --git a/README.md b/README.md index 83398b6ea505..44794211037d 100644 --- a/README.md +++ b/README.md @@ -6,40 +6,39 @@ Guest clustering for [OpenShift](https://openshift.io). * Admin access to an OpenShift cluster (version 4.7). * The OpenShift `oc` CLI tool. -* [Kustomize](https://kustomize.io) +* The `hypershift` CLI tool: -### Installation + $ make hypershift + +### Install HyperShift Install HyperShift into the management cluster: ```bash -$ make install +$ bin/hypershift install | oc apply -f - ``` Remove HyperShift from the management cluster: ```bash -$ make uninstall +$ bin/hypershift install | oc delete -f - ``` -### Create a cluster +### Create an example cluster -First, create the following files containing secrets used by the example cluster: +Prerequisites: -- `config/example-cluster/pull-secret` a valid pull secret for image pulls. -- `config/example-cluster/ssh-key` an SSH public key for guest node access. -- `config/example-cluster/aws-creds` an [aws credentials file](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html). +- A valid pull secret file for image pulls. +- An SSH public key file for guest node access. +- An [aws credentials file](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html). Install the example cluster: ```bash -$ make install-example-cluster -``` - -If you want to see but not apply the example cluster resource (i.e. dry run), try: - -```bash -$ make example-cluster +$ bin/hypershift cluster example \ + --pull-secret /my/pull-secret \ + --aws-creds /my/aws-credentials \ + --ssh-key /my/ssh-public-key | oc apply -f - ``` When the cluster is available, get the guest kubeconfig using: @@ -54,7 +53,7 @@ To create additional node pools, create a resource like: apiVersion: hypershift.openshift.io/v1alpha1 kind: NodePool metadata: - namespace: hypershift + namespace: clusters name: example-extended spec: clusterName: example @@ -70,5 +69,5 @@ spec: And delete the cluster using: ```bash -$ oc delete --namespace hypershift hostedclusters/example +$ oc delete --namespace clusters ``` diff --git a/api/fixtures/example.go b/api/fixtures/example.go new file mode 100644 index 000000000000..768677fd3f27 --- /dev/null +++ b/api/fixtures/example.go @@ -0,0 +1,120 @@ +package fixtures + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + + hyperv1 "openshift.io/hypershift/api/v1alpha1" +) + +type ExampleResources struct { + Namespace *corev1.Namespace + PullSecret *corev1.Secret + AWSCredentials *corev1.Secret + SSHKey *corev1.Secret + Cluster *hyperv1.HostedCluster +} + +func (o *ExampleResources) AsObjects() []runtime.Object { + return []runtime.Object{ + o.Namespace, + o.SSHKey, + o.PullSecret, + o.AWSCredentials, + o.Cluster, + } +} + +type ExampleOptions struct { + Namespace string + Name string + ReleaseImage string + PullSecret []byte + AWSCredentials []byte + SSHKey []byte +} + +func (o ExampleOptions) Resources() *ExampleResources { + namespace := &corev1.Namespace{ + TypeMeta: metav1.TypeMeta{ + Kind: "Namespace", + APIVersion: corev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: o.Namespace, + }, + } + + pullSecret := &corev1.Secret{ + TypeMeta: metav1.TypeMeta{ + Kind: "Secret", + APIVersion: corev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace.Name, + Name: o.Name + "-pull-secret", + }, + Data: map[string][]byte{ + ".dockerconfigjson": o.PullSecret, + }, + } + + awsCredsSecret := &corev1.Secret{ + TypeMeta: metav1.TypeMeta{ + Kind: "Secret", + APIVersion: corev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace.Name, + Name: o.Name + "-provider-creds", + }, + Data: map[string][]byte{ + "credentials": o.AWSCredentials, + }, + } + + sshKeySecret := &corev1.Secret{ + TypeMeta: metav1.TypeMeta{ + Kind: "Secret", + APIVersion: corev1.SchemeGroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace.Name, + Name: o.Name + "-ssh-key", + }, + Data: map[string][]byte{ + "id_rsa.pub": o.SSHKey, + }, + } + + cluster := &hyperv1.HostedCluster{ + TypeMeta: metav1.TypeMeta{ + Kind: "HostedCluster", + APIVersion: hyperv1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace.Name, + Name: o.Name, + }, + Spec: hyperv1.HostedClusterSpec{ + Release: hyperv1.ReleaseSpec{ + Image: o.ReleaseImage, + }, + InitialComputeReplicas: 2, + ServiceCIDR: "172.31.0.0/16", + PodCIDR: "10.132.0.0/14", + PullSecret: corev1.LocalObjectReference{Name: pullSecret.Name}, + ProviderCreds: corev1.LocalObjectReference{Name: awsCredsSecret.Name}, + SSHKey: corev1.LocalObjectReference{Name: sshKeySecret.Name}, + }, + } + + return &ExampleResources{ + Namespace: namespace, + PullSecret: pullSecret, + AWSCredentials: awsCredsSecret, + SSHKey: sshKeySecret, + Cluster: cluster, + } +} diff --git a/api/scheme.go b/api/scheme.go new file mode 100644 index 000000000000..8b40fe20c855 --- /dev/null +++ b/api/scheme.go @@ -0,0 +1,40 @@ +package api + +import ( + configv1 "github.com/openshift/api/config/v1" + operatorv1 "github.com/openshift/api/operator/v1" + routev1 "github.com/openshift/api/route/v1" + securityv1 "github.com/openshift/api/security/v1" + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer/json" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + capiaws "sigs.k8s.io/cluster-api-provider-aws/api/v1alpha3" + capiv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + + hyperv1 "openshift.io/hypershift/api/v1alpha1" +) + +var ( + Scheme = runtime.NewScheme() + YamlSerializer = json.NewSerializerWithOptions( + json.DefaultMetaFactory, Scheme, Scheme, + json.SerializerOptions{Yaml: true, Pretty: true, Strict: true}, + ) +) + +func init() { + capiaws.AddToScheme(Scheme) + clientgoscheme.AddToScheme(Scheme) + hyperv1.AddToScheme(Scheme) + capiv1.AddToScheme(Scheme) + configv1.AddToScheme(Scheme) + securityv1.AddToScheme(Scheme) + operatorv1.AddToScheme(Scheme) + routev1.AddToScheme(Scheme) + rbacv1.AddToScheme(Scheme) + corev1.AddToScheme(Scheme) + apiextensionsv1.AddToScheme(Scheme) +} diff --git a/api/version.go b/api/version.go new file mode 100644 index 000000000000..3151b63cafa5 --- /dev/null +++ b/api/version.go @@ -0,0 +1,11 @@ +package api + +var ( + // TODO: Is there any way to meaningfully bake this through ldflags? + HyperShiftImage = "registry.ci.openshift.org/hypershift/hypershift:latest" + + // OCPReleaseImage is the latest compatible OCP release, used for defaulting. + // This can and should be baked into the binary through ldflags, although + // the version committed here should be kept up to date with major releases. + OCPReleaseImage = "quay.io/openshift-release-dev/ocp-release:4.7.0-fc.3-x86_64" +) diff --git a/internal/cmd/cluster/example/example.go b/internal/cmd/cluster/example/example.go index ff93a38bf05b..ffc5604c13e1 100644 --- a/internal/cmd/cluster/example/example.go +++ b/internal/cmd/cluster/example/example.go @@ -5,54 +5,19 @@ import ( "io/ioutil" "os" - configv1 "github.com/openshift/api/config/v1" - operatorv1 "github.com/openshift/api/operator/v1" - routev1 "github.com/openshift/api/route/v1" - securityv1 "github.com/openshift/api/security/v1" "github.com/spf13/cobra" - corev1 "k8s.io/api/core/v1" - rbacv1 "k8s.io/api/rbac/v1" - apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/serializer/json" - clientgoscheme "k8s.io/client-go/kubernetes/scheme" - capiaws "sigs.k8s.io/cluster-api-provider-aws/api/v1alpha3" - capiv1 "sigs.k8s.io/cluster-api/api/v1alpha4" - hyperv1 "openshift.io/hypershift/api/v1alpha1" + hyperapi "openshift.io/hypershift/api" + apifixtures "openshift.io/hypershift/api/fixtures" ) -var ( - scheme = runtime.NewScheme() - yamlSerializer = json.NewSerializerWithOptions( - json.DefaultMetaFactory, scheme, scheme, - json.SerializerOptions{Yaml: true, Pretty: true, Strict: true}, - ) -) - -func init() { - capiaws.AddToScheme(scheme) - clientgoscheme.AddToScheme(scheme) - hyperv1.AddToScheme(scheme) - capiv1.AddToScheme(scheme) - configv1.AddToScheme(scheme) - securityv1.AddToScheme(scheme) - operatorv1.AddToScheme(scheme) - routev1.AddToScheme(scheme) - rbacv1.AddToScheme(scheme) - corev1.AddToScheme(scheme) - apiextensionsv1.AddToScheme(scheme) -} - type Options struct { - Namespace string - Name string - ReleaseImage string - - PullSecret []byte - AWSCreds []byte - SSHKey []byte + Namespace string + Name string + ReleaseImage string + PullSecretFile string + AWSCredentialsFile string + SSHKeyFile string } func NewCommand() *cobra.Command { @@ -63,38 +28,38 @@ func NewCommand() *cobra.Command { var opts Options - var pullSecretFile string - var awsCredsFile string - var sshKeyFile string - cmd.Flags().StringVar(&opts.Namespace, "namespace", "clusters", "A namespace to contain the generated resources") cmd.Flags().StringVar(&opts.Name, "name", "example", "A name for the cluster") - cmd.Flags().StringVar(&opts.ReleaseImage, "release-image", "quay.io/openshift-release-dev/ocp-release:4.7.0-fc.3-x86_64", "The OCP release image for the cluster") - cmd.Flags().StringVar(&pullSecretFile, "pull-secret", "", "Path to a pull secret") - cmd.Flags().StringVar(&awsCredsFile, "aws-creds", "", "Path to an AWS credentials file") - cmd.Flags().StringVar(&sshKeyFile, "ssh-key", "", "Path to an SSH key file") + cmd.Flags().StringVar(&opts.ReleaseImage, "release-image", hyperapi.OCPReleaseImage, "The OCP release image for the cluster") + cmd.Flags().StringVar(&opts.PullSecretFile, "pull-secret", "", "Path to a pull secret") + cmd.Flags().StringVar(&opts.AWSCredentialsFile, "aws-creds", "", "Path to an AWS credentials file") + cmd.Flags().StringVar(&opts.SSHKeyFile, "ssh-key", "", "Path to an SSH key file") cmd.Run = func(cmd *cobra.Command, args []string) { - var err error - opts.PullSecret, err = ioutil.ReadFile(pullSecretFile) + pullSecret, err := ioutil.ReadFile(opts.PullSecretFile) if err != nil { panic(err) } - opts.AWSCreds, err = ioutil.ReadFile(awsCredsFile) + awsCredentials, err := ioutil.ReadFile(opts.AWSCredentialsFile) if err != nil { panic(err) } - opts.SSHKey, err = ioutil.ReadFile(sshKeyFile) + sshKey, err := ioutil.ReadFile(opts.SSHKeyFile) if err != nil { panic(err) } - var objects []runtime.Object - - objects = append(objects, clusterManifests(opts)...) - - for _, object := range objects { - err := yamlSerializer.Encode(object, os.Stdout) + example := apifixtures.ExampleOptions{ + Namespace: opts.Namespace, + Name: opts.Name, + ReleaseImage: opts.ReleaseImage, + PullSecret: pullSecret, + AWSCredentials: awsCredentials, + SSHKey: sshKey, + }.Resources() + + for _, object := range example.AsObjects() { + err := hyperapi.YamlSerializer.Encode(object, os.Stdout) if err != nil { panic(err) } @@ -104,87 +69,3 @@ func NewCommand() *cobra.Command { return cmd } - -func clusterManifests(opts Options) []runtime.Object { - namespace := &corev1.Namespace{ - TypeMeta: metav1.TypeMeta{ - Kind: "Namespace", - APIVersion: corev1.SchemeGroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - Name: opts.Namespace, - }, - } - - pullSecret := &corev1.Secret{ - TypeMeta: metav1.TypeMeta{ - Kind: "Secret", - APIVersion: corev1.SchemeGroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - Namespace: namespace.Name, - Name: opts.Name + "-pull-secret", - }, - Data: map[string][]byte{ - ".dockerconfigjson": opts.PullSecret, - }, - } - - awsCredsSecret := &corev1.Secret{ - TypeMeta: metav1.TypeMeta{ - Kind: "Secret", - APIVersion: corev1.SchemeGroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - Namespace: namespace.Name, - Name: opts.Name + "-provider-creds", - }, - Data: map[string][]byte{ - "credentials": opts.AWSCreds, - }, - } - - sshKeySecret := &corev1.Secret{ - TypeMeta: metav1.TypeMeta{ - Kind: "Secret", - APIVersion: corev1.SchemeGroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - Namespace: namespace.Name, - Name: opts.Name + "-ssh-key", - }, - Data: map[string][]byte{ - "id_rsa.pub": opts.SSHKey, - }, - } - - cluster := &hyperv1.HostedCluster{ - TypeMeta: metav1.TypeMeta{ - Kind: "HostedCluster", - APIVersion: hyperv1.GroupVersion.String(), - }, - ObjectMeta: metav1.ObjectMeta{ - Namespace: namespace.Name, - Name: opts.Name, - }, - Spec: hyperv1.HostedClusterSpec{ - Release: hyperv1.ReleaseSpec{ - Image: opts.ReleaseImage, - }, - InitialComputeReplicas: 2, - ServiceCIDR: "172.31.0.0/16", - PodCIDR: "10.132.0.0/14", - PullSecret: corev1.LocalObjectReference{Name: pullSecret.Name}, - ProviderCreds: corev1.LocalObjectReference{Name: awsCredsSecret.Name}, - SSHKey: corev1.LocalObjectReference{Name: sshKeySecret.Name}, - }, - } - - return []runtime.Object{ - namespace, - pullSecret, - awsCredsSecret, - sshKeySecret, - cluster, - } -} diff --git a/internal/cmd/install/assets/bindata.go b/internal/cmd/install/assets/bindata.go index 9eb124f88811..fca725ca7778 100644 --- a/internal/cmd/install/assets/bindata.go +++ b/internal/cmd/install/assets/bindata.go @@ -16,7 +16,7 @@ // internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml (4.157kB) // internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml (4.494kB) // internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml (5.227kB) -// internal/cmd/install/assets/hypershift_operator.go (6.746kB) +// internal/cmd/install/assets/hypershift_operator.go (6.975kB) // internal/cmd/install/assets/util.go (548B) package assets @@ -406,7 +406,7 @@ func hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml() (*asset, error) { return a, nil } -var _hypershift_operatorGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x59\x5f\x6f\xdb\x38\x12\x7f\x96\x3e\x05\x21\x1c\x0a\xa7\x68\x64\xe4\xee\x1e\x0e\x02\xf2\xe0\xa6\xe9\x35\xd8\x4d\x6b\xc4\x45\x80\x45\x50\x14\x34\x35\xb6\xb9\x95\x48\x81\xa4\xdc\x78\x0d\x7f\xf7\x05\xff\x48\xa2\x2c\x59\x75\x5a\x37\x5b\x3d\x58\xe2\xfc\xe3\x70\x66\x38\xfc\x49\x2e\x30\xf9\x82\x97\x80\xb0\x94\xa0\x64\x18\xd2\xbc\xe0\x42\xa1\x51\x18\xe0\xa2\x90\xeb\x0b\x14\x7d\xf9\x9f\x8c\x29\x1f\xe3\x82\x8e\x35\x69\xbc\xbe\x88\xc2\x80\x70\x01\x7b\x4c\x4d\xb2\x4c\x31\xc7\x64\x8f\xa9\x49\x96\x89\x0b\x0a\x8f\x0a\x98\xa4\x9c\xed\xd9\x6f\xe8\xe7\xb8\xa0\x12\xc4\x1a\xc4\xb8\xf8\xb2\xd4\x3c\xd9\x16\xb0\xb6\x72\x50\xb8\x6d\x22\xc7\x64\x45\x19\x88\x4d\xa3\xa7\x85\x8c\xf8\x59\x18\xaa\x4d\x01\xe8\xdd\xa6\x00\x31\x5b\xd1\x85\x7a\x8f\x73\x90\x05\x26\x80\xa4\x12\x25\x51\x68\x1b\x06\x9a\xa6\x87\x94\x2d\xc3\x5d\x18\x2e\x4a\x46\xd0\x88\xf7\x29\x9d\xa1\xd7\x25\xcd\xd2\xd1\x19\x7a\x69\xc3\x11\x37\xf6\xb6\x61\xc0\xea\x41\x72\x89\x5e\xec\x4b\x6c\xc3\x20\xf8\xb8\x29\xe0\x16\x14\x4e\x90\x5d\x48\x5c\x11\x34\x33\xf8\x8d\xb2\x34\x41\xf6\x8a\x6a\xbd\xe8\x95\xe6\x4d\xa6\x37\xf7\x20\x74\x24\x12\xe4\x2c\xcf\xc8\x0a\x72\xf8\xbf\xe0\x65\xe1\x58\xf1\xcc\xac\x62\x74\xa6\x55\x76\xfa\xe7\xc3\xfc\x4f\x20\xaa\x35\x65\x43\x32\x93\xea\x79\x12\xc4\x8d\x9f\x95\xda\x2e\x0c\x04\xa8\x52\x30\x54\x2f\x49\x47\x66\x2f\x96\x1f\x0a\x10\x58\x71\xf1\x06\x8a\x8c\x6f\x72\x60\x6a\x2f\xa8\x36\x16\xe6\xea\xc4\x2b\x0c\x2a\xf5\x9b\x5c\x57\x63\x95\x80\x60\x06\x62\x4d\x09\x4c\x08\xe1\x25\x53\xb5\x62\x9b\xdc\x9f\xa7\xae\x43\x5e\xc2\x6c\x71\xc7\x9e\xb3\xdb\x30\x48\x9b\x91\x4e\x59\x47\x66\xfb\x84\x10\xda\xb4\x71\xe7\x83\xcd\x5a\xbd\xdc\x2a\xc2\x66\xd0\x8a\x75\x30\x2b\x80\x24\xa8\x33\xb5\x26\x1b\xeb\x77\x50\x64\x94\x60\x99\x20\xca\xd4\x7f\xfe\x3d\x55\x62\x74\x61\x12\x1c\xcc\x20\x03\xa2\xb8\x48\xd0\x0b\xe7\xd8\xef\x78\x0e\x59\x45\x36\xda\xc1\x2d\x56\x64\x65\xe8\x32\x41\x39\x2e\x1e\x6c\xa0\x3f\xd9\x9b\x95\x09\x22\x9d\xe7\x28\xd9\x77\xdf\x3a\xe8\x7e\x3f\x42\x5e\x64\x58\x41\x5d\x7f\x53\x9e\x56\xb4\xda\xd9\x23\xa2\x15\x04\xdf\xf2\xe6\xa0\x3b\xce\x93\xea\x66\x23\xd7\x78\xd3\x78\xb1\x57\x45\x55\x8d\xb7\xa9\x75\x1a\x82\x20\xb8\xe2\x4c\x61\xdd\x46\x64\x82\x1e\x3e\x39\x93\x35\xb1\xf2\xab\xba\xfb\x19\xef\xcd\xbb\xbe\x4c\x5d\xfb\x42\x3c\x6e\x95\x7c\x5b\x70\x5a\x66\xd9\x94\x67\x94\x6c\x9a\x15\x95\x59\x36\xc9\xbe\xe2\x8d\xac\x45\xaf\xd9\xda\xf3\xef\x9a\xad\xef\x71\xed\x9c\xe7\x5e\xe5\x60\x74\xfb\xc7\xe7\xf7\x93\xdb\xeb\xd9\x74\x72\x75\xdd\x78\x16\x04\xf7\x38\x2b\xe1\xad\xe0\x79\x52\xf7\x29\x6b\x6c\xc6\x4b\x61\x5b\x55\x75\xbd\xa5\x90\xa5\x77\xb0\x68\x24\x6d\x3e\x0d\xbd\x5d\x6a\xbe\xc6\x14\xab\x55\x82\x22\x5d\x02\x29\x56\x38\x66\xed\x76\xe6\xae\x9d\x37\xf0\x9e\x9b\xc7\xe6\xe9\x8a\xe7\x39\xd6\xfd\xf1\xa1\x2a\x96\x68\x5c\x4a\x31\x9e\x53\x36\x5e\xe9\x16\x20\x75\x0b\x38\xaf\xf3\xd0\x68\x4e\xc4\x52\x9a\x3c\x34\x9a\xa2\x64\xd1\x2b\x14\x9d\x9f\x7b\x6e\xa1\xe8\x5f\x23\x3f\x5e\x67\x56\xa2\x69\x11\x46\x58\x13\xbb\x73\xec\xfa\xea\x73\xd7\x6d\xa7\x8d\xb1\x81\x7e\xba\xd7\x01\xfb\x7a\x6a\xb7\x9d\x0e\x36\xc4\xb6\xc5\xee\x29\xb6\x37\xe3\x36\x0c\x24\xf6\xcf\xb0\x36\xff\x89\x07\x59\x5b\xf9\x19\x4e\xb3\x81\x86\x7b\xb8\x55\xb7\xf3\x24\xf1\x40\x7e\xae\xb2\x52\x2a\x10\x77\x3c\xab\x50\xc4\x76\x30\xfa\x9e\xbc\x17\x7a\x0b\x99\x62\xdf\xd8\x36\x0c\x84\xbe\xeb\xc8\x77\xd9\x4f\x39\x8b\xa2\xbe\x1d\x51\x87\xf1\xae\xcc\xc0\xf4\x39\x37\x89\xed\x3b\x9a\x6a\x4c\xd8\xcd\x3c\x99\xde\x98\x64\x48\x7f\xc7\x35\x66\x63\x5e\x00\xb3\x4f\x94\x57\x1b\xe1\x0e\xa4\xe9\x1f\x2d\x9d\x97\x15\xf7\x1e\xc4\xdc\x6e\xc4\x1e\xae\xfd\x1d\x98\x9a\x70\xb6\xa0\xcb\x53\x4d\xbb\x04\xa5\x77\x72\x46\xa5\xb9\x7f\xd5\x87\xe4\xb1\x9e\xb4\x60\x69\x6c\x91\xe8\xa0\x2b\xa4\x94\x8a\xe7\xc2\xb1\x52\x58\x50\x46\x95\x56\x3e\x49\x64\xdc\x09\x3e\xe7\x5c\x49\x25\x70\x11\x13\x5b\x33\xf1\xe3\xb9\xf3\xcd\x35\x27\x1d\x42\x25\x78\x56\x64\x98\xc1\x61\x29\xca\x16\x02\xdb\xba\x2e\xc5\x80\x9c\x03\xde\xf2\xb0\x04\x3c\x16\xf1\xb1\xd6\x70\x9a\xea\x68\x0e\xda\x3a\xbc\xb0\x7e\xc6\x33\x54\x65\xb5\xb9\x9e\x7d\x3b\x08\x5e\x2a\x78\xf6\x59\x25\x90\x52\x50\xb5\x39\x7e\xe2\x4a\x43\xd7\x1e\x3c\x2a\xc2\x99\x2e\x52\xca\xd4\x69\x8a\x3f\xd2\x2d\x2c\xc6\xa5\x5a\x71\x41\xff\xc2\x7a\x57\x1d\xb3\x23\x4f\x14\x8e\xa1\x39\xaa\xba\x5d\x83\x5e\xab\xb7\x05\x17\x74\x99\xe3\xa2\x21\x15\x3c\x6d\x0f\xc6\x19\x5f\xd6\x04\x09\x44\x80\x67\x80\xf1\x14\xbc\x51\x75\xc2\x49\x4f\xc1\x1c\xb7\xd8\x1e\xb7\x1d\xba\x6c\xef\x0d\xb7\xfe\xef\x58\xbb\x7e\x61\x19\x8c\x71\x83\x75\x4e\x94\x6a\x50\x24\x8d\x35\x98\x9c\x63\x09\xb1\x86\x0d\x5c\xc6\x84\xe7\xcf\x91\x69\xd7\xec\x7e\xca\x86\x6b\x43\x0f\x8d\x00\x8e\x03\x1f\xaf\x29\x4b\x29\x5b\x7a\x00\xd1\x07\x13\xfa\xa5\xbb\x0b\x22\x4e\xf2\x7e\xdd\xf5\x61\x10\xd7\x54\x7e\x6e\xc3\x60\xee\x1e\xfb\x11\x8e\x13\x7c\x22\xbe\xec\x1a\xe8\x62\x4c\x37\xd7\x29\xbf\x98\x7c\x03\x62\xf1\x0c\xcc\x4b\x93\x9b\xd9\x8d\xb7\xa1\x57\x60\x09\x1a\xe8\x5e\xaf\xda\xeb\xf4\x57\x19\xed\x21\x59\xee\xc7\x70\xef\xdb\x42\x69\x5c\xf7\xc1\x9e\x23\x79\x48\xcf\x8b\x66\x2f\x58\xf7\x41\xf3\xc0\x3b\x74\x0b\x7a\xf7\x48\x19\xde\xa1\xaa\x77\x85\xd1\x53\xf8\xef\xb8\x54\x90\xba\x15\xca\x2b\x03\xa5\xaa\x1d\xf7\xa6\x86\x52\x83\x40\xfc\x38\x13\xad\x6f\x45\xad\x2f\x96\xf1\xc1\x59\xb7\xf5\x02\xf2\x52\xaa\x43\x62\x23\xcd\x9c\x48\x09\xea\x0e\x70\x0a\x62\xd4\x57\x3b\xe3\x03\xd8\xfa\xf3\xca\x78\xef\x20\x8e\x8c\x37\x38\xcf\xa2\xb3\xb3\x9e\x48\xbd\xe7\x29\x4c\x39\xcf\xbe\x2f\x48\xdf\xd4\xfe\x55\xe3\xa3\x4f\xc4\x42\x3b\x3e\x10\x1a\x57\x01\x16\xff\x4e\x35\xfe\xfd\x91\x42\x3a\xc2\xcc\x77\x06\x8b\x88\x54\xf7\xc6\x9f\x5e\x4c\xde\x8b\x40\x13\xb6\x80\x2e\x10\x11\xa9\xfd\x88\x28\xd1\xe5\x25\x62\x34\xd3\x5e\x05\x3e\xb5\xe7\xab\xdd\xce\xec\xe4\x46\xe8\xa1\x03\xc8\xc7\xeb\x0b\x9c\x15\x2b\xfc\xdf\xe8\x13\xba\x44\x91\x1b\x99\x7f\x0e\x6c\x79\x10\x91\xf6\xa4\xed\xfa\x51\x81\x60\x38\xbb\xd1\x2f\x11\x3f\xd4\x02\x9e\x64\xe9\x57\x4d\x1e\xb8\x45\x98\x77\xaa\x4e\x43\xf8\xe7\xd3\xf7\x77\x00\x00\x00\xff\xff\xf9\x15\xa9\x11\x5a\x1a\x00\x00") +var _hypershift_operatorGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x59\xdf\x6f\xdb\xb6\x13\x7f\x96\xfe\x0a\x42\xf8\xa2\xb0\x8b\x46\x46\xbe\xdb\xc3\x60\x20\x0f\x6e\x9a\xae\xc1\x96\xd6\x88\x8b\x00\x43\x50\x14\x34\x75\xb6\xb9\x4a\xa4\x40\x52\x6e\x3c\xc3\xff\xfb\xc0\x1f\x92\x28\x4b\x56\x9d\xd4\xcd\xaa\x07\x4b\x3c\xde\x1d\x8f\xf7\x8b\x1f\xc9\x39\x26\x5f\xf0\x12\x10\x96\x12\x94\x0c\x43\x9a\xe5\x5c\x28\x34\x08\x03\x9c\xe7\x72\x7d\x8e\xa2\x2f\xbf\xc9\x98\xf2\x11\xce\xe9\x48\x93\x46\xeb\xf3\x28\x0c\x08\x17\xb0\x37\xa9\x49\x76\x52\xcc\x31\xd9\x9b\xd4\x24\x3b\x89\x73\x0a\x0f\x0a\x98\xa4\x9c\xed\xe9\xaf\xe9\x67\x38\xa7\x12\xc4\x1a\xc4\x28\xff\xb2\xd4\x73\xb2\xc9\x60\x75\x65\xa0\x70\x53\x45\x86\xc9\x8a\x32\x10\x9b\x5a\x4e\x33\x19\xf6\x61\x18\xaa\x4d\x0e\xe8\xdd\x26\x07\x31\x5b\xd1\x85\x7a\x8f\x33\x90\x39\x26\x80\xa4\x12\x05\x51\x68\x1b\x06\x9a\xa6\x87\x94\x2d\xc3\x5d\x18\x2e\x0a\x46\xd0\x80\x77\x09\x0d\xd1\xeb\x82\xa6\xc9\x60\x88\x5e\x5a\x77\xc4\xb5\xbe\x6d\x18\xb0\x6a\x30\xbe\x40\x2f\xf6\x39\xb6\x61\x10\x7c\xdc\xe4\x70\x03\x0a\x8f\x91\xdd\x48\x5c\x12\xf4\x64\xf0\x07\x65\xc9\x18\xd9\x2b\xaa\xe4\xa2\x57\x7a\x6e\x32\xbd\xbe\x03\xa1\x3d\x31\x46\x4e\xf3\x8c\xac\x20\x83\xdf\x05\x2f\x72\x37\x15\xcf\xcc\x2e\x06\x43\x2d\xb2\xd3\x3f\x1f\xe6\x7f\x03\x51\x8d\x25\x6b\x92\x59\x54\xaf\x33\x46\xdc\xd8\x59\x8a\xed\xc2\x40\x80\x2a\x04\x43\xd5\x96\xb4\x67\xf6\x7c\xf9\x21\x07\x81\x15\x17\x6f\x20\x4f\xf9\x26\x03\xa6\xf6\x9c\x6a\x7d\x61\xae\x96\xbf\xc2\xa0\x14\xbf\xce\x74\x36\x96\x01\x08\x66\x20\xd6\x94\xc0\x84\x10\x5e\x30\x55\x09\x36\xc9\xdd\x71\x6a\x1b\xe4\x05\xcc\x26\x77\xec\x19\xbb\x0d\x83\xa4\x1e\xe9\x90\xb5\x78\x1e\x19\xb3\x5a\xb0\x1d\x34\xa7\xfb\x94\x41\xb3\x8b\x72\xb7\x6b\xbb\x64\xe5\xe0\x32\xa6\x66\xd0\x88\x6e\x30\xcb\x81\x54\x06\xd5\x36\x6b\xb2\xd1\x7e\x0b\x79\x4a\x09\x96\x63\x44\x99\xfa\xe5\xff\x53\x25\x06\xe7\xc6\xba\x60\x06\x29\x10\xc5\xc5\x18\xbd\x70\x86\xfd\x89\xe7\x90\x96\x64\x23\x1d\xdc\x60\x45\x56\x86\x2e\xc7\x28\xc3\xf9\xbd\x0d\xed\x27\x7b\xb3\x3c\x41\xa4\x33\x2b\x1a\xef\x9b\x6f\x0d\x74\xbf\x1f\x21\xcb\x53\xac\xa0\xca\xf8\x29\x4f\x4a\x5a\x65\xec\x11\xde\x0a\x82\x6f\x59\x73\xd0\x1c\x67\x49\x79\xb3\x9e\xab\xad\xa9\xad\xd8\xcb\xdb\xb2\xaa\x9a\xd4\x2a\x0c\x41\x10\x5c\x72\xa6\xb0\x6e\x5c\x72\x8c\xee\x3f\x39\x95\x15\xb1\xb4\xab\xbc\xfb\x11\xef\x8c\xbb\xbe\x4c\x25\xf9\x4c\x3c\x6e\x14\x59\x93\x71\x5a\xa4\xe9\x94\xa7\x94\x6c\xea\x1d\x15\x69\x3a\x49\xbf\xe2\x8d\xac\x58\xaf\xd8\xda\xb3\xef\x8a\xad\xef\x70\x65\x9c\x67\x5e\x69\x60\x74\xf3\xd7\xe7\xf7\x93\x9b\xab\xd9\x74\x72\x79\x55\x5b\x16\x04\x77\x38\x2d\xe0\xad\xe0\xd9\xb8\xea\x8c\x56\xd9\x8c\x17\xc2\x36\xc7\xf2\x7a\x4b\x21\x4d\x6e\x61\x51\x73\xda\x78\x1a\x7a\x33\xd5\x7c\x89\x29\x56\xab\x31\x8a\x74\x0a\x24\x58\xe1\x98\x35\x1b\xa8\xbb\x76\xde\xc0\x7b\xae\x1f\xeb\xa7\x4b\x9e\x65\x58\x57\xf7\x7d\x99\x2c\xd1\xa8\x90\x62\x34\xa7\x6c\xb4\xd2\x4d\x47\xea\xa6\x73\x56\xc5\xa1\x96\x9c\x88\xa5\x34\x71\xa8\x25\x45\xc1\xa2\x57\x28\x3a\x3b\xf3\xcc\x42\xd1\xff\x06\xbe\xbf\x86\x96\xa3\x6e\x4a\x86\x59\x13\xdb\x6b\xec\xba\xf2\x73\xd7\x6e\xe0\xb5\xb2\x9e\x0e\xbe\xd7\x73\xbb\xba\x78\xbb\x81\xf7\xb6\xe0\xa6\xc6\xf6\xb9\xb9\xb7\xe2\x36\x0c\x24\xf6\x4f\xcd\xe6\xfc\x23\xdb\x70\x53\xf8\x19\xce\xcf\x9e\x86\x7b\xb8\x55\x37\xe3\x24\x71\x4f\x7c\x2e\xd3\x42\x2a\x10\xb7\x3c\x2d\x71\xcb\xb6\xd7\xfb\x1e\xbf\xe7\x7a\x0b\xd2\x62\x5f\xd9\x36\x0c\x84\xbe\x6b\xcf\xb7\xa7\x1f\xe9\x76\x4f\xb2\xed\x73\xa7\xfd\x94\xc7\x5f\xd4\x55\x84\x95\x96\xdb\x22\x05\xd3\x5a\xdd\xca\xb6\xd5\x69\xaa\x51\x61\xfb\xc7\x64\x7a\x6d\x6c\x91\x7e\x91\xd7\x6a\x63\x9e\x03\xb3\x4f\x94\x97\xb5\x77\x0b\xd2\xb4\xac\x86\xcc\xcb\x72\xf6\x0e\xc4\xdc\xd6\x7e\xc7\xac\xfd\xed\x59\x9a\x70\xb6\xa0\xcb\x53\x2d\xbb\x04\xa5\x9b\x47\x4a\xa5\xb9\x7f\xd5\xe7\xf2\xb1\x96\x34\xb0\x77\x6c\xe1\x76\xaf\x29\xa4\x90\x8a\x67\xc2\x4d\x25\xb0\xa0\x8c\x2a\x2d\x7c\x12\xcf\x38\xd0\x30\xe7\x5c\x49\x25\x70\x1e\x13\x9b\x6c\xf1\xc3\x99\xb3\xcd\xf5\x43\xed\x42\x25\x78\x9a\xa7\x98\xc1\x61\x2e\xca\x16\x02\xdb\x52\x2a\x44\x0f\x9f\x7b\xbb\x90\x87\x39\xe0\x21\x8f\x8f\xd5\x86\x93\x44\x7b\xb3\x57\xd7\xe1\x8d\x75\x4f\x3c\x43\x56\x96\xc5\xf5\xec\xe5\x20\x78\xa1\xe0\xd9\x57\x95\x40\x0a\x41\xd5\xe6\xf8\x85\x4b\x09\x9d\x7b\xf0\xa0\x08\x67\x3a\x49\x29\x53\xa7\x49\xfe\x48\xb7\xb0\x18\x17\x6a\xc5\x05\xfd\x07\xeb\xaa\x3a\xa6\x22\x4f\xe4\x8e\xbe\x35\xca\xbc\x5d\x83\xde\xab\x57\x82\x0b\xba\xcc\x70\x5e\x93\x72\x9e\x34\x07\xa3\x94\x2f\x2b\x82\x04\x22\xc0\x53\xc0\x78\x02\xde\xa8\x3c\x54\xa5\x27\x60\x4e\x78\x6c\x4f\xf8\x16\x5d\x36\x6b\xc3\xed\xff\x09\x7b\xd7\xef\x48\xbd\x3e\xae\xe1\xd5\x89\x42\x0d\x8a\x24\xb1\xc6\xaf\x73\x2c\x21\xd6\x48\x85\xcb\x98\xf0\xec\x39\x22\xed\x9a\xdd\x0f\x29\xb8\x26\xda\xd1\xa0\xe3\x38\xbc\xf3\x9a\xb2\x84\xb2\xa5\x87\x49\x7d\xfc\x82\x50\x17\xac\x39\xc9\x47\x84\xb6\x0d\xbd\x50\xaa\xb4\x73\x1b\x06\x73\xf7\xd8\x0d\xaa\x1c\xe3\xd3\xb1\x95\x53\xf0\x33\x40\x2c\x9e\x82\x79\x4f\x73\x2b\xbb\xf1\x36\xf4\x12\x6c\x8c\x7a\xba\xd7\xab\xe6\x3e\xdb\x08\xb2\x06\xcf\xdc\xf7\xe1\xde\xe7\x8c\xc2\x98\xee\x83\x3d\x47\xf2\x90\x9e\xe7\xcd\xce\xf7\x03\x1f\xa7\xf7\xbc\xb6\x37\xd0\x7e\x07\x97\x99\x3b\x94\xf5\x2e\x31\x3a\x12\xff\x1d\x97\x0a\x12\xb7\x43\x79\x69\xa0\x54\x59\x71\x6f\x2a\x28\xd5\x8b\xfd\x8f\x53\xd1\xf8\x20\xd6\xf8\x2c\x1b\x1f\x5c\x75\x5b\x6d\x20\x2b\xa4\x3a\xc4\x36\xd0\x93\x13\x29\x41\xdd\x02\x4e\x40\x0c\xba\x72\x67\x74\x00\x5b\x7f\x5e\x19\xeb\x1d\xc4\x91\xf1\x06\x67\x69\x34\x1c\x76\x78\xea\x3d\x4f\x60\xca\x79\xfa\x34\x27\x7d\x53\xfa\x67\xf5\x8f\x3e\x11\x73\x6d\x78\x8f\x6b\x5c\x06\x58\xfc\x3b\xd5\xf8\xf7\x7b\x12\xe9\x08\x35\x4f\x74\x16\x11\x89\xee\x8d\x3f\x3c\x99\xbc\x17\x81\xda\x6d\x01\x5d\x20\x22\x12\xfb\xdd\x52\xa2\x8b\x0b\xc4\x68\xaa\xad\x0a\x7c\x6a\xc7\x87\xc2\x9d\xa9\xe4\x9a\xe9\xbe\x05\xc8\x47\xeb\x73\x9c\xe6\x2b\xfc\x6b\xf4\x09\x5d\xa0\xc8\x8d\xcc\xdf\x23\x36\x3d\x88\x48\x3a\xc2\x76\xf5\xa0\x40\x30\x9c\x5e\xeb\x97\x88\xef\x6a\x01\x8f\xd2\xf4\xb3\x06\x0f\xdc\x26\xcc\x3b\x55\xab\x21\xfc\xf7\xe1\xfb\x37\x00\x00\xff\xff\x9d\x31\x2e\x55\x3f\x1b\x00\x00") func hypershift_operatorGoBytes() ([]byte, error) { return bindataRead( @@ -421,8 +421,8 @@ func hypershift_operatorGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "hypershift_operator.go", size: 6746, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfc, 0x6f, 0xe3, 0x95, 0x86, 0xba, 0xca, 0xc, 0xff, 0x46, 0xab, 0x43, 0x41, 0x7f, 0xed, 0x9d, 0x33, 0xaa, 0x82, 0x74, 0xb, 0x6c, 0xe3, 0xfc, 0x41, 0x19, 0xad, 0xa5, 0x46, 0x75, 0xc1, 0xff}} + info := bindataFileInfo{name: "hypershift_operator.go", size: 6975, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0x7b, 0x8d, 0xea, 0x85, 0x7a, 0xd, 0xe9, 0x6e, 0xca, 0xb0, 0x75, 0xf3, 0x97, 0x87, 0x7a, 0xf2, 0x58, 0xc3, 0x98, 0x7, 0x95, 0x3f, 0xb3, 0x7e, 0xcf, 0x3f, 0xd, 0xc0, 0x4e, 0xd, 0xba}} return a, nil } diff --git a/internal/cmd/install/install.go b/internal/cmd/install/install.go index 152582b3850a..11bbbc52876b 100644 --- a/internal/cmd/install/install.go +++ b/internal/cmd/install/install.go @@ -34,6 +34,7 @@ import ( capiaws "sigs.k8s.io/cluster-api-provider-aws/api/v1alpha3" capiv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + hyperapi "openshift.io/hypershift/api" hyperv1 "openshift.io/hypershift/api/v1alpha1" "openshift.io/hypershift/internal/cmd/install/assets" ) @@ -74,7 +75,7 @@ func NewCommand() *cobra.Command { var opts Options cmd.Flags().StringVar(&opts.Namespace, "namespace", "hypershift", "The namespace in which to install HyperShift") - cmd.Flags().StringVar(&opts.HyperShiftImage, "hypershift-image", "registry.ci.openshift.org/hypershift/hypershift:latest", "The HyperShift image to deploy") + cmd.Flags().StringVar(&opts.HyperShiftImage, "hypershift-image", hyperapi.HyperShiftImage, "The HyperShift image to deploy") cmd.Run = func(cmd *cobra.Command, args []string) { var objects []runtime.Object diff --git a/test/e2e/Makefile b/test/e2e/Makefile deleted file mode 100644 index cb75d0372ef5..000000000000 --- a/test/e2e/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -.DEFAULT_GOAL:=help - -REPO_ROOT := $(shell git rev-parse --show-toplevel) -DATA_DIR := $(REPO_ROOT)/test/e2e/data - -help: ## Display this help - @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf " \033[36m%-25s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) - -## -------------------------------------- -## Binaries -## -------------------------------------- - -TOOLS_DIR := $(REPO_ROOT)/hack/tools -BIN_DIR := bin -TOOLS_BIN_DIR := $(TOOLS_DIR)/$(BIN_DIR) -GINKGO := $(TOOLS_BIN_DIR)/ginkgo -KUSTOMIZE := $(TOOLS_BIN_DIR)/kustomize - -$(GINKGO): # Build ginkgo from tools folder. - cd $(TOOLS_DIR) && go build -tags=tools -o $(BIN_DIR)/ginkgo github.com/onsi/ginkgo/ginkgo - -$(KUSTOMIZE): # Build kustomize from tools folder. - $(REPO_ROOT)/hack/ensure-kustomize.sh - -## -------------------------------------- -## Data -## -------------------------------------- - -.PHONY: example-cluster -example-cluster: - mkdir -p $(DATA_DIR) - KUSTOMIZE_PLUGIN_HOME=$(REPO_ROOT)/config/example-cluster/plugin kustomize build --enable_alpha_plugins $(REPO_ROOT)/config/example-cluster > $(DATA_DIR)/example-cluster.yaml - -## -------------------------------------- -## Testing -## -------------------------------------- - -GINKGO_FOCUS ?= -GINKGO_NODES ?= 1 -SKIP_RESOURCE_CLEANUP ?= false -GINKGO_NOCOLOR ?= false - -.PHONY: run -run: $(GINKGO) example-cluster ## Run the end-to-end tests - $(GINKGO) -v -trace -tags=e2e -focus="$(GINKGO_FOCUS)" -nodes=$(GINKGO_NODES) --noColor=$(GINKGO_NOCOLOR) $(GINKGO_ARGS) . -- \ - -e2e.data-dir="$(DATA_DIR)" diff --git a/test/e2e/e2e_suite_test.go b/test/e2e/e2e_suite_test.go index a5975dd7e664..c21192c06a98 100644 --- a/test/e2e/e2e_suite_test.go +++ b/test/e2e/e2e_suite_test.go @@ -8,38 +8,31 @@ import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" - configv1 "github.com/openshift/api/config/v1" - operatorv1 "github.com/openshift/api/operator/v1" - routev1 "github.com/openshift/api/route/v1" - securityv1 "github.com/openshift/api/security/v1" - "k8s.io/apimachinery/pkg/runtime" - clientgoscheme "k8s.io/client-go/kubernetes/scheme" - capiv1 "sigs.k8s.io/cluster-api/api/v1alpha4" - ctrl "sigs.k8s.io/controller-runtime" ctrlclient "sigs.k8s.io/controller-runtime/pkg/client" - hyperv1 "openshift.io/hypershift/api/v1alpha1" + hyperapi "openshift.io/hypershift/api" ) // Test suite globals var ( - scheme = runtime.NewScheme() - client ctrlclient.Client - dataDir string + client ctrlclient.Client + + quickStartSpecOptions QuickStartSpecOptions ) +type QuickStartSpecOptions struct { + AWSCredentialsFile string + PullSecretFile string + SSHKeyFile string + ReleaseImage string +} + func init() { - // TODO: extract and share this - clientgoscheme.AddToScheme(scheme) - hyperv1.AddToScheme(scheme) - capiv1.AddToScheme(scheme) - configv1.AddToScheme(scheme) - securityv1.AddToScheme(scheme) - operatorv1.AddToScheme(scheme) - routev1.AddToScheme(scheme) - - flag.StringVar(&dataDir, "e2e.data-dir", "", "path to generated e2e test data") + flag.StringVar(&quickStartSpecOptions.AWSCredentialsFile, "e2e.quick-start.aws-credentials-file", "", "path to AWS credentials") + flag.StringVar(&quickStartSpecOptions.PullSecretFile, "e2e.quick-start.pull-secret-file", "", "path to pull secret") + flag.StringVar(&quickStartSpecOptions.SSHKeyFile, "e2e.quick-start.ssh-key-file", "", "path to SSH public key") + flag.StringVar(&quickStartSpecOptions.ReleaseImage, "e2e.quick-start.release-image", hyperapi.OCPReleaseImage, "OCP release image to test") } func TestE2E(t *testing.T) { @@ -48,7 +41,7 @@ func TestE2E(t *testing.T) { } var _ = SynchronizedBeforeSuite(func() []byte { - kubeClient, err := ctrlclient.New(ctrl.GetConfigOrDie(), ctrlclient.Options{Scheme: scheme}) + kubeClient, err := ctrlclient.New(ctrl.GetConfigOrDie(), ctrlclient.Options{Scheme: hyperapi.Scheme}) Expect(err).ShouldNot(HaveOccurred()) client = kubeClient return nil diff --git a/test/e2e/quick_start_test.go b/test/e2e/quick_start_test.go index 2869c9a1dab3..94619172f62c 100644 --- a/test/e2e/quick_start_test.go +++ b/test/e2e/quick_start_test.go @@ -5,8 +5,6 @@ package e2e import ( "context" "io/ioutil" - "path/filepath" - "strings" "time" . "github.com/onsi/ginkgo" @@ -14,32 +12,43 @@ import ( corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/types" - "k8s.io/apimachinery/pkg/util/yaml" - clientcmd "k8s.io/client-go/tools/clientcmd" + "k8s.io/client-go/tools/clientcmd" ctrl "sigs.k8s.io/controller-runtime/pkg/client" - hyperv1 "openshift.io/hypershift/api/v1alpha1" + hyperapi "openshift.io/hypershift/api" + apifixtures "openshift.io/hypershift/api/fixtures" "openshift.io/hypershift/test/e2e/internal/log" ) var _ = Describe("When following the HyperShift quick-start [PR-Blocking]", func() { QuickStartSpec(context.TODO(), func() QuickStartSpecInput { - return QuickStartSpecInput{ - Client: client, - DataDir: dataDir, + input := QuickStartSpecInput{ + Client: client, + ReleaseImage: quickStartSpecOptions.ReleaseImage, } + var err error + input.PullSecret, err = ioutil.ReadFile(quickStartSpecOptions.PullSecretFile) + Expect(err).NotTo(HaveOccurred(), "couldn't read pull secret file %q", quickStartSpecOptions.PullSecretFile) + + input.AWSCredentials, err = ioutil.ReadFile(quickStartSpecOptions.AWSCredentialsFile) + Expect(err).NotTo(HaveOccurred(), "couldn't read aws credentials file %q", quickStartSpecOptions.AWSCredentialsFile) + + input.SSHKey, err = ioutil.ReadFile(quickStartSpecOptions.SSHKeyFile) + Expect(err).NotTo(HaveOccurred(), "couldn't read SSH key file %q", quickStartSpecOptions.SSHKeyFile) + return input }) }) // QuickStartSpecInput is the input for QuickStartSpec. type QuickStartSpecInput struct { - Client ctrl.Client - DataDir string + Client ctrl.Client + ReleaseImage string + AWSCredentials []byte + PullSecret []byte + SSHKey []byte } // QuickStartSpec implements a spec that mimics the operation described in the @@ -59,61 +68,52 @@ func QuickStartSpec(ctx context.Context, inputGetter func() QuickStartSpecInput) Expect(ctx).NotTo(BeNil(), "ctx is required for %s spec", specName) input = inputGetter() Expect(input.Client).ToNot(BeNil(), "Invalid argument. input.Client can't be nil when calling %s spec", specName) - Expect(input.DataDir).ToNot(BeEmpty(), "Invalid argument. input.DataDir can't be empty when calling %s spec", specName) + Expect(input.ReleaseImage).ToNot(BeEmpty(), "Invalid argument. input.ReleaseImage can't be empty when calling %s spec", specName) + Expect(input.AWSCredentials).ToNot(BeEmpty(), "Invalid argument. input.AWSCredentials can't be empty when calling %s spec", specName) + Expect(input.PullSecret).ToNot(BeEmpty(), "Invalid argument. input.PullSecret can't be empty when calling %s spec", specName) + Expect(input.SSHKey).ToNot(BeEmpty(), "Invalid argument. input.SSHKey can't be empty when calling %s spec", specName) }) It("Should create a functional guest cluster", func() { By("Applying the example cluster resources") - // Load the example cluster resources - exampleClusterPath := filepath.Join(input.DataDir, "example-cluster.yaml") - resourceData, err := ioutil.ReadFile(exampleClusterPath) - Expect(err).NotTo(HaveOccurred(), "couldn't read example cluster data from %s", exampleClusterPath) - namespace = &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ GenerateName: "e2e-", }, } - err = input.Client.Create(ctx, namespace) + err := input.Client.Create(ctx, namespace) Expect(err).NotTo(HaveOccurred(), "couldn't create namespace") Expect(namespace.Name).NotTo(BeEmpty(), "generated namespace has no name") log.Logf("Created test namespace %s", namespace.Name) - // Apply each resource into the hypershift namespace individually using - // a server-side apply - resources := strings.Split(string(resourceData), "---\n") - for _, resource := range resources { - obj := &unstructured.Unstructured{} - Expect(yaml.NewYAMLOrJSONDecoder(strings.NewReader(resource), 100).Decode(obj)).To(Succeed(), "couldn't read resource") - obj.SetNamespace(namespace.Name) - err := input.Client.Patch(ctx, obj, ctrl.RawPatch(types.ApplyPatchType, []byte(resource)), ctrl.ForceOwnership, ctrl.FieldOwner("hypershift")) - Expect(err).NotTo(HaveOccurred(), "couldn't apply resource") - } + example := apifixtures.ExampleOptions{ + Namespace: namespace.Name, + Name: "example", + ReleaseImage: input.ReleaseImage, + PullSecret: input.PullSecret, + AWSCredentials: input.AWSCredentials, + SSHKey: input.SSHKey, + }.Resources() - // Get the actual HostedCluster that was created - log.Logf("Waiting for cluster resource to exist") - cluster := &hyperv1.HostedCluster{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: namespace.Name, - Name: "example", - }, - } - Eventually(func() bool { - key := ctrl.ObjectKey{ - Namespace: cluster.Namespace, - Name: cluster.Name, - } - if err := input.Client.Get(ctx, key, cluster); err != nil { - log.Logf("error getting cluster: %s", err) - return false - } - return true - }, 30*time.Second, 1*time.Second).Should(BeTrue(), "couldn't find example cluster") + err = input.Client.Create(ctx, example.PullSecret) + Expect(err).NotTo(HaveOccurred(), "couldn't create pull secret") + log.Logf("Created test pull secret %s", example.PullSecret.Name) - // Perform some very basic assertions about the guest cluster + err = input.Client.Create(ctx, example.AWSCredentials) + Expect(err).NotTo(HaveOccurred(), "couldn't create aws credentials secret") + log.Logf("Created test aws credentials secret %s", example.AWSCredentials.Name) + + err = input.Client.Create(ctx, example.SSHKey) + Expect(err).NotTo(HaveOccurred(), "couldn't create ssh key secret") + log.Logf("Created test ssh key secret %s", example.SSHKey.Name) + err = input.Client.Create(ctx, example.Cluster) + Expect(err).NotTo(HaveOccurred(), "couldn't create cluster") + log.Logf("Created test hostedcluster %s", example.Cluster.Name) + + // Perform some very basic assertions about the guest cluster By("Ensuring the guest cluster exposes a valid kubeconfig") log.Logf("Waiting for guest kubeconfig to become available") @@ -121,8 +121,8 @@ func QuickStartSpec(ctx context.Context, inputGetter func() QuickStartSpecInput) Eventually(func() bool { key := ctrl.ObjectKey{ // TODO: This resource needs extracted into a library function - Namespace: cluster.GetName(), - Name: cluster.Name + "-kubeconfig", + Namespace: example.Cluster.GetName(), + Name: example.Cluster.Name + "-kubeconfig", } if err := input.Client.Get(ctx, key, guestKubeConfigSecret); err != nil { return false @@ -139,7 +139,7 @@ func QuickStartSpec(ctx context.Context, inputGetter func() QuickStartSpecInput) By("Establishing a connection to the guest apiserver") var guestClient ctrl.Client Eventually(func() bool { - kubeClient, err := ctrl.New(guestConfig, ctrl.Options{Scheme: scheme}) + kubeClient, err := ctrl.New(guestConfig, ctrl.Options{Scheme: hyperapi.Scheme}) if err != nil { return false } From ff14c2537ccfde8d946118e27d5c8d0326863be2 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Tue, 9 Feb 2021 16:59:20 -0500 Subject: [PATCH 05/20] cli: remove remaining kustomize stuff --- config/example-cluster/cluster.yaml | 16 ----------- .../imagedefaulter-plugin.yaml | 4 --- config/example-cluster/kustomization.yaml | 28 ------------------- .../imagedefaulter/ImageDefaulter | 6 ---- 4 files changed, 54 deletions(-) delete mode 100644 config/example-cluster/cluster.yaml delete mode 100644 config/example-cluster/imagedefaulter-plugin.yaml delete mode 100644 config/example-cluster/kustomization.yaml delete mode 100755 config/example-cluster/plugin/hypershiftplugin/imagedefaulter/ImageDefaulter diff --git a/config/example-cluster/cluster.yaml b/config/example-cluster/cluster.yaml deleted file mode 100644 index 6eebe043c9f8..000000000000 --- a/config/example-cluster/cluster.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: hypershift.openshift.io/v1alpha1 -kind: HostedCluster -metadata: - name: example -spec: - release: - image: quay.io/openshift-release-dev/ocp-release:4.7.0-fc.3-x86_64 - initialComputeReplicas: 2 - serviceCIDR: 172.31.0.0/16 - podCIDR: 10.132.0.0/14 - pullSecret: - name: pull-secret - sshKey: - name: ssh-key - providerCreds: - name: provider-creds diff --git a/config/example-cluster/imagedefaulter-plugin.yaml b/config/example-cluster/imagedefaulter-plugin.yaml deleted file mode 100644 index 592561049e4b..000000000000 --- a/config/example-cluster/imagedefaulter-plugin.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: hypershiftplugin -kind: ImageDefaulter -metadata: - name: imagedefaulter diff --git a/config/example-cluster/kustomization.yaml b/config/example-cluster/kustomization.yaml deleted file mode 100644 index 3ee0cc58a9c3..000000000000 --- a/config/example-cluster/kustomization.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: -- cluster.yaml - -transformers: -- imagedefaulter-plugin.yaml - -secretGenerator: -- name: pull-secret - options: - disableNameSuffixHash: true - files: - - .dockerconfigjson=pull-secret - type: Opaque -- name: ssh-key - options: - disableNameSuffixHash: true - files: - - id_rsa.pub=ssh-key - type: Opaque -- name: provider-creds - options: - disableNameSuffixHash: true - files: - - credentials=aws-creds - type: Opaque diff --git a/config/example-cluster/plugin/hypershiftplugin/imagedefaulter/ImageDefaulter b/config/example-cluster/plugin/hypershiftplugin/imagedefaulter/ImageDefaulter deleted file mode 100755 index 79e4430d9b95..000000000000 --- a/config/example-cluster/plugin/hypershiftplugin/imagedefaulter/ImageDefaulter +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -euo pipefail - -FROM="quay.io/openshift-release-dev/ocp-release:4.6.7-x86_64" -TO="$(oc get clusterversion/version -o jsonpath='{.status.desired.image}')" -cat | sed s#$FROM#$TO#g From c7df3b4ef09da3963f4deda1f343599751256ba6 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Tue, 9 Feb 2021 17:00:27 -0500 Subject: [PATCH 06/20] cli: remove ginkgo binary requirement --- hack/tools/tools.go | 1 - 1 file changed, 1 deletion(-) diff --git a/hack/tools/tools.go b/hack/tools/tools.go index b0c3d2114fe6..b82281b63ab6 100644 --- a/hack/tools/tools.go +++ b/hack/tools/tools.go @@ -7,6 +7,5 @@ package tools import ( _ "github.com/kevinburke/go-bindata/go-bindata" - _ "github.com/onsi/ginkgo/ginkgo" _ "sigs.k8s.io/controller-tools/cmd/controller-gen" ) From 137353a05c6422a34b3295ceadeb4aecf625ffef Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Tue, 9 Feb 2021 17:01:37 -0500 Subject: [PATCH 07/20] cli: remove unused ginkgo vendored stuff --- .../onsi/ginkgo/ginkgo/bootstrap_command.go | 199 ------- .../onsi/ginkgo/ginkgo/build_command.go | 66 --- .../ginkgo/ginkgo/convert/ginkgo_ast_nodes.go | 123 ---- .../onsi/ginkgo/ginkgo/convert/import.go | 90 --- .../ginkgo/ginkgo/convert/package_rewriter.go | 128 ---- .../onsi/ginkgo/ginkgo/convert/test_finder.go | 56 -- .../ginkgo/convert/testfile_rewriter.go | 162 ----- .../ginkgo/convert/testing_t_rewriter.go | 130 ---- .../onsi/ginkgo/ginkgo/convert_command.go | 45 -- .../onsi/ginkgo/ginkgo/generate_command.go | 254 -------- .../onsi/ginkgo/ginkgo/help_command.go | 31 - .../interrupthandler/interrupt_handler.go | 52 -- .../sigquit_swallower_unix.go | 14 - .../sigquit_swallower_windows.go | 7 - vendor/github.com/onsi/ginkgo/ginkgo/main.go | 302 ---------- .../onsi/ginkgo/ginkgo/nodot/nodot.go | 196 ------- .../onsi/ginkgo/ginkgo/nodot_command.go | 77 --- .../onsi/ginkgo/ginkgo/notifications.go | 141 ----- .../onsi/ginkgo/ginkgo/run_command.go | 291 --------- .../run_watch_and_build_command_flags.go | 169 ------ .../onsi/ginkgo/ginkgo/suite_runner.go | 173 ------ .../ginkgo/ginkgo/testrunner/build_args.go | 7 - .../ginkgo/testrunner/build_args_old.go | 7 - .../ginkgo/ginkgo/testrunner/log_writer.go | 52 -- .../ginkgo/ginkgo/testrunner/run_result.go | 27 - .../ginkgo/ginkgo/testrunner/test_runner.go | 554 ------------------ .../ginkgo/ginkgo/testsuite/test_suite.go | 115 ---- .../ginkgo/testsuite/vendor_check_go15.go | 16 - .../ginkgo/testsuite/vendor_check_go16.go | 15 - .../onsi/ginkgo/ginkgo/unfocus_command.go | 180 ------ .../onsi/ginkgo/ginkgo/version_command.go | 24 - .../onsi/ginkgo/ginkgo/watch/delta.go | 22 - .../onsi/ginkgo/ginkgo/watch/delta_tracker.go | 75 --- .../onsi/ginkgo/ginkgo/watch/dependencies.go | 92 --- .../onsi/ginkgo/ginkgo/watch/package_hash.go | 104 ---- .../ginkgo/ginkgo/watch/package_hashes.go | 85 --- .../onsi/ginkgo/ginkgo/watch/suite.go | 87 --- .../onsi/ginkgo/ginkgo/watch_command.go | 175 ------ vendor/modules.txt | 7 - 39 files changed, 4350 deletions(-) delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/build_command.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/convert/ginkgo_ast_nodes.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/convert/import.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/convert/test_finder.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/convert/testing_t_rewriter.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/convert_command.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/generate_command.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/help_command.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_unix.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_windows.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/main.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/nodot_command.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/notifications.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/run_command.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/run_watch_and_build_command_flags.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/suite_runner.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/testrunner/build_args.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/testrunner/build_args_old.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/testrunner/log_writer.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/testrunner/run_result.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/testsuite/test_suite.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/testsuite/vendor_check_go15.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/testsuite/vendor_check_go16.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/unfocus_command.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/version_command.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/watch/delta.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/watch/delta_tracker.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hashes.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/watch/suite.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/watch_command.go diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go deleted file mode 100644 index 93150d1a4c8e..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go +++ /dev/null @@ -1,199 +0,0 @@ -package main - -import ( - "bytes" - "flag" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "strings" - "text/template" - - "go/build" - - "github.com/onsi/ginkgo/ginkgo/nodot" -) - -func BuildBootstrapCommand() *Command { - var ( - agouti, noDot, internal bool - customBootstrapFile string - ) - flagSet := flag.NewFlagSet("bootstrap", flag.ExitOnError) - flagSet.BoolVar(&agouti, "agouti", false, "If set, bootstrap will generate a bootstrap file for writing Agouti tests") - flagSet.BoolVar(&noDot, "nodot", false, "If set, bootstrap will generate a bootstrap file that does not . import ginkgo and gomega") - flagSet.BoolVar(&internal, "internal", false, "If set, generate will generate a test file that uses the regular package name") - flagSet.StringVar(&customBootstrapFile, "template", "", "If specified, generate will use the contents of the file passed as the bootstrap template") - - return &Command{ - Name: "bootstrap", - FlagSet: flagSet, - UsageCommand: "ginkgo bootstrap ", - Usage: []string{ - "Bootstrap a test suite for the current package", - "Accepts the following flags:", - }, - Command: func(args []string, additionalArgs []string) { - generateBootstrap(agouti, noDot, internal, customBootstrapFile) - }, - } -} - -var bootstrapText = `package {{.Package}} - -import ( - "testing" - - {{.GinkgoImport}} - {{.GomegaImport}} -) - -func Test{{.FormattedName}}(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "{{.FormattedName}} Suite") -} -` - -var agoutiBootstrapText = `package {{.Package}} - -import ( - "testing" - - {{.GinkgoImport}} - {{.GomegaImport}} - "github.com/sclevine/agouti" -) - -func Test{{.FormattedName}}(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "{{.FormattedName}} Suite") -} - -var agoutiDriver *agouti.WebDriver - -var _ = BeforeSuite(func() { - // Choose a WebDriver: - - agoutiDriver = agouti.PhantomJS() - // agoutiDriver = agouti.Selenium() - // agoutiDriver = agouti.ChromeDriver() - - Expect(agoutiDriver.Start()).To(Succeed()) -}) - -var _ = AfterSuite(func() { - Expect(agoutiDriver.Stop()).To(Succeed()) -}) -` - -type bootstrapData struct { - Package string - FormattedName string - GinkgoImport string - GomegaImport string -} - -func getPackageAndFormattedName() (string, string, string) { - path, err := os.Getwd() - if err != nil { - complainAndQuit("Could not get current working directory: \n" + err.Error()) - } - - dirName := strings.Replace(filepath.Base(path), "-", "_", -1) - dirName = strings.Replace(dirName, " ", "_", -1) - - pkg, err := build.ImportDir(path, 0) - packageName := pkg.Name - if err != nil { - packageName = dirName - } - - formattedName := prettifyPackageName(filepath.Base(path)) - return packageName, dirName, formattedName -} - -func prettifyPackageName(name string) string { - name = strings.Replace(name, "-", " ", -1) - name = strings.Replace(name, "_", " ", -1) - name = strings.Title(name) - name = strings.Replace(name, " ", "", -1) - return name -} - -func determinePackageName(name string, internal bool) string { - if internal { - return name - } - - return name + "_test" -} - -func fileExists(path string) bool { - _, err := os.Stat(path) - return err == nil -} - -func generateBootstrap(agouti, noDot, internal bool, customBootstrapFile string) { - packageName, bootstrapFilePrefix, formattedName := getPackageAndFormattedName() - data := bootstrapData{ - Package: determinePackageName(packageName, internal), - FormattedName: formattedName, - GinkgoImport: `. "github.com/onsi/ginkgo"`, - GomegaImport: `. "github.com/onsi/gomega"`, - } - - if noDot { - data.GinkgoImport = `"github.com/onsi/ginkgo"` - data.GomegaImport = `"github.com/onsi/gomega"` - } - - targetFile := fmt.Sprintf("%s_suite_test.go", bootstrapFilePrefix) - if fileExists(targetFile) { - fmt.Printf("%s already exists.\n\n", targetFile) - os.Exit(1) - } else { - fmt.Printf("Generating ginkgo test suite bootstrap for %s in:\n\t%s\n", packageName, targetFile) - } - - f, err := os.Create(targetFile) - if err != nil { - complainAndQuit("Could not create file: " + err.Error()) - panic(err.Error()) - } - defer f.Close() - - var templateText string - if customBootstrapFile != "" { - tpl, err := ioutil.ReadFile(customBootstrapFile) - if err != nil { - panic(err.Error()) - } - templateText = string(tpl) - } else if agouti { - templateText = agoutiBootstrapText - } else { - templateText = bootstrapText - } - - bootstrapTemplate, err := template.New("bootstrap").Parse(templateText) - if err != nil { - panic(err.Error()) - } - - buf := &bytes.Buffer{} - bootstrapTemplate.Execute(buf, data) - - if noDot { - contents, err := nodot.ApplyNoDot(buf.Bytes()) - if err != nil { - complainAndQuit("Failed to import nodot declarations: " + err.Error()) - } - fmt.Println("To update the nodot declarations in the future, switch to this directory and run:\n\tginkgo nodot") - buf = bytes.NewBuffer(contents) - } - - buf.WriteTo(f) - - goFmt(targetFile) -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/build_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/build_command.go deleted file mode 100644 index 2fddef0f7b42..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/build_command.go +++ /dev/null @@ -1,66 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "os" - "path/filepath" - - "github.com/onsi/ginkgo/ginkgo/interrupthandler" - "github.com/onsi/ginkgo/ginkgo/testrunner" -) - -func BuildBuildCommand() *Command { - commandFlags := NewBuildCommandFlags(flag.NewFlagSet("build", flag.ExitOnError)) - interruptHandler := interrupthandler.NewInterruptHandler() - builder := &SpecBuilder{ - commandFlags: commandFlags, - interruptHandler: interruptHandler, - } - - return &Command{ - Name: "build", - FlagSet: commandFlags.FlagSet, - UsageCommand: "ginkgo build ", - Usage: []string{ - "Build the passed in (or the package in the current directory if left blank).", - "Accepts the following flags:", - }, - Command: builder.BuildSpecs, - } -} - -type SpecBuilder struct { - commandFlags *RunWatchAndBuildCommandFlags - interruptHandler *interrupthandler.InterruptHandler -} - -func (r *SpecBuilder) BuildSpecs(args []string, additionalArgs []string) { - r.commandFlags.computeNodes() - - suites, _ := findSuites(args, r.commandFlags.Recurse, r.commandFlags.SkipPackage, false) - - if len(suites) == 0 { - complainAndQuit("Found no test suites") - } - - passed := true - for _, suite := range suites { - runner := testrunner.New(suite, 1, false, 0, r.commandFlags.GoOpts, nil) - fmt.Printf("Compiling %s...\n", suite.PackageName) - - path, _ := filepath.Abs(filepath.Join(suite.Path, fmt.Sprintf("%s.test", suite.PackageName))) - err := runner.CompileTo(path) - if err != nil { - fmt.Println(err.Error()) - passed = false - } else { - fmt.Printf(" compiled %s.test\n", suite.PackageName) - } - } - - if passed { - os.Exit(0) - } - os.Exit(1) -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert/ginkgo_ast_nodes.go b/vendor/github.com/onsi/ginkgo/ginkgo/convert/ginkgo_ast_nodes.go deleted file mode 100644 index 02e2b3b328d7..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert/ginkgo_ast_nodes.go +++ /dev/null @@ -1,123 +0,0 @@ -package convert - -import ( - "fmt" - "go/ast" - "strings" - "unicode" -) - -/* - * Creates a func init() node - */ -func createVarUnderscoreBlock() *ast.ValueSpec { - valueSpec := &ast.ValueSpec{} - object := &ast.Object{Kind: 4, Name: "_", Decl: valueSpec, Data: 0} - ident := &ast.Ident{Name: "_", Obj: object} - valueSpec.Names = append(valueSpec.Names, ident) - return valueSpec -} - -/* - * Creates a Describe("Testing with ginkgo", func() { }) node - */ -func createDescribeBlock() *ast.CallExpr { - blockStatement := &ast.BlockStmt{List: []ast.Stmt{}} - - fieldList := &ast.FieldList{} - funcType := &ast.FuncType{Params: fieldList} - funcLit := &ast.FuncLit{Type: funcType, Body: blockStatement} - basicLit := &ast.BasicLit{Kind: 9, Value: "\"Testing with Ginkgo\""} - describeIdent := &ast.Ident{Name: "Describe"} - return &ast.CallExpr{Fun: describeIdent, Args: []ast.Expr{basicLit, funcLit}} -} - -/* - * Convenience function to return the name of the *testing.T param - * for a Test function that will be rewritten. This is useful because - * we will want to replace the usage of this named *testing.T inside the - * body of the function with a GinktoT. - */ -func namedTestingTArg(node *ast.FuncDecl) string { - return node.Type.Params.List[0].Names[0].Name // *exhale* -} - -/* - * Convenience function to return the block statement node for a Describe statement - */ -func blockStatementFromDescribe(desc *ast.CallExpr) *ast.BlockStmt { - var funcLit *ast.FuncLit - var found = false - - for _, node := range desc.Args { - switch node := node.(type) { - case *ast.FuncLit: - found = true - funcLit = node - break - } - } - - if !found { - panic("Error finding ast.FuncLit inside describe statement. Somebody done goofed.") - } - - return funcLit.Body -} - -/* convenience function for creating an It("TestNameHere") - * with all the body of the test function inside the anonymous - * func passed to It() - */ -func createItStatementForTestFunc(testFunc *ast.FuncDecl) *ast.ExprStmt { - blockStatement := &ast.BlockStmt{List: testFunc.Body.List} - fieldList := &ast.FieldList{} - funcType := &ast.FuncType{Params: fieldList} - funcLit := &ast.FuncLit{Type: funcType, Body: blockStatement} - - testName := rewriteTestName(testFunc.Name.Name) - basicLit := &ast.BasicLit{Kind: 9, Value: fmt.Sprintf("\"%s\"", testName)} - itBlockIdent := &ast.Ident{Name: "It"} - callExpr := &ast.CallExpr{Fun: itBlockIdent, Args: []ast.Expr{basicLit, funcLit}} - return &ast.ExprStmt{X: callExpr} -} - -/* -* rewrite test names to be human readable -* eg: rewrites "TestSomethingAmazing" as "something amazing" - */ -func rewriteTestName(testName string) string { - nameComponents := []string{} - currentString := "" - indexOfTest := strings.Index(testName, "Test") - if indexOfTest != 0 { - return testName - } - - testName = strings.Replace(testName, "Test", "", 1) - first, rest := testName[0], testName[1:] - testName = string(unicode.ToLower(rune(first))) + rest - - for _, rune := range testName { - if unicode.IsUpper(rune) { - nameComponents = append(nameComponents, currentString) - currentString = string(unicode.ToLower(rune)) - } else { - currentString += string(rune) - } - } - - return strings.Join(append(nameComponents, currentString), " ") -} - -func newGinkgoTFromIdent(ident *ast.Ident) *ast.CallExpr { - return &ast.CallExpr{ - Lparen: ident.NamePos + 1, - Rparen: ident.NamePos + 2, - Fun: &ast.Ident{Name: "GinkgoT"}, - } -} - -func newGinkgoTInterface() *ast.Ident { - return &ast.Ident{Name: "GinkgoTInterface"} -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert/import.go b/vendor/github.com/onsi/ginkgo/ginkgo/convert/import.go deleted file mode 100644 index 06c6ec94c90b..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert/import.go +++ /dev/null @@ -1,90 +0,0 @@ -package convert - -import ( - "fmt" - "go/ast" -) - -/* - * Given the root node of an AST, returns the node containing the - * import statements for the file. - */ -func importsForRootNode(rootNode *ast.File) (imports *ast.GenDecl, err error) { - for _, declaration := range rootNode.Decls { - decl, ok := declaration.(*ast.GenDecl) - if !ok || len(decl.Specs) == 0 { - continue - } - - _, ok = decl.Specs[0].(*ast.ImportSpec) - if ok { - imports = decl - return - } - } - - err = fmt.Errorf("Could not find imports for root node:\n\t%#v\n", rootNode) - return -} - -/* - * Removes "testing" import, if present - */ -func removeTestingImport(rootNode *ast.File) { - importDecl, err := importsForRootNode(rootNode) - if err != nil { - panic(err.Error()) - } - - var index int - for i, importSpec := range importDecl.Specs { - importSpec := importSpec.(*ast.ImportSpec) - if importSpec.Path.Value == "\"testing\"" { - index = i - break - } - } - - importDecl.Specs = append(importDecl.Specs[:index], importDecl.Specs[index+1:]...) -} - -/* - * Adds import statements for onsi/ginkgo, if missing - */ -func addGinkgoImports(rootNode *ast.File) { - importDecl, err := importsForRootNode(rootNode) - if err != nil { - panic(err.Error()) - } - - if len(importDecl.Specs) == 0 { - // TODO: might need to create a import decl here - panic("unimplemented : expected to find an imports block") - } - - needsGinkgo := true - for _, importSpec := range importDecl.Specs { - importSpec, ok := importSpec.(*ast.ImportSpec) - if !ok { - continue - } - - if importSpec.Path.Value == "\"github.com/onsi/ginkgo\"" { - needsGinkgo = false - } - } - - if needsGinkgo { - importDecl.Specs = append(importDecl.Specs, createImport(".", "\"github.com/onsi/ginkgo\"")) - } -} - -/* - * convenience function to create an import statement - */ -func createImport(name, path string) *ast.ImportSpec { - return &ast.ImportSpec{ - Name: &ast.Ident{Name: name}, - Path: &ast.BasicLit{Kind: 9, Value: path}, - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go b/vendor/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go deleted file mode 100644 index 363e52fe2f2c..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go +++ /dev/null @@ -1,128 +0,0 @@ -package convert - -import ( - "fmt" - "go/build" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "regexp" -) - -/* - * RewritePackage takes a name (eg: my-package/tools), finds its test files using - * Go's build package, and then rewrites them. A ginkgo test suite file will - * also be added for this package, and all of its child packages. - */ -func RewritePackage(packageName string) { - pkg, err := packageWithName(packageName) - if err != nil { - panic(fmt.Sprintf("unexpected error reading package: '%s'\n%s\n", packageName, err.Error())) - } - - for _, filename := range findTestsInPackage(pkg) { - rewriteTestsInFile(filename) - } -} - -/* - * Given a package, findTestsInPackage reads the test files in the directory, - * and then recurses on each child package, returning a slice of all test files - * found in this process. - */ -func findTestsInPackage(pkg *build.Package) (testfiles []string) { - for _, file := range append(pkg.TestGoFiles, pkg.XTestGoFiles...) { - testfile, _ := filepath.Abs(filepath.Join(pkg.Dir, file)) - testfiles = append(testfiles, testfile) - } - - dirFiles, err := ioutil.ReadDir(pkg.Dir) - if err != nil { - panic(fmt.Sprintf("unexpected error reading dir: '%s'\n%s\n", pkg.Dir, err.Error())) - } - - re := regexp.MustCompile(`^[._]`) - - for _, file := range dirFiles { - if !file.IsDir() { - continue - } - - if re.Match([]byte(file.Name())) { - continue - } - - packageName := filepath.Join(pkg.ImportPath, file.Name()) - subPackage, err := packageWithName(packageName) - if err != nil { - panic(fmt.Sprintf("unexpected error reading package: '%s'\n%s\n", packageName, err.Error())) - } - - testfiles = append(testfiles, findTestsInPackage(subPackage)...) - } - - addGinkgoSuiteForPackage(pkg) - goFmtPackage(pkg) - return -} - -/* - * Shells out to `ginkgo bootstrap` to create a test suite file - */ -func addGinkgoSuiteForPackage(pkg *build.Package) { - originalDir, err := os.Getwd() - if err != nil { - panic(err) - } - - suite_test_file := filepath.Join(pkg.Dir, pkg.Name+"_suite_test.go") - - _, err = os.Stat(suite_test_file) - if err == nil { - return // test file already exists, this should be a no-op - } - - err = os.Chdir(pkg.Dir) - if err != nil { - panic(err) - } - - output, err := exec.Command("ginkgo", "bootstrap").Output() - - if err != nil { - panic(fmt.Sprintf("error running 'ginkgo bootstrap'.\nstdout: %s\n%s\n", output, err.Error())) - } - - err = os.Chdir(originalDir) - if err != nil { - panic(err) - } -} - -/* - * Shells out to `go fmt` to format the package - */ -func goFmtPackage(pkg *build.Package) { - path, _ := filepath.Abs(pkg.ImportPath) - output, err := exec.Command("go", "fmt", path).CombinedOutput() - - if err != nil { - fmt.Printf("Warning: Error running 'go fmt %s'.\nstdout: %s\n%s\n", path, output, err.Error()) - } -} - -/* - * Attempts to return a package with its test files already read. - * The ImportMode arg to build.Import lets you specify if you want go to read the - * buildable go files inside the package, but it fails if the package has no go files - */ -func packageWithName(name string) (pkg *build.Package, err error) { - pkg, err = build.Default.Import(name, ".", build.ImportMode(0)) - if err == nil { - return - } - - pkg, err = build.Default.Import(name, ".", build.ImportMode(1)) - return -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert/test_finder.go b/vendor/github.com/onsi/ginkgo/ginkgo/convert/test_finder.go deleted file mode 100644 index b33595c9ae16..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert/test_finder.go +++ /dev/null @@ -1,56 +0,0 @@ -package convert - -import ( - "go/ast" - "regexp" -) - -/* - * Given a root node, walks its top level statements and returns - * points to function nodes to rewrite as It statements. - * These functions, according to Go testing convention, must be named - * TestWithCamelCasedName and receive a single *testing.T argument. - */ -func findTestFuncs(rootNode *ast.File) (testsToRewrite []*ast.FuncDecl) { - testNameRegexp := regexp.MustCompile("^Test[0-9A-Z].+") - - ast.Inspect(rootNode, func(node ast.Node) bool { - if node == nil { - return false - } - - switch node := node.(type) { - case *ast.FuncDecl: - matches := testNameRegexp.MatchString(node.Name.Name) - - if matches && receivesTestingT(node) { - testsToRewrite = append(testsToRewrite, node) - } - } - - return true - }) - - return -} - -/* - * convenience function that looks at args to a function and determines if its - * params include an argument of type *testing.T - */ -func receivesTestingT(node *ast.FuncDecl) bool { - if len(node.Type.Params.List) != 1 { - return false - } - - base, ok := node.Type.Params.List[0].Type.(*ast.StarExpr) - if !ok { - return false - } - - intermediate := base.X.(*ast.SelectorExpr) - isTestingPackage := intermediate.X.(*ast.Ident).Name == "testing" - isTestingT := intermediate.Sel.Name == "T" - - return isTestingPackage && isTestingT -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go b/vendor/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go deleted file mode 100644 index 60c73504ad9f..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go +++ /dev/null @@ -1,162 +0,0 @@ -package convert - -import ( - "bytes" - "fmt" - "go/ast" - "go/format" - "go/parser" - "go/token" - "io/ioutil" - "os" -) - -/* - * Given a file path, rewrites any tests in the Ginkgo format. - * First, we parse the AST, and update the imports declaration. - * Then, we walk the first child elements in the file, returning tests to rewrite. - * A top level init func is declared, with a single Describe func inside. - * Then the test functions to rewrite are inserted as It statements inside the Describe. - * Finally we walk the rest of the file, replacing other usages of *testing.T - * Once that is complete, we write the AST back out again to its file. - */ -func rewriteTestsInFile(pathToFile string) { - fileSet := token.NewFileSet() - rootNode, err := parser.ParseFile(fileSet, pathToFile, nil, parser.ParseComments) - if err != nil { - panic(fmt.Sprintf("Error parsing test file '%s':\n%s\n", pathToFile, err.Error())) - } - - addGinkgoImports(rootNode) - removeTestingImport(rootNode) - - varUnderscoreBlock := createVarUnderscoreBlock() - describeBlock := createDescribeBlock() - varUnderscoreBlock.Values = []ast.Expr{describeBlock} - - for _, testFunc := range findTestFuncs(rootNode) { - rewriteTestFuncAsItStatement(testFunc, rootNode, describeBlock) - } - - underscoreDecl := &ast.GenDecl{ - Tok: 85, // gah, magick numbers are needed to make this work - TokPos: 14, // this tricks Go into writing "var _ = Describe" - Specs: []ast.Spec{varUnderscoreBlock}, - } - - imports := rootNode.Decls[0] - tail := rootNode.Decls[1:] - rootNode.Decls = append(append([]ast.Decl{imports}, underscoreDecl), tail...) - rewriteOtherFuncsToUseGinkgoT(rootNode.Decls) - walkNodesInRootNodeReplacingTestingT(rootNode) - - var buffer bytes.Buffer - if err = format.Node(&buffer, fileSet, rootNode); err != nil { - panic(fmt.Sprintf("Error formatting ast node after rewriting tests.\n%s\n", err.Error())) - } - - fileInfo, err := os.Stat(pathToFile) - - if err != nil { - panic(fmt.Sprintf("Error stat'ing file: %s\n", pathToFile)) - } - - err = ioutil.WriteFile(pathToFile, buffer.Bytes(), fileInfo.Mode()) -} - -/* - * Given a test func named TestDoesSomethingNeat, rewrites it as - * It("does something neat", func() { __test_body_here__ }) and adds it - * to the Describe's list of statements - */ -func rewriteTestFuncAsItStatement(testFunc *ast.FuncDecl, rootNode *ast.File, describe *ast.CallExpr) { - var funcIndex int = -1 - for index, child := range rootNode.Decls { - if child == testFunc { - funcIndex = index - break - } - } - - if funcIndex < 0 { - panic(fmt.Sprintf("Assert failed: Error finding index for test node %s\n", testFunc.Name.Name)) - } - - var block *ast.BlockStmt = blockStatementFromDescribe(describe) - block.List = append(block.List, createItStatementForTestFunc(testFunc)) - replaceTestingTsWithGinkgoT(block, namedTestingTArg(testFunc)) - - // remove the old test func from the root node's declarations - rootNode.Decls = append(rootNode.Decls[:funcIndex], rootNode.Decls[funcIndex+1:]...) -} - -/* - * walks nodes inside of a test func's statements and replaces the usage of - * it's named *testing.T param with GinkgoT's - */ -func replaceTestingTsWithGinkgoT(statementsBlock *ast.BlockStmt, testingT string) { - ast.Inspect(statementsBlock, func(node ast.Node) bool { - if node == nil { - return false - } - - keyValueExpr, ok := node.(*ast.KeyValueExpr) - if ok { - replaceNamedTestingTsInKeyValueExpression(keyValueExpr, testingT) - return true - } - - funcLiteral, ok := node.(*ast.FuncLit) - if ok { - replaceTypeDeclTestingTsInFuncLiteral(funcLiteral) - return true - } - - callExpr, ok := node.(*ast.CallExpr) - if !ok { - return true - } - replaceTestingTsInArgsLists(callExpr, testingT) - - funCall, ok := callExpr.Fun.(*ast.SelectorExpr) - if ok { - replaceTestingTsMethodCalls(funCall, testingT) - } - - return true - }) -} - -/* - * rewrite t.Fail() or any other *testing.T method by replacing with T().Fail() - * This function receives a selector expression (eg: t.Fail()) and - * the name of the *testing.T param from the function declaration. Rewrites the - * selector expression in place if the target was a *testing.T - */ -func replaceTestingTsMethodCalls(selectorExpr *ast.SelectorExpr, testingT string) { - ident, ok := selectorExpr.X.(*ast.Ident) - if !ok { - return - } - - if ident.Name == testingT { - selectorExpr.X = newGinkgoTFromIdent(ident) - } -} - -/* - * replaces usages of a named *testing.T param inside of a call expression - * with a new GinkgoT object - */ -func replaceTestingTsInArgsLists(callExpr *ast.CallExpr, testingT string) { - for index, arg := range callExpr.Args { - ident, ok := arg.(*ast.Ident) - if !ok { - continue - } - - if ident.Name == testingT { - callExpr.Args[index] = newGinkgoTFromIdent(ident) - } - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert/testing_t_rewriter.go b/vendor/github.com/onsi/ginkgo/ginkgo/convert/testing_t_rewriter.go deleted file mode 100644 index 418cdc4e5634..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert/testing_t_rewriter.go +++ /dev/null @@ -1,130 +0,0 @@ -package convert - -import ( - "go/ast" -) - -/* - * Rewrites any other top level funcs that receive a *testing.T param - */ -func rewriteOtherFuncsToUseGinkgoT(declarations []ast.Decl) { - for _, decl := range declarations { - decl, ok := decl.(*ast.FuncDecl) - if !ok { - continue - } - - for _, param := range decl.Type.Params.List { - starExpr, ok := param.Type.(*ast.StarExpr) - if !ok { - continue - } - - selectorExpr, ok := starExpr.X.(*ast.SelectorExpr) - if !ok { - continue - } - - xIdent, ok := selectorExpr.X.(*ast.Ident) - if !ok || xIdent.Name != "testing" { - continue - } - - if selectorExpr.Sel.Name != "T" { - continue - } - - param.Type = newGinkgoTInterface() - } - } -} - -/* - * Walks all of the nodes in the file, replacing *testing.T in struct - * and func literal nodes. eg: - * type foo struct { *testing.T } - * var bar = func(t *testing.T) { } - */ -func walkNodesInRootNodeReplacingTestingT(rootNode *ast.File) { - ast.Inspect(rootNode, func(node ast.Node) bool { - if node == nil { - return false - } - - switch node := node.(type) { - case *ast.StructType: - replaceTestingTsInStructType(node) - case *ast.FuncLit: - replaceTypeDeclTestingTsInFuncLiteral(node) - } - - return true - }) -} - -/* - * replaces named *testing.T inside a composite literal - */ -func replaceNamedTestingTsInKeyValueExpression(kve *ast.KeyValueExpr, testingT string) { - ident, ok := kve.Value.(*ast.Ident) - if !ok { - return - } - - if ident.Name == testingT { - kve.Value = newGinkgoTFromIdent(ident) - } -} - -/* - * replaces *testing.T params in a func literal with GinkgoT - */ -func replaceTypeDeclTestingTsInFuncLiteral(functionLiteral *ast.FuncLit) { - for _, arg := range functionLiteral.Type.Params.List { - starExpr, ok := arg.Type.(*ast.StarExpr) - if !ok { - continue - } - - selectorExpr, ok := starExpr.X.(*ast.SelectorExpr) - if !ok { - continue - } - - target, ok := selectorExpr.X.(*ast.Ident) - if !ok { - continue - } - - if target.Name == "testing" && selectorExpr.Sel.Name == "T" { - arg.Type = newGinkgoTInterface() - } - } -} - -/* - * Replaces *testing.T types inside of a struct declaration with a GinkgoT - * eg: type foo struct { *testing.T } - */ -func replaceTestingTsInStructType(structType *ast.StructType) { - for _, field := range structType.Fields.List { - starExpr, ok := field.Type.(*ast.StarExpr) - if !ok { - continue - } - - selectorExpr, ok := starExpr.X.(*ast.SelectorExpr) - if !ok { - continue - } - - xIdent, ok := selectorExpr.X.(*ast.Ident) - if !ok { - continue - } - - if xIdent.Name == "testing" && selectorExpr.Sel.Name == "T" { - field.Type = newGinkgoTInterface() - } - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/convert_command.go deleted file mode 100644 index 5944ed85ccd5..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert_command.go +++ /dev/null @@ -1,45 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "os" - - "github.com/onsi/ginkgo/ginkgo/convert" -) - -func BuildConvertCommand() *Command { - return &Command{ - Name: "convert", - FlagSet: flag.NewFlagSet("convert", flag.ExitOnError), - UsageCommand: "ginkgo convert /path/to/package", - Usage: []string{ - "Convert the package at the passed in path from an XUnit-style test to a Ginkgo-style test", - }, - Command: convertPackage, - } -} - -func convertPackage(args []string, additionalArgs []string) { - if len(args) != 1 { - println(fmt.Sprintf("usage: ginkgo convert /path/to/your/package")) - os.Exit(1) - } - - defer func() { - err := recover() - if err != nil { - switch err := err.(type) { - case error: - println(err.Error()) - case string: - println(err) - default: - println(fmt.Sprintf("unexpected error: %#v", err)) - } - os.Exit(1) - } - }() - - convert.RewritePackage(args[0]) -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/generate_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/generate_command.go deleted file mode 100644 index 4099f99a8b1a..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/generate_command.go +++ /dev/null @@ -1,254 +0,0 @@ -package main - -import ( - "bytes" - "flag" - "fmt" - "os" - "path/filepath" - "strconv" - "strings" - "text/template" -) - -func BuildGenerateCommand() *Command { - var agouti, noDot, internal bool - flagSet := flag.NewFlagSet("generate", flag.ExitOnError) - flagSet.BoolVar(&agouti, "agouti", false, "If set, generate will generate a test file for writing Agouti tests") - flagSet.BoolVar(&noDot, "nodot", false, "If set, generate will generate a test file that does not . import ginkgo and gomega") - flagSet.BoolVar(&internal, "internal", false, "If set, generate will generate a test file that uses the regular package name") - - return &Command{ - Name: "generate", - FlagSet: flagSet, - UsageCommand: "ginkgo generate ", - Usage: []string{ - "Generate a test file named filename_test.go", - "If the optional argument is omitted, a file named after the package in the current directory will be created.", - "Accepts the following flags:", - }, - Command: func(args []string, additionalArgs []string) { - generateSpec(args, agouti, noDot, internal) - }, - } -} - -var specText = `package {{.Package}} - -import ( - {{if .IncludeImports}}. "github.com/onsi/ginkgo"{{end}} - {{if .IncludeImports}}. "github.com/onsi/gomega"{{end}} - - {{if .ImportPackage}}"{{.PackageImportPath}}"{{end}} -) - -var _ = Describe("{{.Subject}}", func() { - -}) -` - -var agoutiSpecText = `package {{.Package}} - -import ( - {{if .IncludeImports}}. "github.com/onsi/ginkgo"{{end}} - {{if .IncludeImports}}. "github.com/onsi/gomega"{{end}} - "github.com/sclevine/agouti" - . "github.com/sclevine/agouti/matchers" - - {{if .ImportPackage}}"{{.PackageImportPath}}"{{end}} -) - -var _ = Describe("{{.Subject}}", func() { - var page *agouti.Page - - BeforeEach(func() { - var err error - page, err = agoutiDriver.NewPage() - Expect(err).NotTo(HaveOccurred()) - }) - - AfterEach(func() { - Expect(page.Destroy()).To(Succeed()) - }) -}) -` - -type specData struct { - Package string - Subject string - PackageImportPath string - IncludeImports bool - ImportPackage bool -} - -func generateSpec(args []string, agouti, noDot, internal bool) { - if len(args) == 0 { - err := generateSpecForSubject("", agouti, noDot, internal) - if err != nil { - fmt.Println(err.Error()) - fmt.Println("") - os.Exit(1) - } - fmt.Println("") - return - } - - var failed bool - for _, arg := range args { - err := generateSpecForSubject(arg, agouti, noDot, internal) - if err != nil { - failed = true - fmt.Println(err.Error()) - } - } - fmt.Println("") - if failed { - os.Exit(1) - } -} - -func generateSpecForSubject(subject string, agouti, noDot, internal bool) error { - packageName, specFilePrefix, formattedName := getPackageAndFormattedName() - if subject != "" { - specFilePrefix = formatSubject(subject) - formattedName = prettifyPackageName(specFilePrefix) - } - - data := specData{ - Package: determinePackageName(packageName, internal), - Subject: formattedName, - PackageImportPath: getPackageImportPath(), - IncludeImports: !noDot, - ImportPackage: !internal, - } - - targetFile := fmt.Sprintf("%s_test.go", specFilePrefix) - if fileExists(targetFile) { - return fmt.Errorf("%s already exists.", targetFile) - } else { - fmt.Printf("Generating ginkgo test for %s in:\n %s\n", data.Subject, targetFile) - } - - f, err := os.Create(targetFile) - if err != nil { - return err - } - defer f.Close() - - var templateText string - if agouti { - templateText = agoutiSpecText - } else { - templateText = specText - } - - specTemplate, err := template.New("spec").Parse(templateText) - if err != nil { - return err - } - - specTemplate.Execute(f, data) - goFmt(targetFile) - return nil -} - -func formatSubject(name string) string { - name = strings.Replace(name, "-", "_", -1) - name = strings.Replace(name, " ", "_", -1) - name = strings.Split(name, ".go")[0] - name = strings.Split(name, "_test")[0] - return name -} - -// moduleName returns module name from go.mod from given module root directory -func moduleName(modRoot string) string { - modFile, err := os.Open(filepath.Join(modRoot, "go.mod")) - if err != nil { - return "" - } - - mod := make([]byte, 128) - _, err = modFile.Read(mod) - if err != nil { - return "" - } - - slashSlash := []byte("//") - moduleStr := []byte("module") - - for len(mod) > 0 { - line := mod - mod = nil - if i := bytes.IndexByte(line, '\n'); i >= 0 { - line, mod = line[:i], line[i+1:] - } - if i := bytes.Index(line, slashSlash); i >= 0 { - line = line[:i] - } - line = bytes.TrimSpace(line) - if !bytes.HasPrefix(line, moduleStr) { - continue - } - line = line[len(moduleStr):] - n := len(line) - line = bytes.TrimSpace(line) - if len(line) == n || len(line) == 0 { - continue - } - - if line[0] == '"' || line[0] == '`' { - p, err := strconv.Unquote(string(line)) - if err != nil { - return "" // malformed quoted string or multiline module path - } - return p - } - - return string(line) - } - - return "" // missing module path -} - -func findModuleRoot(dir string) (root string) { - dir = filepath.Clean(dir) - - // Look for enclosing go.mod. - for { - if fi, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil && !fi.IsDir() { - return dir - } - d := filepath.Dir(dir) - if d == dir { - break - } - dir = d - } - return "" -} - -func getPackageImportPath() string { - workingDir, err := os.Getwd() - if err != nil { - panic(err.Error()) - } - - // Try go.mod file first - modRoot := findModuleRoot(workingDir) - if modRoot != "" { - modName := moduleName(modRoot) - if modName != "" { - cd := strings.Replace(workingDir, modRoot, "", -1) - return modName + cd - } - } - - // Fallback to GOPATH structure - sep := string(filepath.Separator) - paths := strings.Split(workingDir, sep+"src"+sep) - if len(paths) == 1 { - fmt.Printf("\nCouldn't identify package import path.\n\n\tginkgo generate\n\nMust be run within a package directory under $GOPATH/src/...\nYou're going to have to change UNKNOWN_PACKAGE_PATH in the generated file...\n\n") - return "UNKNOWN_PACKAGE_PATH" - } - return filepath.ToSlash(paths[len(paths)-1]) -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/help_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/help_command.go deleted file mode 100644 index 23b1d2f1178a..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/help_command.go +++ /dev/null @@ -1,31 +0,0 @@ -package main - -import ( - "flag" - "fmt" -) - -func BuildHelpCommand() *Command { - return &Command{ - Name: "help", - FlagSet: flag.NewFlagSet("help", flag.ExitOnError), - UsageCommand: "ginkgo help ", - Usage: []string{ - "Print usage information. If a command is passed in, print usage information just for that command.", - }, - Command: printHelp, - } -} - -func printHelp(args []string, additionalArgs []string) { - if len(args) == 0 { - usage() - } else { - command, found := commandMatching(args[0]) - if !found { - complainAndQuit(fmt.Sprintf("Unknown command: %s", args[0])) - } - - usageForCommand(command, true) - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go b/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go deleted file mode 100644 index ec456bf29223..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go +++ /dev/null @@ -1,52 +0,0 @@ -package interrupthandler - -import ( - "os" - "os/signal" - "sync" - "syscall" -) - -type InterruptHandler struct { - interruptCount int - lock *sync.Mutex - C chan bool -} - -func NewInterruptHandler() *InterruptHandler { - h := &InterruptHandler{ - lock: &sync.Mutex{}, - C: make(chan bool), - } - - go h.handleInterrupt() - SwallowSigQuit() - - return h -} - -func (h *InterruptHandler) WasInterrupted() bool { - h.lock.Lock() - defer h.lock.Unlock() - - return h.interruptCount > 0 -} - -func (h *InterruptHandler) handleInterrupt() { - c := make(chan os.Signal, 1) - signal.Notify(c, os.Interrupt, syscall.SIGTERM) - - <-c - signal.Stop(c) - - h.lock.Lock() - h.interruptCount++ - if h.interruptCount == 1 { - close(h.C) - } else if h.interruptCount > 5 { - os.Exit(1) - } - h.lock.Unlock() - - go h.handleInterrupt() -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_unix.go b/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_unix.go deleted file mode 100644 index 43c18544a8d5..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_unix.go +++ /dev/null @@ -1,14 +0,0 @@ -// +build freebsd openbsd netbsd dragonfly darwin linux solaris - -package interrupthandler - -import ( - "os" - "os/signal" - "syscall" -) - -func SwallowSigQuit() { - c := make(chan os.Signal, 1024) - signal.Notify(c, syscall.SIGQUIT) -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_windows.go b/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_windows.go deleted file mode 100644 index 7f4a50e1906b..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/sigquit_swallower_windows.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build windows - -package interrupthandler - -func SwallowSigQuit() { - //noop -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/main.go b/vendor/github.com/onsi/ginkgo/ginkgo/main.go deleted file mode 100644 index f60c48a72e0a..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/main.go +++ /dev/null @@ -1,302 +0,0 @@ -/* -The Ginkgo CLI - -The Ginkgo CLI is fully documented [here](http://onsi.github.io/ginkgo/#the_ginkgo_cli) - -You can also learn more by running: - - ginkgo help - -Here are some of the more commonly used commands: - -To install: - - go install github.com/onsi/ginkgo/ginkgo - -To run tests: - - ginkgo - -To run tests in all subdirectories: - - ginkgo -r - -To run tests in particular packages: - - ginkgo /path/to/package /path/to/another/package - -To pass arguments/flags to your tests: - - ginkgo -- - -To run tests in parallel - - ginkgo -p - -this will automatically detect the optimal number of nodes to use. Alternatively, you can specify the number of nodes with: - - ginkgo -nodes=N - -(note that you don't need to provide -p in this case). - -By default the Ginkgo CLI will spin up a server that the individual test processes send test output to. The CLI aggregates this output and then presents coherent test output, one test at a time, as each test completes. -An alternative is to have the parallel nodes run and stream interleaved output back. This useful for debugging, particularly in contexts where tests hang/fail to start. To get this interleaved output: - - ginkgo -nodes=N -stream=true - -On windows, the default value for stream is true. - -By default, when running multiple tests (with -r or a list of packages) Ginkgo will abort when a test fails. To have Ginkgo run subsequent test suites instead you can: - - ginkgo -keepGoing - -To fail if there are ginkgo tests in a directory but no test suite (missing `RunSpecs`) - - ginkgo -requireSuite - -To monitor packages and rerun tests when changes occur: - - ginkgo watch <-r> - -passing `ginkgo watch` the `-r` flag will recursively detect all test suites under the current directory and monitor them. -`watch` does not detect *new* packages. Moreover, changes in package X only rerun the tests for package X, tests for packages -that depend on X are not rerun. - -[OSX & Linux only] To receive (desktop) notifications when a test run completes: - - ginkgo -notify - -this is particularly useful with `ginkgo watch`. Notifications are currently only supported on OS X and require that you `brew install terminal-notifier` - -Sometimes (to suss out race conditions/flakey tests, for example) you want to keep running a test suite until it fails. You can do this with: - - ginkgo -untilItFails - -To bootstrap a test suite: - - ginkgo bootstrap - -To generate a test file: - - ginkgo generate - -To bootstrap/generate test files without using "." imports: - - ginkgo bootstrap --nodot - ginkgo generate --nodot - -this will explicitly export all the identifiers in Ginkgo and Gomega allowing you to rename them to avoid collisions. When you pull to the latest Ginkgo/Gomega you'll want to run - - ginkgo nodot - -to refresh this list and pull in any new identifiers. In particular, this will pull in any new Gomega matchers that get added. - -To convert an existing XUnit style test suite to a Ginkgo-style test suite: - - ginkgo convert . - -To unfocus tests: - - ginkgo unfocus - -or - - ginkgo blur - -To compile a test suite: - - ginkgo build - -will output an executable file named `package.test`. This can be run directly or by invoking - - ginkgo - -To print out Ginkgo's version: - - ginkgo version - -To get more help: - - ginkgo help -*/ -package main - -import ( - "flag" - "fmt" - "os" - "os/exec" - "strings" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/testsuite" -) - -const greenColor = "\x1b[32m" -const redColor = "\x1b[91m" -const defaultStyle = "\x1b[0m" -const lightGrayColor = "\x1b[37m" - -type Command struct { - Name string - AltName string - FlagSet *flag.FlagSet - Usage []string - UsageCommand string - Command func(args []string, additionalArgs []string) - SuppressFlagDocumentation bool - FlagDocSubstitute []string -} - -func (c *Command) Matches(name string) bool { - return c.Name == name || (c.AltName != "" && c.AltName == name) -} - -func (c *Command) Run(args []string, additionalArgs []string) { - c.FlagSet.Usage = usage - c.FlagSet.Parse(args) - c.Command(c.FlagSet.Args(), additionalArgs) -} - -var DefaultCommand *Command -var Commands []*Command - -func init() { - DefaultCommand = BuildRunCommand() - Commands = append(Commands, BuildWatchCommand()) - Commands = append(Commands, BuildBuildCommand()) - Commands = append(Commands, BuildBootstrapCommand()) - Commands = append(Commands, BuildGenerateCommand()) - Commands = append(Commands, BuildNodotCommand()) - Commands = append(Commands, BuildConvertCommand()) - Commands = append(Commands, BuildUnfocusCommand()) - Commands = append(Commands, BuildVersionCommand()) - Commands = append(Commands, BuildHelpCommand()) -} - -func main() { - args := []string{} - additionalArgs := []string{} - - foundDelimiter := false - - for _, arg := range os.Args[1:] { - if !foundDelimiter { - if arg == "--" { - foundDelimiter = true - continue - } - } - - if foundDelimiter { - additionalArgs = append(additionalArgs, arg) - } else { - args = append(args, arg) - } - } - - if len(args) > 0 { - commandToRun, found := commandMatching(args[0]) - if found { - commandToRun.Run(args[1:], additionalArgs) - return - } - } - - DefaultCommand.Run(args, additionalArgs) -} - -func commandMatching(name string) (*Command, bool) { - for _, command := range Commands { - if command.Matches(name) { - return command, true - } - } - return nil, false -} - -func usage() { - fmt.Printf("Ginkgo Version %s\n\n", config.VERSION) - usageForCommand(DefaultCommand, false) - for _, command := range Commands { - fmt.Printf("\n") - usageForCommand(command, false) - } -} - -func usageForCommand(command *Command, longForm bool) { - fmt.Printf("%s\n%s\n", command.UsageCommand, strings.Repeat("-", len(command.UsageCommand))) - fmt.Printf("%s\n", strings.Join(command.Usage, "\n")) - if command.SuppressFlagDocumentation && !longForm { - fmt.Printf("%s\n", strings.Join(command.FlagDocSubstitute, "\n ")) - } else { - command.FlagSet.SetOutput(os.Stdout) - command.FlagSet.PrintDefaults() - } -} - -func complainAndQuit(complaint string) { - fmt.Fprintf(os.Stderr, "%s\nFor usage instructions:\n\tginkgo help\n", complaint) - os.Exit(1) -} - -func findSuites(args []string, recurseForAll bool, skipPackage string, allowPrecompiled bool) ([]testsuite.TestSuite, []string) { - suites := []testsuite.TestSuite{} - - if len(args) > 0 { - for _, arg := range args { - if allowPrecompiled { - suite, err := testsuite.PrecompiledTestSuite(arg) - if err == nil { - suites = append(suites, suite) - continue - } - } - recurseForSuite := recurseForAll - if strings.HasSuffix(arg, "/...") && arg != "/..." { - arg = arg[:len(arg)-4] - recurseForSuite = true - } - suites = append(suites, testsuite.SuitesInDir(arg, recurseForSuite)...) - } - } else { - suites = testsuite.SuitesInDir(".", recurseForAll) - } - - skippedPackages := []string{} - if skipPackage != "" { - skipFilters := strings.Split(skipPackage, ",") - filteredSuites := []testsuite.TestSuite{} - for _, suite := range suites { - skip := false - for _, skipFilter := range skipFilters { - if strings.Contains(suite.Path, skipFilter) { - skip = true - break - } - } - if skip { - skippedPackages = append(skippedPackages, suite.Path) - } else { - filteredSuites = append(filteredSuites, suite) - } - } - suites = filteredSuites - } - - return suites, skippedPackages -} - -func goFmt(path string) { - out, err := exec.Command("go", "fmt", path).CombinedOutput() - if err != nil { - complainAndQuit("Could not fmt: " + err.Error() + "\n" + string(out)) - } -} - -func pluralizedWord(singular, plural string, count int) string { - if count == 1 { - return singular - } - return plural -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go b/vendor/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go deleted file mode 100644 index c87b721652f3..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go +++ /dev/null @@ -1,196 +0,0 @@ -package nodot - -import ( - "fmt" - "go/ast" - "go/build" - "go/parser" - "go/token" - "path/filepath" - "strings" -) - -func ApplyNoDot(data []byte) ([]byte, error) { - sections, err := generateNodotSections() - if err != nil { - return nil, err - } - - for _, section := range sections { - data = section.createOrUpdateIn(data) - } - - return data, nil -} - -type nodotSection struct { - name string - pkg string - declarations []string - types []string -} - -func (s nodotSection) createOrUpdateIn(data []byte) []byte { - renames := map[string]string{} - - contents := string(data) - - lines := strings.Split(contents, "\n") - - comment := "// Declarations for " + s.name - - newLines := []string{} - for _, line := range lines { - if line == comment { - continue - } - - words := strings.Split(line, " ") - lastWord := words[len(words)-1] - - if s.containsDeclarationOrType(lastWord) { - renames[lastWord] = words[1] - continue - } - - newLines = append(newLines, line) - } - - if len(newLines[len(newLines)-1]) > 0 { - newLines = append(newLines, "") - } - - newLines = append(newLines, comment) - - for _, typ := range s.types { - name, ok := renames[s.prefix(typ)] - if !ok { - name = typ - } - newLines = append(newLines, fmt.Sprintf("type %s %s", name, s.prefix(typ))) - } - - for _, decl := range s.declarations { - name, ok := renames[s.prefix(decl)] - if !ok { - name = decl - } - newLines = append(newLines, fmt.Sprintf("var %s = %s", name, s.prefix(decl))) - } - - newLines = append(newLines, "") - - newContents := strings.Join(newLines, "\n") - - return []byte(newContents) -} - -func (s nodotSection) prefix(declOrType string) string { - return s.pkg + "." + declOrType -} - -func (s nodotSection) containsDeclarationOrType(word string) bool { - for _, declaration := range s.declarations { - if s.prefix(declaration) == word { - return true - } - } - - for _, typ := range s.types { - if s.prefix(typ) == word { - return true - } - } - - return false -} - -func generateNodotSections() ([]nodotSection, error) { - sections := []nodotSection{} - - declarations, err := getExportedDeclerationsForPackage("github.com/onsi/ginkgo", "ginkgo_dsl.go", "GINKGO_VERSION", "GINKGO_PANIC") - if err != nil { - return nil, err - } - sections = append(sections, nodotSection{ - name: "Ginkgo DSL", - pkg: "ginkgo", - declarations: declarations, - types: []string{"Done", "Benchmarker"}, - }) - - declarations, err = getExportedDeclerationsForPackage("github.com/onsi/gomega", "gomega_dsl.go", "GOMEGA_VERSION") - if err != nil { - return nil, err - } - sections = append(sections, nodotSection{ - name: "Gomega DSL", - pkg: "gomega", - declarations: declarations, - }) - - declarations, err = getExportedDeclerationsForPackage("github.com/onsi/gomega", "matchers.go") - if err != nil { - return nil, err - } - sections = append(sections, nodotSection{ - name: "Gomega Matchers", - pkg: "gomega", - declarations: declarations, - }) - - return sections, nil -} - -func getExportedDeclerationsForPackage(pkgPath string, filename string, blacklist ...string) ([]string, error) { - pkg, err := build.Import(pkgPath, ".", 0) - if err != nil { - return []string{}, err - } - - declarations, err := getExportedDeclarationsForFile(filepath.Join(pkg.Dir, filename)) - if err != nil { - return []string{}, err - } - - blacklistLookup := map[string]bool{} - for _, declaration := range blacklist { - blacklistLookup[declaration] = true - } - - filteredDeclarations := []string{} - for _, declaration := range declarations { - if blacklistLookup[declaration] { - continue - } - filteredDeclarations = append(filteredDeclarations, declaration) - } - - return filteredDeclarations, nil -} - -func getExportedDeclarationsForFile(path string) ([]string, error) { - fset := token.NewFileSet() - tree, err := parser.ParseFile(fset, path, nil, 0) - if err != nil { - return []string{}, err - } - - declarations := []string{} - ast.FileExports(tree) - for _, decl := range tree.Decls { - switch x := decl.(type) { - case *ast.GenDecl: - switch s := x.Specs[0].(type) { - case *ast.ValueSpec: - declarations = append(declarations, s.Names[0].Name) - } - case *ast.FuncDecl: - if x.Recv == nil { - declarations = append(declarations, x.Name.Name) - } - } - } - - return declarations, nil -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/nodot_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/nodot_command.go deleted file mode 100644 index 39b88b5d1bf8..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/nodot_command.go +++ /dev/null @@ -1,77 +0,0 @@ -package main - -import ( - "bufio" - "flag" - "io/ioutil" - "os" - "path/filepath" - "regexp" - - "github.com/onsi/ginkgo/ginkgo/nodot" -) - -func BuildNodotCommand() *Command { - return &Command{ - Name: "nodot", - FlagSet: flag.NewFlagSet("bootstrap", flag.ExitOnError), - UsageCommand: "ginkgo nodot", - Usage: []string{ - "Update the nodot declarations in your test suite", - "Any missing declarations (from, say, a recently added matcher) will be added to your bootstrap file.", - "If you've renamed a declaration, that name will be honored and not overwritten.", - }, - Command: updateNodot, - } -} - -func updateNodot(args []string, additionalArgs []string) { - suiteFile, perm := findSuiteFile() - - data, err := ioutil.ReadFile(suiteFile) - if err != nil { - complainAndQuit("Failed to update nodot declarations: " + err.Error()) - } - - content, err := nodot.ApplyNoDot(data) - if err != nil { - complainAndQuit("Failed to update nodot declarations: " + err.Error()) - } - ioutil.WriteFile(suiteFile, content, perm) - - goFmt(suiteFile) -} - -func findSuiteFile() (string, os.FileMode) { - workingDir, err := os.Getwd() - if err != nil { - complainAndQuit("Could not find suite file for nodot: " + err.Error()) - } - - files, err := ioutil.ReadDir(workingDir) - if err != nil { - complainAndQuit("Could not find suite file for nodot: " + err.Error()) - } - - re := regexp.MustCompile(`RunSpecs\(|RunSpecsWithDefaultAndCustomReporters\(|RunSpecsWithCustomReporters\(`) - - for _, file := range files { - if file.IsDir() { - continue - } - path := filepath.Join(workingDir, file.Name()) - f, err := os.Open(path) - if err != nil { - complainAndQuit("Could not find suite file for nodot: " + err.Error()) - } - defer f.Close() - - if re.MatchReader(bufio.NewReader(f)) { - return path, file.Mode() - } - } - - complainAndQuit("Could not find a suite file for nodot: you need a bootstrap file that call's Ginkgo's RunSpecs() command.\nTry running ginkgo bootstrap first.") - - return "", 0 -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/notifications.go b/vendor/github.com/onsi/ginkgo/ginkgo/notifications.go deleted file mode 100644 index 368d61fb31c7..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/notifications.go +++ /dev/null @@ -1,141 +0,0 @@ -package main - -import ( - "fmt" - "os" - "os/exec" - "regexp" - "runtime" - "strings" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/testsuite" -) - -type Notifier struct { - commandFlags *RunWatchAndBuildCommandFlags -} - -func NewNotifier(commandFlags *RunWatchAndBuildCommandFlags) *Notifier { - return &Notifier{ - commandFlags: commandFlags, - } -} - -func (n *Notifier) VerifyNotificationsAreAvailable() { - if n.commandFlags.Notify { - onLinux := (runtime.GOOS == "linux") - onOSX := (runtime.GOOS == "darwin") - if onOSX { - - _, err := exec.LookPath("terminal-notifier") - if err != nil { - fmt.Printf(`--notify requires terminal-notifier, which you don't seem to have installed. - -OSX: - -To remedy this: - - brew install terminal-notifier - -To learn more about terminal-notifier: - - https://github.com/alloy/terminal-notifier -`) - os.Exit(1) - } - - } else if onLinux { - - _, err := exec.LookPath("notify-send") - if err != nil { - fmt.Printf(`--notify requires terminal-notifier or notify-send, which you don't seem to have installed. - -Linux: - -Download and install notify-send for your distribution -`) - os.Exit(1) - } - - } - } -} - -func (n *Notifier) SendSuiteCompletionNotification(suite testsuite.TestSuite, suitePassed bool) { - if suitePassed { - n.SendNotification("Ginkgo [PASS]", fmt.Sprintf(`Test suite for "%s" passed.`, suite.PackageName)) - } else { - n.SendNotification("Ginkgo [FAIL]", fmt.Sprintf(`Test suite for "%s" failed.`, suite.PackageName)) - } -} - -func (n *Notifier) SendNotification(title string, subtitle string) { - - if n.commandFlags.Notify { - onLinux := (runtime.GOOS == "linux") - onOSX := (runtime.GOOS == "darwin") - - if onOSX { - - _, err := exec.LookPath("terminal-notifier") - if err == nil { - args := []string{"-title", title, "-subtitle", subtitle, "-group", "com.onsi.ginkgo"} - terminal := os.Getenv("TERM_PROGRAM") - if terminal == "iTerm.app" { - args = append(args, "-activate", "com.googlecode.iterm2") - } else if terminal == "Apple_Terminal" { - args = append(args, "-activate", "com.apple.Terminal") - } - - exec.Command("terminal-notifier", args...).Run() - } - - } else if onLinux { - - _, err := exec.LookPath("notify-send") - if err == nil { - args := []string{"-a", "ginkgo", title, subtitle} - exec.Command("notify-send", args...).Run() - } - - } - } -} - -func (n *Notifier) RunCommand(suite testsuite.TestSuite, suitePassed bool) { - - command := n.commandFlags.AfterSuiteHook - if command != "" { - - // Allow for string replacement to pass input to the command - passed := "[FAIL]" - if suitePassed { - passed = "[PASS]" - } - command = strings.Replace(command, "(ginkgo-suite-passed)", passed, -1) - command = strings.Replace(command, "(ginkgo-suite-name)", suite.PackageName, -1) - - // Must break command into parts - splitArgs := regexp.MustCompile(`'.+'|".+"|\S+`) - parts := splitArgs.FindAllString(command, -1) - - output, err := exec.Command(parts[0], parts[1:]...).CombinedOutput() - if err != nil { - fmt.Println("Post-suite command failed:") - if config.DefaultReporterConfig.NoColor { - fmt.Printf("\t%s\n", output) - } else { - fmt.Printf("\t%s%s%s\n", redColor, string(output), defaultStyle) - } - n.SendNotification("Ginkgo [ERROR]", fmt.Sprintf(`After suite command "%s" failed`, n.commandFlags.AfterSuiteHook)) - } else { - fmt.Println("Post-suite command succeeded:") - if config.DefaultReporterConfig.NoColor { - fmt.Printf("\t%s\n", output) - } else { - fmt.Printf("\t%s%s%s\n", greenColor, string(output), defaultStyle) - } - } - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/run_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/run_command.go deleted file mode 100644 index f225d272f291..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/run_command.go +++ /dev/null @@ -1,291 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "math/rand" - "os" - "regexp" - "strings" - "time" - - "io/ioutil" - "path/filepath" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/interrupthandler" - "github.com/onsi/ginkgo/ginkgo/testrunner" - "github.com/onsi/ginkgo/types" -) - -func BuildRunCommand() *Command { - commandFlags := NewRunCommandFlags(flag.NewFlagSet("ginkgo", flag.ExitOnError)) - notifier := NewNotifier(commandFlags) - interruptHandler := interrupthandler.NewInterruptHandler() - runner := &SpecRunner{ - commandFlags: commandFlags, - notifier: notifier, - interruptHandler: interruptHandler, - suiteRunner: NewSuiteRunner(notifier, interruptHandler), - } - - return &Command{ - Name: "", - FlagSet: commandFlags.FlagSet, - UsageCommand: "ginkgo -- ", - Usage: []string{ - "Run the tests in the passed in (or the package in the current directory if left blank).", - "Any arguments after -- will be passed to the test.", - "Accepts the following flags:", - }, - Command: runner.RunSpecs, - } -} - -type SpecRunner struct { - commandFlags *RunWatchAndBuildCommandFlags - notifier *Notifier - interruptHandler *interrupthandler.InterruptHandler - suiteRunner *SuiteRunner -} - -func (r *SpecRunner) RunSpecs(args []string, additionalArgs []string) { - r.commandFlags.computeNodes() - r.notifier.VerifyNotificationsAreAvailable() - - suites, skippedPackages := findSuites(args, r.commandFlags.Recurse, r.commandFlags.SkipPackage, true) - if len(skippedPackages) > 0 { - fmt.Println("Will skip:") - for _, skippedPackage := range skippedPackages { - fmt.Println(" " + skippedPackage) - } - } - - if len(skippedPackages) > 0 && len(suites) == 0 { - fmt.Println("All tests skipped! Exiting...") - os.Exit(0) - } - - if len(suites) == 0 { - complainAndQuit("Found no test suites") - } - - r.ComputeSuccinctMode(len(suites)) - - t := time.Now() - - runners := []*testrunner.TestRunner{} - for _, suite := range suites { - runners = append(runners, testrunner.New(suite, r.commandFlags.NumCPU, r.commandFlags.ParallelStream, r.commandFlags.Timeout, r.commandFlags.GoOpts, additionalArgs)) - } - - numSuites := 0 - runResult := testrunner.PassingRunResult() - if r.commandFlags.UntilItFails { - iteration := 0 - for { - r.UpdateSeed() - randomizedRunners := r.randomizeOrder(runners) - runResult, numSuites = r.suiteRunner.RunSuites(randomizedRunners, r.commandFlags.NumCompilers, r.commandFlags.KeepGoing, nil) - iteration++ - - if r.interruptHandler.WasInterrupted() { - break - } - - if runResult.Passed { - fmt.Printf("\nAll tests passed...\nWill keep running them until they fail.\nThis was attempt #%d\n%s\n", iteration, orcMessage(iteration)) - } else { - fmt.Printf("\nTests failed on attempt #%d\n\n", iteration) - break - } - } - } else { - randomizedRunners := r.randomizeOrder(runners) - runResult, numSuites = r.suiteRunner.RunSuites(randomizedRunners, r.commandFlags.NumCompilers, r.commandFlags.KeepGoing, nil) - } - - for _, runner := range runners { - runner.CleanUp() - } - - if r.isInCoverageMode() { - if r.getOutputDir() != "" { - // If coverprofile is set, combine coverages - if r.getCoverprofile() != "" { - if err := r.combineCoverprofiles(runners); err != nil { - fmt.Println(err.Error()) - os.Exit(1) - } - } else { - // Just move them - r.moveCoverprofiles(runners) - } - } - } - - fmt.Printf("\nGinkgo ran %d %s in %s\n", numSuites, pluralizedWord("suite", "suites", numSuites), time.Since(t)) - - if runResult.Passed { - if runResult.HasProgrammaticFocus && strings.TrimSpace(os.Getenv("GINKGO_EDITOR_INTEGRATION")) == "" { - fmt.Printf("Test Suite Passed\n") - fmt.Printf("Detected Programmatic Focus - setting exit status to %d\n", types.GINKGO_FOCUS_EXIT_CODE) - os.Exit(types.GINKGO_FOCUS_EXIT_CODE) - } else { - fmt.Printf("Test Suite Passed\n") - os.Exit(0) - } - } else { - fmt.Printf("Test Suite Failed\n") - os.Exit(1) - } -} - -// Moves all generated profiles to specified directory -func (r *SpecRunner) moveCoverprofiles(runners []*testrunner.TestRunner) { - for _, runner := range runners { - _, filename := filepath.Split(runner.CoverageFile) - err := os.Rename(runner.CoverageFile, filepath.Join(r.getOutputDir(), filename)) - - if err != nil { - fmt.Printf("Unable to move coverprofile %s, %v\n", runner.CoverageFile, err) - return - } - } -} - -// Combines all generated profiles in the specified directory -func (r *SpecRunner) combineCoverprofiles(runners []*testrunner.TestRunner) error { - - path, _ := filepath.Abs(r.getOutputDir()) - if !fileExists(path) { - return fmt.Errorf("Unable to create combined profile, outputdir does not exist: %s", r.getOutputDir()) - } - - fmt.Println("path is " + path) - - combined, err := os.OpenFile( - filepath.Join(path, r.getCoverprofile()), - os.O_WRONLY|os.O_CREATE, - 0666, - ) - - if err != nil { - fmt.Printf("Unable to create combined profile, %v\n", err) - return nil // non-fatal error - } - - modeRegex := regexp.MustCompile(`^mode: .*\n`) - for index, runner := range runners { - contents, err := ioutil.ReadFile(runner.CoverageFile) - - if err != nil { - fmt.Printf("Unable to read coverage file %s to combine, %v\n", runner.CoverageFile, err) - return nil // non-fatal error - } - - // remove the cover mode line from every file - // except the first one - if index > 0 { - contents = modeRegex.ReplaceAll(contents, []byte{}) - } - - _, err = combined.Write(contents) - - // Add a newline to the end of every file if missing. - if err == nil && len(contents) > 0 && contents[len(contents)-1] != '\n' { - _, err = combined.Write([]byte("\n")) - } - - if err != nil { - fmt.Printf("Unable to append to coverprofile, %v\n", err) - return nil // non-fatal error - } - } - - fmt.Println("All profiles combined") - return nil -} - -func (r *SpecRunner) isInCoverageMode() bool { - opts := r.commandFlags.GoOpts - return *opts["cover"].(*bool) || *opts["coverpkg"].(*string) != "" || *opts["covermode"].(*string) != "" -} - -func (r *SpecRunner) getCoverprofile() string { - return *r.commandFlags.GoOpts["coverprofile"].(*string) -} - -func (r *SpecRunner) getOutputDir() string { - return *r.commandFlags.GoOpts["outputdir"].(*string) -} - -func (r *SpecRunner) ComputeSuccinctMode(numSuites int) { - if config.DefaultReporterConfig.Verbose { - config.DefaultReporterConfig.Succinct = false - return - } - - if numSuites == 1 { - return - } - - if numSuites > 1 && !r.commandFlags.wasSet("succinct") { - config.DefaultReporterConfig.Succinct = true - } -} - -func (r *SpecRunner) UpdateSeed() { - if !r.commandFlags.wasSet("seed") { - config.GinkgoConfig.RandomSeed = time.Now().Unix() - } -} - -func (r *SpecRunner) randomizeOrder(runners []*testrunner.TestRunner) []*testrunner.TestRunner { - if !r.commandFlags.RandomizeSuites { - return runners - } - - if len(runners) <= 1 { - return runners - } - - randomizedRunners := make([]*testrunner.TestRunner, len(runners)) - randomizer := rand.New(rand.NewSource(config.GinkgoConfig.RandomSeed)) - permutation := randomizer.Perm(len(runners)) - for i, j := range permutation { - randomizedRunners[i] = runners[j] - } - return randomizedRunners -} - -func orcMessage(iteration int) string { - if iteration < 10 { - return "" - } else if iteration < 30 { - return []string{ - "If at first you succeed...", - "...try, try again.", - "Looking good!", - "Still good...", - "I think your tests are fine....", - "Yep, still passing", - "Oh boy, here I go testin' again!", - "Even the gophers are getting bored", - "Did you try -race?", - "Maybe you should stop now?", - "I'm getting tired...", - "What if I just made you a sandwich?", - "Hit ^C, hit ^C, please hit ^C", - "Make it stop. Please!", - "Come on! Enough is enough!", - "Dave, this conversation can serve no purpose anymore. Goodbye.", - "Just what do you think you're doing, Dave? ", - "I, Sisyphus", - "Insanity: doing the same thing over and over again and expecting different results. -Einstein", - "I guess Einstein never tried to churn butter", - }[iteration-10] + "\n" - } else { - return "No, seriously... you can probably stop now.\n" - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/run_watch_and_build_command_flags.go b/vendor/github.com/onsi/ginkgo/ginkgo/run_watch_and_build_command_flags.go deleted file mode 100644 index e0994fc3cb09..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/run_watch_and_build_command_flags.go +++ /dev/null @@ -1,169 +0,0 @@ -package main - -import ( - "flag" - "runtime" - - "time" - - "github.com/onsi/ginkgo/config" -) - -type RunWatchAndBuildCommandFlags struct { - Recurse bool - SkipPackage string - GoOpts map[string]interface{} - - //for run and watch commands - NumCPU int - NumCompilers int - ParallelStream bool - Notify bool - AfterSuiteHook string - AutoNodes bool - Timeout time.Duration - - //only for run command - KeepGoing bool - UntilItFails bool - RandomizeSuites bool - - //only for watch command - Depth int - WatchRegExp string - - FlagSet *flag.FlagSet -} - -const runMode = 1 -const watchMode = 2 -const buildMode = 3 - -func NewRunCommandFlags(flagSet *flag.FlagSet) *RunWatchAndBuildCommandFlags { - c := &RunWatchAndBuildCommandFlags{ - FlagSet: flagSet, - } - c.flags(runMode) - return c -} - -func NewWatchCommandFlags(flagSet *flag.FlagSet) *RunWatchAndBuildCommandFlags { - c := &RunWatchAndBuildCommandFlags{ - FlagSet: flagSet, - } - c.flags(watchMode) - return c -} - -func NewBuildCommandFlags(flagSet *flag.FlagSet) *RunWatchAndBuildCommandFlags { - c := &RunWatchAndBuildCommandFlags{ - FlagSet: flagSet, - } - c.flags(buildMode) - return c -} - -func (c *RunWatchAndBuildCommandFlags) wasSet(flagName string) bool { - wasSet := false - c.FlagSet.Visit(func(f *flag.Flag) { - if f.Name == flagName { - wasSet = true - } - }) - - return wasSet -} - -func (c *RunWatchAndBuildCommandFlags) computeNodes() { - if c.wasSet("nodes") { - return - } - if c.AutoNodes { - switch n := runtime.NumCPU(); { - case n <= 4: - c.NumCPU = n - default: - c.NumCPU = n - 1 - } - } -} - -func (c *RunWatchAndBuildCommandFlags) stringSlot(slot string) *string { - var opt string - c.GoOpts[slot] = &opt - return &opt -} - -func (c *RunWatchAndBuildCommandFlags) boolSlot(slot string) *bool { - var opt bool - c.GoOpts[slot] = &opt - return &opt -} - -func (c *RunWatchAndBuildCommandFlags) intSlot(slot string) *int { - var opt int - c.GoOpts[slot] = &opt - return &opt -} - -func (c *RunWatchAndBuildCommandFlags) flags(mode int) { - c.GoOpts = make(map[string]interface{}) - - onWindows := (runtime.GOOS == "windows") - - c.FlagSet.BoolVar(&(c.Recurse), "r", false, "Find and run test suites under the current directory recursively.") - c.FlagSet.BoolVar(c.boolSlot("race"), "race", false, "Run tests with race detection enabled.") - c.FlagSet.BoolVar(c.boolSlot("cover"), "cover", false, "Run tests with coverage analysis, will generate coverage profiles with the package name in the current directory.") - c.FlagSet.StringVar(c.stringSlot("coverpkg"), "coverpkg", "", "Run tests with coverage on the given external modules.") - c.FlagSet.StringVar(&(c.SkipPackage), "skipPackage", "", "A comma-separated list of package names to be skipped. If any part of the package's path matches, that package is ignored.") - c.FlagSet.StringVar(c.stringSlot("tags"), "tags", "", "A list of build tags to consider satisfied during the build.") - c.FlagSet.StringVar(c.stringSlot("gcflags"), "gcflags", "", "Arguments to pass on each go tool compile invocation.") - c.FlagSet.StringVar(c.stringSlot("covermode"), "covermode", "", "Set the mode for coverage analysis.") - c.FlagSet.BoolVar(c.boolSlot("a"), "a", false, "Force rebuilding of packages that are already up-to-date.") - c.FlagSet.BoolVar(c.boolSlot("n"), "n", false, "Have `go test` print the commands but do not run them.") - c.FlagSet.BoolVar(c.boolSlot("msan"), "msan", false, "Enable interoperation with memory sanitizer.") - c.FlagSet.BoolVar(c.boolSlot("x"), "x", false, "Have `go test` print the commands.") - c.FlagSet.BoolVar(c.boolSlot("work"), "work", false, "Print the name of the temporary work directory and do not delete it when exiting.") - c.FlagSet.StringVar(c.stringSlot("asmflags"), "asmflags", "", "Arguments to pass on each go tool asm invocation.") - c.FlagSet.StringVar(c.stringSlot("buildmode"), "buildmode", "", "Build mode to use. See 'go help buildmode' for more.") - c.FlagSet.StringVar(c.stringSlot("mod"), "mod", "", "Go module control. See 'go help modules' for more.") - c.FlagSet.StringVar(c.stringSlot("compiler"), "compiler", "", "Name of compiler to use, as in runtime.Compiler (gccgo or gc).") - c.FlagSet.StringVar(c.stringSlot("gccgoflags"), "gccgoflags", "", "Arguments to pass on each gccgo compiler/linker invocation.") - c.FlagSet.StringVar(c.stringSlot("installsuffix"), "installsuffix", "", "A suffix to use in the name of the package installation directory.") - c.FlagSet.StringVar(c.stringSlot("ldflags"), "ldflags", "", "Arguments to pass on each go tool link invocation.") - c.FlagSet.BoolVar(c.boolSlot("linkshared"), "linkshared", false, "Link against shared libraries previously created with -buildmode=shared.") - c.FlagSet.StringVar(c.stringSlot("pkgdir"), "pkgdir", "", "install and load all packages from the given dir instead of the usual locations.") - c.FlagSet.StringVar(c.stringSlot("toolexec"), "toolexec", "", "a program to use to invoke toolchain programs like vet and asm.") - c.FlagSet.IntVar(c.intSlot("blockprofilerate"), "blockprofilerate", 1, "Control the detail provided in goroutine blocking profiles by calling runtime.SetBlockProfileRate with the given value.") - c.FlagSet.StringVar(c.stringSlot("coverprofile"), "coverprofile", "", "Write a coverage profile to the specified file after all tests have passed.") - c.FlagSet.StringVar(c.stringSlot("cpuprofile"), "cpuprofile", "", "Write a CPU profile to the specified file before exiting.") - c.FlagSet.StringVar(c.stringSlot("memprofile"), "memprofile", "", "Write a memory profile to the specified file after all tests have passed.") - c.FlagSet.IntVar(c.intSlot("memprofilerate"), "memprofilerate", 0, "Enable more precise (and expensive) memory profiles by setting runtime.MemProfileRate.") - c.FlagSet.StringVar(c.stringSlot("outputdir"), "outputdir", "", "Place output files from profiling in the specified directory.") - c.FlagSet.BoolVar(c.boolSlot("requireSuite"), "requireSuite", false, "Fail if there are ginkgo tests in a directory but no test suite (missing RunSpecs)") - c.FlagSet.StringVar(c.stringSlot("vet"), "vet", "", "Configure the invocation of 'go vet' to use the comma-separated list of vet checks. If list is 'off', 'go test' does not run 'go vet' at all.") - - if mode == runMode || mode == watchMode { - config.Flags(c.FlagSet, "", false) - c.FlagSet.IntVar(&(c.NumCPU), "nodes", 1, "The number of parallel test nodes to run") - c.FlagSet.IntVar(&(c.NumCompilers), "compilers", 0, "The number of concurrent compilations to run (0 will autodetect)") - c.FlagSet.BoolVar(&(c.AutoNodes), "p", false, "Run in parallel with auto-detected number of nodes") - c.FlagSet.BoolVar(&(c.ParallelStream), "stream", onWindows, "stream parallel test output in real time: less coherent, but useful for debugging") - if !onWindows { - c.FlagSet.BoolVar(&(c.Notify), "notify", false, "Send desktop notifications when a test run completes") - } - c.FlagSet.StringVar(&(c.AfterSuiteHook), "afterSuiteHook", "", "Run a command when a suite test run completes") - c.FlagSet.DurationVar(&(c.Timeout), "timeout", 24*time.Hour, "Suite fails if it does not complete within the specified timeout") - } - - if mode == runMode { - c.FlagSet.BoolVar(&(c.KeepGoing), "keepGoing", false, "When true, failures from earlier test suites do not prevent later test suites from running") - c.FlagSet.BoolVar(&(c.UntilItFails), "untilItFails", false, "When true, Ginkgo will keep rerunning tests until a failure occurs") - c.FlagSet.BoolVar(&(c.RandomizeSuites), "randomizeSuites", false, "When true, Ginkgo will randomize the order in which test suites run") - } - - if mode == watchMode { - c.FlagSet.IntVar(&(c.Depth), "depth", 1, "Ginkgo will watch dependencies down to this depth in the dependency tree") - c.FlagSet.StringVar(&(c.WatchRegExp), "watchRegExp", `\.go$`, "Files matching this regular expression will be watched for changes") - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/suite_runner.go b/vendor/github.com/onsi/ginkgo/ginkgo/suite_runner.go deleted file mode 100644 index ab746d7e953d..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/suite_runner.go +++ /dev/null @@ -1,173 +0,0 @@ -package main - -import ( - "fmt" - "runtime" - "sync" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/interrupthandler" - "github.com/onsi/ginkgo/ginkgo/testrunner" - "github.com/onsi/ginkgo/ginkgo/testsuite" - colorable "github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable" -) - -type compilationInput struct { - runner *testrunner.TestRunner - result chan compilationOutput -} - -type compilationOutput struct { - runner *testrunner.TestRunner - err error -} - -type SuiteRunner struct { - notifier *Notifier - interruptHandler *interrupthandler.InterruptHandler -} - -func NewSuiteRunner(notifier *Notifier, interruptHandler *interrupthandler.InterruptHandler) *SuiteRunner { - return &SuiteRunner{ - notifier: notifier, - interruptHandler: interruptHandler, - } -} - -func (r *SuiteRunner) compileInParallel(runners []*testrunner.TestRunner, numCompilers int, willCompile func(suite testsuite.TestSuite)) chan compilationOutput { - //we return this to the consumer, it will return each runner in order as it compiles - compilationOutputs := make(chan compilationOutput, len(runners)) - - //an array of channels - the nth runner's compilation output is sent to the nth channel in this array - //we read from these channels in order to ensure we run the suites in order - orderedCompilationOutputs := []chan compilationOutput{} - for range runners { - orderedCompilationOutputs = append(orderedCompilationOutputs, make(chan compilationOutput, 1)) - } - - //we're going to spin up numCompilers compilers - they're going to run concurrently and will consume this channel - //we prefill the channel then close it, this ensures we compile things in the correct order - workPool := make(chan compilationInput, len(runners)) - for i, runner := range runners { - workPool <- compilationInput{runner, orderedCompilationOutputs[i]} - } - close(workPool) - - //pick a reasonable numCompilers - if numCompilers == 0 { - numCompilers = runtime.NumCPU() - } - - //a WaitGroup to help us wait for all compilers to shut down - wg := &sync.WaitGroup{} - wg.Add(numCompilers) - - //spin up the concurrent compilers - for i := 0; i < numCompilers; i++ { - go func() { - defer wg.Done() - for input := range workPool { - if r.interruptHandler.WasInterrupted() { - return - } - - if willCompile != nil { - willCompile(input.runner.Suite) - } - - //We retry because Go sometimes steps on itself when multiple compiles happen in parallel. This is ugly, but should help resolve flakiness... - var err error - retries := 0 - for retries <= 5 { - if r.interruptHandler.WasInterrupted() { - return - } - if err = input.runner.Compile(); err == nil { - break - } - retries++ - } - - input.result <- compilationOutput{input.runner, err} - } - }() - } - - //read from the compilation output channels *in order* and send them to the caller - //close the compilationOutputs channel to tell the caller we're done - go func() { - defer close(compilationOutputs) - for _, orderedCompilationOutput := range orderedCompilationOutputs { - select { - case compilationOutput := <-orderedCompilationOutput: - compilationOutputs <- compilationOutput - case <-r.interruptHandler.C: - //interrupt detected, wait for the compilers to shut down then bail - //this ensure we clean up after ourselves as we don't leave any compilation processes running - wg.Wait() - return - } - } - }() - - return compilationOutputs -} - -func (r *SuiteRunner) RunSuites(runners []*testrunner.TestRunner, numCompilers int, keepGoing bool, willCompile func(suite testsuite.TestSuite)) (testrunner.RunResult, int) { - runResult := testrunner.PassingRunResult() - - compilationOutputs := r.compileInParallel(runners, numCompilers, willCompile) - - numSuitesThatRan := 0 - suitesThatFailed := []testsuite.TestSuite{} - for compilationOutput := range compilationOutputs { - if compilationOutput.err != nil { - fmt.Print(compilationOutput.err.Error()) - } - numSuitesThatRan++ - suiteRunResult := testrunner.FailingRunResult() - if compilationOutput.err == nil { - suiteRunResult = compilationOutput.runner.Run() - } - r.notifier.SendSuiteCompletionNotification(compilationOutput.runner.Suite, suiteRunResult.Passed) - r.notifier.RunCommand(compilationOutput.runner.Suite, suiteRunResult.Passed) - runResult = runResult.Merge(suiteRunResult) - if !suiteRunResult.Passed { - suitesThatFailed = append(suitesThatFailed, compilationOutput.runner.Suite) - if !keepGoing { - break - } - } - if numSuitesThatRan < len(runners) && !config.DefaultReporterConfig.Succinct { - fmt.Println("") - } - } - - if keepGoing && !runResult.Passed { - r.listFailedSuites(suitesThatFailed) - } - - return runResult, numSuitesThatRan -} - -func (r *SuiteRunner) listFailedSuites(suitesThatFailed []testsuite.TestSuite) { - fmt.Println("") - fmt.Println("There were failures detected in the following suites:") - - maxPackageNameLength := 0 - for _, suite := range suitesThatFailed { - if len(suite.PackageName) > maxPackageNameLength { - maxPackageNameLength = len(suite.PackageName) - } - } - - packageNameFormatter := fmt.Sprintf("%%%ds", maxPackageNameLength) - - for _, suite := range suitesThatFailed { - if config.DefaultReporterConfig.NoColor { - fmt.Printf("\t"+packageNameFormatter+" %s\n", suite.PackageName, suite.Path) - } else { - fmt.Fprintf(colorable.NewColorableStdout(), "\t%s"+packageNameFormatter+"%s %s%s%s\n", redColor, suite.PackageName, defaultStyle, lightGrayColor, suite.Path, defaultStyle) - } - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/build_args.go b/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/build_args.go deleted file mode 100644 index 3b1a238c2c47..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/build_args.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build go1.10 - -package testrunner - -var ( - buildArgs = []string{"test", "-c"} -) diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/build_args_old.go b/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/build_args_old.go deleted file mode 100644 index 14d70dbcc529..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/build_args_old.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build !go1.10 - -package testrunner - -var ( - buildArgs = []string{"test", "-c", "-i"} -) diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/log_writer.go b/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/log_writer.go deleted file mode 100644 index a73a6e379197..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/log_writer.go +++ /dev/null @@ -1,52 +0,0 @@ -package testrunner - -import ( - "bytes" - "fmt" - "io" - "log" - "strings" - "sync" -) - -type logWriter struct { - buffer *bytes.Buffer - lock *sync.Mutex - log *log.Logger -} - -func newLogWriter(target io.Writer, node int) *logWriter { - return &logWriter{ - buffer: &bytes.Buffer{}, - lock: &sync.Mutex{}, - log: log.New(target, fmt.Sprintf("[%d] ", node), 0), - } -} - -func (w *logWriter) Write(data []byte) (n int, err error) { - w.lock.Lock() - defer w.lock.Unlock() - - w.buffer.Write(data) - contents := w.buffer.String() - - lines := strings.Split(contents, "\n") - for _, line := range lines[0 : len(lines)-1] { - w.log.Println(line) - } - - w.buffer.Reset() - w.buffer.Write([]byte(lines[len(lines)-1])) - return len(data), nil -} - -func (w *logWriter) Close() error { - w.lock.Lock() - defer w.lock.Unlock() - - if w.buffer.Len() > 0 { - w.log.Println(w.buffer.String()) - } - - return nil -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/run_result.go b/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/run_result.go deleted file mode 100644 index 5d472acb8d2f..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/run_result.go +++ /dev/null @@ -1,27 +0,0 @@ -package testrunner - -type RunResult struct { - Passed bool - HasProgrammaticFocus bool -} - -func PassingRunResult() RunResult { - return RunResult{ - Passed: true, - HasProgrammaticFocus: false, - } -} - -func FailingRunResult() RunResult { - return RunResult{ - Passed: false, - HasProgrammaticFocus: false, - } -} - -func (r RunResult) Merge(o RunResult) RunResult { - return RunResult{ - Passed: r.Passed && o.Passed, - HasProgrammaticFocus: r.HasProgrammaticFocus || o.HasProgrammaticFocus, - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go b/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go deleted file mode 100644 index 66c0f06f6281..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go +++ /dev/null @@ -1,554 +0,0 @@ -package testrunner - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "strconv" - "strings" - "syscall" - "time" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/testsuite" - "github.com/onsi/ginkgo/internal/remote" - "github.com/onsi/ginkgo/reporters/stenographer" - colorable "github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable" - "github.com/onsi/ginkgo/types" -) - -type TestRunner struct { - Suite testsuite.TestSuite - - compiled bool - compilationTargetPath string - - numCPU int - parallelStream bool - timeout time.Duration - goOpts map[string]interface{} - additionalArgs []string - stderr *bytes.Buffer - - CoverageFile string -} - -func New(suite testsuite.TestSuite, numCPU int, parallelStream bool, timeout time.Duration, goOpts map[string]interface{}, additionalArgs []string) *TestRunner { - runner := &TestRunner{ - Suite: suite, - numCPU: numCPU, - parallelStream: parallelStream, - goOpts: goOpts, - additionalArgs: additionalArgs, - timeout: timeout, - stderr: new(bytes.Buffer), - } - - if !suite.Precompiled { - runner.compilationTargetPath, _ = filepath.Abs(filepath.Join(suite.Path, suite.PackageName+".test")) - } - - return runner -} - -func (t *TestRunner) Compile() error { - return t.CompileTo(t.compilationTargetPath) -} - -func (t *TestRunner) BuildArgs(path string) []string { - args := make([]string, len(buildArgs), len(buildArgs)+3) - copy(args, buildArgs) - args = append(args, "-o", path, t.Suite.Path) - - if t.getCoverMode() != "" { - args = append(args, "-cover", fmt.Sprintf("-covermode=%s", t.getCoverMode())) - } else { - if t.shouldCover() || t.getCoverPackage() != "" { - args = append(args, "-cover", "-covermode=atomic") - } - } - - boolOpts := []string{ - "a", - "n", - "msan", - "race", - "x", - "work", - "linkshared", - } - - for _, opt := range boolOpts { - if s, found := t.goOpts[opt].(*bool); found && *s { - args = append(args, fmt.Sprintf("-%s", opt)) - } - } - - intOpts := []string{ - "memprofilerate", - "blockprofilerate", - } - - for _, opt := range intOpts { - if s, found := t.goOpts[opt].(*int); found { - args = append(args, fmt.Sprintf("-%s=%d", opt, *s)) - } - } - - stringOpts := []string{ - "asmflags", - "buildmode", - "compiler", - "gccgoflags", - "installsuffix", - "ldflags", - "pkgdir", - "toolexec", - "coverprofile", - "cpuprofile", - "memprofile", - "outputdir", - "coverpkg", - "tags", - "gcflags", - "vet", - "mod", - } - - for _, opt := range stringOpts { - if s, found := t.goOpts[opt].(*string); found && *s != "" { - args = append(args, fmt.Sprintf("-%s=%s", opt, *s)) - } - } - return args -} - -func (t *TestRunner) CompileTo(path string) error { - if t.compiled { - return nil - } - - if t.Suite.Precompiled { - return nil - } - - args := t.BuildArgs(path) - cmd := exec.Command("go", args...) - - output, err := cmd.CombinedOutput() - - if err != nil { - if len(output) > 0 { - return fmt.Errorf("Failed to compile %s:\n\n%s", t.Suite.PackageName, output) - } - return fmt.Errorf("Failed to compile %s", t.Suite.PackageName) - } - - if len(output) > 0 { - fmt.Println(string(output)) - } - - if !fileExists(path) { - compiledFile := t.Suite.PackageName + ".test" - if fileExists(compiledFile) { - // seems like we are on an old go version that does not support the -o flag on go test - // move the compiled test file to the desired location by hand - err = os.Rename(compiledFile, path) - if err != nil { - // We cannot move the file, perhaps because the source and destination - // are on different partitions. We can copy the file, however. - err = copyFile(compiledFile, path) - if err != nil { - return fmt.Errorf("Failed to copy compiled file: %s", err) - } - } - } else { - return fmt.Errorf("Failed to compile %s: output file %q could not be found", t.Suite.PackageName, path) - } - } - - t.compiled = true - - return nil -} - -func fileExists(path string) bool { - _, err := os.Stat(path) - return err == nil || !os.IsNotExist(err) -} - -// copyFile copies the contents of the file named src to the file named -// by dst. The file will be created if it does not already exist. If the -// destination file exists, all it's contents will be replaced by the contents -// of the source file. -func copyFile(src, dst string) error { - srcInfo, err := os.Stat(src) - if err != nil { - return err - } - mode := srcInfo.Mode() - - in, err := os.Open(src) - if err != nil { - return err - } - - defer in.Close() - - out, err := os.Create(dst) - if err != nil { - return err - } - - defer func() { - closeErr := out.Close() - if err == nil { - err = closeErr - } - }() - - _, err = io.Copy(out, in) - if err != nil { - return err - } - - err = out.Sync() - if err != nil { - return err - } - - return out.Chmod(mode) -} - -func (t *TestRunner) Run() RunResult { - if t.Suite.IsGinkgo { - if t.numCPU > 1 { - if t.parallelStream { - return t.runAndStreamParallelGinkgoSuite() - } else { - return t.runParallelGinkgoSuite() - } - } else { - return t.runSerialGinkgoSuite() - } - } else { - return t.runGoTestSuite() - } -} - -func (t *TestRunner) CleanUp() { - if t.Suite.Precompiled { - return - } - os.Remove(t.compilationTargetPath) -} - -func (t *TestRunner) runSerialGinkgoSuite() RunResult { - ginkgoArgs := config.BuildFlagArgs("ginkgo", config.GinkgoConfig, config.DefaultReporterConfig) - return t.run(t.cmd(ginkgoArgs, os.Stdout, 1), nil) -} - -func (t *TestRunner) runGoTestSuite() RunResult { - return t.run(t.cmd([]string{"-test.v"}, os.Stdout, 1), nil) -} - -func (t *TestRunner) runAndStreamParallelGinkgoSuite() RunResult { - completions := make(chan RunResult) - writers := make([]*logWriter, t.numCPU) - - server, err := remote.NewServer(t.numCPU) - if err != nil { - panic("Failed to start parallel spec server") - } - - server.Start() - defer server.Close() - - for cpu := 0; cpu < t.numCPU; cpu++ { - config.GinkgoConfig.ParallelNode = cpu + 1 - config.GinkgoConfig.ParallelTotal = t.numCPU - config.GinkgoConfig.SyncHost = server.Address() - - ginkgoArgs := config.BuildFlagArgs("ginkgo", config.GinkgoConfig, config.DefaultReporterConfig) - - writers[cpu] = newLogWriter(os.Stdout, cpu+1) - - cmd := t.cmd(ginkgoArgs, writers[cpu], cpu+1) - - server.RegisterAlive(cpu+1, func() bool { - if cmd.ProcessState == nil { - return true - } - return !cmd.ProcessState.Exited() - }) - - go t.run(cmd, completions) - } - - res := PassingRunResult() - - for cpu := 0; cpu < t.numCPU; cpu++ { - res = res.Merge(<-completions) - } - - for _, writer := range writers { - writer.Close() - } - - os.Stdout.Sync() - - if t.shouldCombineCoverprofiles() { - t.combineCoverprofiles() - } - - return res -} - -func (t *TestRunner) runParallelGinkgoSuite() RunResult { - result := make(chan bool) - completions := make(chan RunResult) - writers := make([]*logWriter, t.numCPU) - reports := make([]*bytes.Buffer, t.numCPU) - - stenographer := stenographer.New(!config.DefaultReporterConfig.NoColor, config.GinkgoConfig.FlakeAttempts > 1, colorable.NewColorableStdout()) - aggregator := remote.NewAggregator(t.numCPU, result, config.DefaultReporterConfig, stenographer) - - server, err := remote.NewServer(t.numCPU) - if err != nil { - panic("Failed to start parallel spec server") - } - server.RegisterReporters(aggregator) - server.Start() - defer server.Close() - - for cpu := 0; cpu < t.numCPU; cpu++ { - config.GinkgoConfig.ParallelNode = cpu + 1 - config.GinkgoConfig.ParallelTotal = t.numCPU - config.GinkgoConfig.SyncHost = server.Address() - config.GinkgoConfig.StreamHost = server.Address() - - ginkgoArgs := config.BuildFlagArgs("ginkgo", config.GinkgoConfig, config.DefaultReporterConfig) - - reports[cpu] = &bytes.Buffer{} - writers[cpu] = newLogWriter(reports[cpu], cpu+1) - - cmd := t.cmd(ginkgoArgs, writers[cpu], cpu+1) - - server.RegisterAlive(cpu+1, func() bool { - if cmd.ProcessState == nil { - return true - } - return !cmd.ProcessState.Exited() - }) - - go t.run(cmd, completions) - } - - res := PassingRunResult() - - for cpu := 0; cpu < t.numCPU; cpu++ { - res = res.Merge(<-completions) - } - - //all test processes are done, at this point - //we should be able to wait for the aggregator to tell us that it's done - - select { - case <-result: - fmt.Println("") - case <-time.After(time.Second): - //the aggregator never got back to us! something must have gone wrong - fmt.Println(` - ------------------------------------------------------------------- - | | - | Ginkgo timed out waiting for all parallel nodes to report back! | - | | - -------------------------------------------------------------------`) - fmt.Println("\n", t.Suite.PackageName, "timed out. path:", t.Suite.Path) - os.Stdout.Sync() - - for _, writer := range writers { - writer.Close() - } - - for _, report := range reports { - fmt.Print(report.String()) - } - - os.Stdout.Sync() - } - - if t.shouldCombineCoverprofiles() { - t.combineCoverprofiles() - } - - return res -} - -const CoverProfileSuffix = ".coverprofile" - -func (t *TestRunner) cmd(ginkgoArgs []string, stream io.Writer, node int) *exec.Cmd { - args := []string{"--test.timeout=" + t.timeout.String()} - - coverProfile := t.getCoverProfile() - - if t.shouldCombineCoverprofiles() { - - testCoverProfile := "--test.coverprofile=" - - coverageFile := "" - // Set default name for coverage results - if coverProfile == "" { - coverageFile = t.Suite.PackageName + CoverProfileSuffix - } else { - coverageFile = coverProfile - } - - testCoverProfile += coverageFile - - t.CoverageFile = filepath.Join(t.Suite.Path, coverageFile) - - if t.numCPU > 1 { - testCoverProfile = fmt.Sprintf("%s.%d", testCoverProfile, node) - } - args = append(args, testCoverProfile) - } - - args = append(args, ginkgoArgs...) - args = append(args, t.additionalArgs...) - - path := t.compilationTargetPath - if t.Suite.Precompiled { - path, _ = filepath.Abs(filepath.Join(t.Suite.Path, fmt.Sprintf("%s.test", t.Suite.PackageName))) - } - - cmd := exec.Command(path, args...) - - cmd.Dir = t.Suite.Path - cmd.Stderr = io.MultiWriter(stream, t.stderr) - cmd.Stdout = stream - - return cmd -} - -func (t *TestRunner) shouldCover() bool { - return *t.goOpts["cover"].(*bool) -} - -func (t *TestRunner) shouldRequireSuite() bool { - return *t.goOpts["requireSuite"].(*bool) -} - -func (t *TestRunner) getCoverProfile() string { - return *t.goOpts["coverprofile"].(*string) -} - -func (t *TestRunner) getCoverPackage() string { - return *t.goOpts["coverpkg"].(*string) -} - -func (t *TestRunner) getCoverMode() string { - return *t.goOpts["covermode"].(*string) -} - -func (t *TestRunner) shouldCombineCoverprofiles() bool { - return t.shouldCover() || t.getCoverPackage() != "" || t.getCoverMode() != "" -} - -func (t *TestRunner) run(cmd *exec.Cmd, completions chan RunResult) RunResult { - var res RunResult - - defer func() { - if completions != nil { - completions <- res - } - }() - - err := cmd.Start() - if err != nil { - fmt.Printf("Failed to run test suite!\n\t%s", err.Error()) - return res - } - - cmd.Wait() - - exitStatus := cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus() - res.Passed = (exitStatus == 0) || (exitStatus == types.GINKGO_FOCUS_EXIT_CODE) - res.HasProgrammaticFocus = (exitStatus == types.GINKGO_FOCUS_EXIT_CODE) - - if strings.Contains(t.stderr.String(), "warning: no tests to run") { - if t.shouldRequireSuite() { - res.Passed = false - } - fmt.Fprintf(os.Stderr, `Found no test suites, did you forget to run "ginkgo bootstrap"?`) - } - - return res -} - -func (t *TestRunner) combineCoverprofiles() { - profiles := []string{} - - coverProfile := t.getCoverProfile() - - for cpu := 1; cpu <= t.numCPU; cpu++ { - var coverFile string - if coverProfile == "" { - coverFile = fmt.Sprintf("%s%s.%d", t.Suite.PackageName, CoverProfileSuffix, cpu) - } else { - coverFile = fmt.Sprintf("%s.%d", coverProfile, cpu) - } - - coverFile = filepath.Join(t.Suite.Path, coverFile) - coverProfile, err := ioutil.ReadFile(coverFile) - os.Remove(coverFile) - - if err == nil { - profiles = append(profiles, string(coverProfile)) - } - } - - if len(profiles) != t.numCPU { - return - } - - lines := map[string]int{} - lineOrder := []string{} - for i, coverProfile := range profiles { - for _, line := range strings.Split(coverProfile, "\n")[1:] { - if len(line) == 0 { - continue - } - components := strings.Split(line, " ") - count, _ := strconv.Atoi(components[len(components)-1]) - prefix := strings.Join(components[0:len(components)-1], " ") - lines[prefix] += count - if i == 0 { - lineOrder = append(lineOrder, prefix) - } - } - } - - output := []string{"mode: atomic"} - for _, line := range lineOrder { - output = append(output, fmt.Sprintf("%s %d", line, lines[line])) - } - finalOutput := strings.Join(output, "\n") - - finalFilename := "" - - if coverProfile != "" { - finalFilename = coverProfile - } else { - finalFilename = fmt.Sprintf("%s%s", t.Suite.PackageName, CoverProfileSuffix) - } - - coverageFilepath := filepath.Join(t.Suite.Path, finalFilename) - ioutil.WriteFile(coverageFilepath, []byte(finalOutput), 0666) - - t.CoverageFile = coverageFilepath -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/test_suite.go b/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/test_suite.go deleted file mode 100644 index 9de8c2bb4e67..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/test_suite.go +++ /dev/null @@ -1,115 +0,0 @@ -package testsuite - -import ( - "errors" - "io/ioutil" - "os" - "path/filepath" - "regexp" - "strings" -) - -type TestSuite struct { - Path string - PackageName string - IsGinkgo bool - Precompiled bool -} - -func PrecompiledTestSuite(path string) (TestSuite, error) { - info, err := os.Stat(path) - if err != nil { - return TestSuite{}, err - } - - if info.IsDir() { - return TestSuite{}, errors.New("this is a directory, not a file") - } - - if filepath.Ext(path) != ".test" { - return TestSuite{}, errors.New("this is not a .test binary") - } - - if info.Mode()&0111 == 0 { - return TestSuite{}, errors.New("this is not executable") - } - - dir := relPath(filepath.Dir(path)) - packageName := strings.TrimSuffix(filepath.Base(path), filepath.Ext(path)) - - return TestSuite{ - Path: dir, - PackageName: packageName, - IsGinkgo: true, - Precompiled: true, - }, nil -} - -func SuitesInDir(dir string, recurse bool) []TestSuite { - suites := []TestSuite{} - - if vendorExperimentCheck(dir) { - return suites - } - - files, _ := ioutil.ReadDir(dir) - re := regexp.MustCompile(`^[^._].*_test\.go$`) - for _, file := range files { - if !file.IsDir() && re.Match([]byte(file.Name())) { - suites = append(suites, New(dir, files)) - break - } - } - - if recurse { - re = regexp.MustCompile(`^[._]`) - for _, file := range files { - if file.IsDir() && !re.Match([]byte(file.Name())) { - suites = append(suites, SuitesInDir(dir+"/"+file.Name(), recurse)...) - } - } - } - - return suites -} - -func relPath(dir string) string { - dir, _ = filepath.Abs(dir) - cwd, _ := os.Getwd() - dir, _ = filepath.Rel(cwd, filepath.Clean(dir)) - - if string(dir[0]) != "." { - dir = "." + string(filepath.Separator) + dir - } - - return dir -} - -func New(dir string, files []os.FileInfo) TestSuite { - return TestSuite{ - Path: relPath(dir), - PackageName: packageNameForSuite(dir), - IsGinkgo: filesHaveGinkgoSuite(dir, files), - } -} - -func packageNameForSuite(dir string) string { - path, _ := filepath.Abs(dir) - return filepath.Base(path) -} - -func filesHaveGinkgoSuite(dir string, files []os.FileInfo) bool { - reTestFile := regexp.MustCompile(`_test\.go$`) - reGinkgo := regexp.MustCompile(`package ginkgo|\/ginkgo"`) - - for _, file := range files { - if !file.IsDir() && reTestFile.Match([]byte(file.Name())) { - contents, _ := ioutil.ReadFile(dir + "/" + file.Name()) - if reGinkgo.Match(contents) { - return true - } - } - } - - return false -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/vendor_check_go15.go b/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/vendor_check_go15.go deleted file mode 100644 index 75f827a121bb..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/vendor_check_go15.go +++ /dev/null @@ -1,16 +0,0 @@ -// +build !go1.6 - -package testsuite - -import ( - "os" - "path" -) - -// "This change will only be enabled if the go command is run with -// GO15VENDOREXPERIMENT=1 in its environment." -// c.f. the vendor-experiment proposal https://goo.gl/2ucMeC -func vendorExperimentCheck(dir string) bool { - vendorExperiment := os.Getenv("GO15VENDOREXPERIMENT") - return vendorExperiment == "1" && path.Base(dir) == "vendor" -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/vendor_check_go16.go b/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/vendor_check_go16.go deleted file mode 100644 index 596e5e5c1809..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/vendor_check_go16.go +++ /dev/null @@ -1,15 +0,0 @@ -// +build go1.6 - -package testsuite - -import ( - "os" - "path" -) - -// in 1.6 the vendor directory became the default go behaviour, so now -// check if its disabled. -func vendorExperimentCheck(dir string) bool { - vendorExperiment := os.Getenv("GO15VENDOREXPERIMENT") - return vendorExperiment != "0" && path.Base(dir) == "vendor" -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/unfocus_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/unfocus_command.go deleted file mode 100644 index d9dfb6e44c16..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/unfocus_command.go +++ /dev/null @@ -1,180 +0,0 @@ -package main - -import ( - "bytes" - "flag" - "fmt" - "go/ast" - "go/parser" - "go/token" - "io" - "io/ioutil" - "os" - "path/filepath" - "strings" - "sync" -) - -func BuildUnfocusCommand() *Command { - return &Command{ - Name: "unfocus", - AltName: "blur", - FlagSet: flag.NewFlagSet("unfocus", flag.ExitOnError), - UsageCommand: "ginkgo unfocus (or ginkgo blur)", - Usage: []string{ - "Recursively unfocuses any focused tests under the current directory", - }, - Command: unfocusSpecs, - } -} - -func unfocusSpecs([]string, []string) { - fmt.Println("Scanning for focus...") - - goFiles := make(chan string) - go func() { - unfocusDir(goFiles, ".") - close(goFiles) - }() - - const workers = 10 - wg := sync.WaitGroup{} - wg.Add(workers) - - for i := 0; i < workers; i++ { - go func() { - for path := range goFiles { - unfocusFile(path) - } - wg.Done() - }() - } - - wg.Wait() -} - -func unfocusDir(goFiles chan string, path string) { - files, err := ioutil.ReadDir(path) - if err != nil { - fmt.Println(err.Error()) - return - } - - for _, f := range files { - switch { - case f.IsDir() && shouldProcessDir(f.Name()): - unfocusDir(goFiles, filepath.Join(path, f.Name())) - case !f.IsDir() && shouldProcessFile(f.Name()): - goFiles <- filepath.Join(path, f.Name()) - } - } -} - -func shouldProcessDir(basename string) bool { - return basename != "vendor" && !strings.HasPrefix(basename, ".") -} - -func shouldProcessFile(basename string) bool { - return strings.HasSuffix(basename, ".go") -} - -func unfocusFile(path string) { - data, err := ioutil.ReadFile(path) - if err != nil { - fmt.Printf("error reading file '%s': %s\n", path, err.Error()) - return - } - - ast, err := parser.ParseFile(token.NewFileSet(), path, bytes.NewReader(data), 0) - if err != nil { - fmt.Printf("error parsing file '%s': %s\n", path, err.Error()) - return - } - - eliminations := scanForFocus(ast) - if len(eliminations) == 0 { - return - } - - fmt.Printf("...updating %s\n", path) - backup, err := writeBackup(path, data) - if err != nil { - fmt.Printf("error creating backup file: %s\n", err.Error()) - return - } - - if err := updateFile(path, data, eliminations); err != nil { - fmt.Printf("error writing file '%s': %s\n", path, err.Error()) - return - } - - os.Remove(backup) -} - -func writeBackup(path string, data []byte) (string, error) { - t, err := ioutil.TempFile(filepath.Dir(path), filepath.Base(path)) - - if err != nil { - return "", fmt.Errorf("error creating temporary file: %w", err) - } - defer t.Close() - - if _, err := io.Copy(t, bytes.NewReader(data)); err != nil { - return "", fmt.Errorf("error writing to temporary file: %w", err) - } - - return t.Name(), nil -} - -func updateFile(path string, data []byte, eliminations []int64) error { - to, err := os.Create(path) - if err != nil { - return fmt.Errorf("error opening file for writing '%s': %w\n", path, err) - } - defer to.Close() - - from := bytes.NewReader(data) - var cursor int64 - for _, byteToEliminate := range eliminations { - if _, err := io.CopyN(to, from, byteToEliminate-cursor); err != nil { - return fmt.Errorf("error copying data: %w", err) - } - - cursor = byteToEliminate + 1 - - if _, err := from.Seek(1, io.SeekCurrent); err != nil { - return fmt.Errorf("error seeking to position in buffer: %w", err) - } - } - - if _, err := io.Copy(to, from); err != nil { - return fmt.Errorf("error copying end data: %w", err) - } - - return nil -} - -func scanForFocus(file *ast.File) (eliminations []int64) { - ast.Inspect(file, func(n ast.Node) bool { - if c, ok := n.(*ast.CallExpr); ok { - if i, ok := c.Fun.(*ast.Ident); ok { - if isFocus(i.Name) { - eliminations = append(eliminations, int64(i.Pos()-file.Pos())) - } - } - } - - return true - }) - - return eliminations -} - -func isFocus(name string) bool { - switch name { - case "FDescribe", "FContext", "FIt", "FMeasure", "FDescribeTable", "FEntry", "FSpecify", "FWhen": - return true - default: - return false - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/version_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/version_command.go deleted file mode 100644 index f586908e87fe..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/version_command.go +++ /dev/null @@ -1,24 +0,0 @@ -package main - -import ( - "flag" - "fmt" - - "github.com/onsi/ginkgo/config" -) - -func BuildVersionCommand() *Command { - return &Command{ - Name: "version", - FlagSet: flag.NewFlagSet("version", flag.ExitOnError), - UsageCommand: "ginkgo version", - Usage: []string{ - "Print Ginkgo's version", - }, - Command: printVersion, - } -} - -func printVersion([]string, []string) { - fmt.Printf("Ginkgo Version %s\n", config.VERSION) -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/watch/delta.go b/vendor/github.com/onsi/ginkgo/ginkgo/watch/delta.go deleted file mode 100644 index 6c485c5b1af8..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/watch/delta.go +++ /dev/null @@ -1,22 +0,0 @@ -package watch - -import "sort" - -type Delta struct { - ModifiedPackages []string - - NewSuites []*Suite - RemovedSuites []*Suite - modifiedSuites []*Suite -} - -type DescendingByDelta []*Suite - -func (a DescendingByDelta) Len() int { return len(a) } -func (a DescendingByDelta) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a DescendingByDelta) Less(i, j int) bool { return a[i].Delta() > a[j].Delta() } - -func (d Delta) ModifiedSuites() []*Suite { - sort.Sort(DescendingByDelta(d.modifiedSuites)) - return d.modifiedSuites -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/watch/delta_tracker.go b/vendor/github.com/onsi/ginkgo/ginkgo/watch/delta_tracker.go deleted file mode 100644 index a628303d7294..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/watch/delta_tracker.go +++ /dev/null @@ -1,75 +0,0 @@ -package watch - -import ( - "fmt" - - "regexp" - - "github.com/onsi/ginkgo/ginkgo/testsuite" -) - -type SuiteErrors map[testsuite.TestSuite]error - -type DeltaTracker struct { - maxDepth int - watchRegExp *regexp.Regexp - suites map[string]*Suite - packageHashes *PackageHashes -} - -func NewDeltaTracker(maxDepth int, watchRegExp *regexp.Regexp) *DeltaTracker { - return &DeltaTracker{ - maxDepth: maxDepth, - watchRegExp: watchRegExp, - packageHashes: NewPackageHashes(watchRegExp), - suites: map[string]*Suite{}, - } -} - -func (d *DeltaTracker) Delta(suites []testsuite.TestSuite) (delta Delta, errors SuiteErrors) { - errors = SuiteErrors{} - delta.ModifiedPackages = d.packageHashes.CheckForChanges() - - providedSuitePaths := map[string]bool{} - for _, suite := range suites { - providedSuitePaths[suite.Path] = true - } - - d.packageHashes.StartTrackingUsage() - - for _, suite := range d.suites { - if providedSuitePaths[suite.Suite.Path] { - if suite.Delta() > 0 { - delta.modifiedSuites = append(delta.modifiedSuites, suite) - } - } else { - delta.RemovedSuites = append(delta.RemovedSuites, suite) - } - } - - d.packageHashes.StopTrackingUsageAndPrune() - - for _, suite := range suites { - _, ok := d.suites[suite.Path] - if !ok { - s, err := NewSuite(suite, d.maxDepth, d.packageHashes) - if err != nil { - errors[suite] = err - continue - } - d.suites[suite.Path] = s - delta.NewSuites = append(delta.NewSuites, s) - } - } - - return delta, errors -} - -func (d *DeltaTracker) WillRun(suite testsuite.TestSuite) error { - s, ok := d.suites[suite.Path] - if !ok { - return fmt.Errorf("unknown suite %s", suite.Path) - } - - return s.MarkAsRunAndRecomputedDependencies(d.maxDepth) -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go b/vendor/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go deleted file mode 100644 index f5ddff30fc76..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go +++ /dev/null @@ -1,92 +0,0 @@ -package watch - -import ( - "go/build" - "regexp" -) - -var ginkgoAndGomegaFilter = regexp.MustCompile(`github\.com/onsi/ginkgo|github\.com/onsi/gomega`) -var ginkgoIntegrationTestFilter = regexp.MustCompile(`github\.com/onsi/ginkgo/integration`) //allow us to integration test this thing - -type Dependencies struct { - deps map[string]int -} - -func NewDependencies(path string, maxDepth int) (Dependencies, error) { - d := Dependencies{ - deps: map[string]int{}, - } - - if maxDepth == 0 { - return d, nil - } - - err := d.seedWithDepsForPackageAtPath(path) - if err != nil { - return d, err - } - - for depth := 1; depth < maxDepth; depth++ { - n := len(d.deps) - d.addDepsForDepth(depth) - if n == len(d.deps) { - break - } - } - - return d, nil -} - -func (d Dependencies) Dependencies() map[string]int { - return d.deps -} - -func (d Dependencies) seedWithDepsForPackageAtPath(path string) error { - pkg, err := build.ImportDir(path, 0) - if err != nil { - return err - } - - d.resolveAndAdd(pkg.Imports, 1) - d.resolveAndAdd(pkg.TestImports, 1) - d.resolveAndAdd(pkg.XTestImports, 1) - - delete(d.deps, pkg.Dir) - return nil -} - -func (d Dependencies) addDepsForDepth(depth int) { - for dep, depDepth := range d.deps { - if depDepth == depth { - d.addDepsForDep(dep, depth+1) - } - } -} - -func (d Dependencies) addDepsForDep(dep string, depth int) { - pkg, err := build.ImportDir(dep, 0) - if err != nil { - println(err.Error()) - return - } - d.resolveAndAdd(pkg.Imports, depth) -} - -func (d Dependencies) resolveAndAdd(deps []string, depth int) { - for _, dep := range deps { - pkg, err := build.Import(dep, ".", 0) - if err != nil { - continue - } - if !pkg.Goroot && (!ginkgoAndGomegaFilter.Match([]byte(pkg.Dir)) || ginkgoIntegrationTestFilter.Match([]byte(pkg.Dir))) { - d.addDepIfNotPresent(pkg.Dir, depth) - } - } -} - -func (d Dependencies) addDepIfNotPresent(dep string, depth int) { - _, ok := d.deps[dep] - if !ok { - d.deps[dep] = depth - } -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go b/vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go deleted file mode 100644 index 67e2c1c329d0..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go +++ /dev/null @@ -1,104 +0,0 @@ -package watch - -import ( - "fmt" - "io/ioutil" - "os" - "regexp" - "time" -) - -var goTestRegExp = regexp.MustCompile(`_test\.go$`) - -type PackageHash struct { - CodeModifiedTime time.Time - TestModifiedTime time.Time - Deleted bool - - path string - codeHash string - testHash string - watchRegExp *regexp.Regexp -} - -func NewPackageHash(path string, watchRegExp *regexp.Regexp) *PackageHash { - p := &PackageHash{ - path: path, - watchRegExp: watchRegExp, - } - - p.codeHash, _, p.testHash, _, p.Deleted = p.computeHashes() - - return p -} - -func (p *PackageHash) CheckForChanges() bool { - codeHash, codeModifiedTime, testHash, testModifiedTime, deleted := p.computeHashes() - - if deleted { - if !p.Deleted { - t := time.Now() - p.CodeModifiedTime = t - p.TestModifiedTime = t - } - p.Deleted = true - return true - } - - modified := false - p.Deleted = false - - if p.codeHash != codeHash { - p.CodeModifiedTime = codeModifiedTime - modified = true - } - if p.testHash != testHash { - p.TestModifiedTime = testModifiedTime - modified = true - } - - p.codeHash = codeHash - p.testHash = testHash - return modified -} - -func (p *PackageHash) computeHashes() (codeHash string, codeModifiedTime time.Time, testHash string, testModifiedTime time.Time, deleted bool) { - infos, err := ioutil.ReadDir(p.path) - - if err != nil { - deleted = true - return - } - - for _, info := range infos { - if info.IsDir() { - continue - } - - if goTestRegExp.Match([]byte(info.Name())) { - testHash += p.hashForFileInfo(info) - if info.ModTime().After(testModifiedTime) { - testModifiedTime = info.ModTime() - } - continue - } - - if p.watchRegExp.Match([]byte(info.Name())) { - codeHash += p.hashForFileInfo(info) - if info.ModTime().After(codeModifiedTime) { - codeModifiedTime = info.ModTime() - } - } - } - - testHash += codeHash - if codeModifiedTime.After(testModifiedTime) { - testModifiedTime = codeModifiedTime - } - - return -} - -func (p *PackageHash) hashForFileInfo(info os.FileInfo) string { - return fmt.Sprintf("%s_%d_%d", info.Name(), info.Size(), info.ModTime().UnixNano()) -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hashes.go b/vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hashes.go deleted file mode 100644 index b4892bebf26c..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hashes.go +++ /dev/null @@ -1,85 +0,0 @@ -package watch - -import ( - "path/filepath" - "regexp" - "sync" -) - -type PackageHashes struct { - PackageHashes map[string]*PackageHash - usedPaths map[string]bool - watchRegExp *regexp.Regexp - lock *sync.Mutex -} - -func NewPackageHashes(watchRegExp *regexp.Regexp) *PackageHashes { - return &PackageHashes{ - PackageHashes: map[string]*PackageHash{}, - usedPaths: nil, - watchRegExp: watchRegExp, - lock: &sync.Mutex{}, - } -} - -func (p *PackageHashes) CheckForChanges() []string { - p.lock.Lock() - defer p.lock.Unlock() - - modified := []string{} - - for _, packageHash := range p.PackageHashes { - if packageHash.CheckForChanges() { - modified = append(modified, packageHash.path) - } - } - - return modified -} - -func (p *PackageHashes) Add(path string) *PackageHash { - p.lock.Lock() - defer p.lock.Unlock() - - path, _ = filepath.Abs(path) - _, ok := p.PackageHashes[path] - if !ok { - p.PackageHashes[path] = NewPackageHash(path, p.watchRegExp) - } - - if p.usedPaths != nil { - p.usedPaths[path] = true - } - return p.PackageHashes[path] -} - -func (p *PackageHashes) Get(path string) *PackageHash { - p.lock.Lock() - defer p.lock.Unlock() - - path, _ = filepath.Abs(path) - if p.usedPaths != nil { - p.usedPaths[path] = true - } - return p.PackageHashes[path] -} - -func (p *PackageHashes) StartTrackingUsage() { - p.lock.Lock() - defer p.lock.Unlock() - - p.usedPaths = map[string]bool{} -} - -func (p *PackageHashes) StopTrackingUsageAndPrune() { - p.lock.Lock() - defer p.lock.Unlock() - - for path := range p.PackageHashes { - if !p.usedPaths[path] { - delete(p.PackageHashes, path) - } - } - - p.usedPaths = nil -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/watch/suite.go b/vendor/github.com/onsi/ginkgo/ginkgo/watch/suite.go deleted file mode 100644 index 5deaba7cb6db..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/watch/suite.go +++ /dev/null @@ -1,87 +0,0 @@ -package watch - -import ( - "fmt" - "math" - "time" - - "github.com/onsi/ginkgo/ginkgo/testsuite" -) - -type Suite struct { - Suite testsuite.TestSuite - RunTime time.Time - Dependencies Dependencies - - sharedPackageHashes *PackageHashes -} - -func NewSuite(suite testsuite.TestSuite, maxDepth int, sharedPackageHashes *PackageHashes) (*Suite, error) { - deps, err := NewDependencies(suite.Path, maxDepth) - if err != nil { - return nil, err - } - - sharedPackageHashes.Add(suite.Path) - for dep := range deps.Dependencies() { - sharedPackageHashes.Add(dep) - } - - return &Suite{ - Suite: suite, - Dependencies: deps, - - sharedPackageHashes: sharedPackageHashes, - }, nil -} - -func (s *Suite) Delta() float64 { - delta := s.delta(s.Suite.Path, true, 0) * 1000 - for dep, depth := range s.Dependencies.Dependencies() { - delta += s.delta(dep, false, depth) - } - return delta -} - -func (s *Suite) MarkAsRunAndRecomputedDependencies(maxDepth int) error { - s.RunTime = time.Now() - - deps, err := NewDependencies(s.Suite.Path, maxDepth) - if err != nil { - return err - } - - s.sharedPackageHashes.Add(s.Suite.Path) - for dep := range deps.Dependencies() { - s.sharedPackageHashes.Add(dep) - } - - s.Dependencies = deps - - return nil -} - -func (s *Suite) Description() string { - numDeps := len(s.Dependencies.Dependencies()) - pluralizer := "ies" - if numDeps == 1 { - pluralizer = "y" - } - return fmt.Sprintf("%s [%d dependenc%s]", s.Suite.Path, numDeps, pluralizer) -} - -func (s *Suite) delta(packagePath string, includeTests bool, depth int) float64 { - return math.Max(float64(s.dt(packagePath, includeTests)), 0) / float64(depth+1) -} - -func (s *Suite) dt(packagePath string, includeTests bool) time.Duration { - packageHash := s.sharedPackageHashes.Get(packagePath) - var modifiedTime time.Time - if includeTests { - modifiedTime = packageHash.TestModifiedTime - } else { - modifiedTime = packageHash.CodeModifiedTime - } - - return modifiedTime.Sub(s.RunTime) -} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/watch_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/watch_command.go deleted file mode 100644 index a6ef053c8519..000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/watch_command.go +++ /dev/null @@ -1,175 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "regexp" - "time" - - "github.com/onsi/ginkgo/config" - "github.com/onsi/ginkgo/ginkgo/interrupthandler" - "github.com/onsi/ginkgo/ginkgo/testrunner" - "github.com/onsi/ginkgo/ginkgo/testsuite" - "github.com/onsi/ginkgo/ginkgo/watch" - colorable "github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable" -) - -func BuildWatchCommand() *Command { - commandFlags := NewWatchCommandFlags(flag.NewFlagSet("watch", flag.ExitOnError)) - interruptHandler := interrupthandler.NewInterruptHandler() - notifier := NewNotifier(commandFlags) - watcher := &SpecWatcher{ - commandFlags: commandFlags, - notifier: notifier, - interruptHandler: interruptHandler, - suiteRunner: NewSuiteRunner(notifier, interruptHandler), - } - - return &Command{ - Name: "watch", - FlagSet: commandFlags.FlagSet, - UsageCommand: "ginkgo watch -- ", - Usage: []string{ - "Watches the tests in the passed in and runs them when changes occur.", - "Any arguments after -- will be passed to the test.", - }, - Command: watcher.WatchSpecs, - SuppressFlagDocumentation: true, - FlagDocSubstitute: []string{ - "Accepts all the flags that the ginkgo command accepts except for --keepGoing and --untilItFails", - }, - } -} - -type SpecWatcher struct { - commandFlags *RunWatchAndBuildCommandFlags - notifier *Notifier - interruptHandler *interrupthandler.InterruptHandler - suiteRunner *SuiteRunner -} - -func (w *SpecWatcher) WatchSpecs(args []string, additionalArgs []string) { - w.commandFlags.computeNodes() - w.notifier.VerifyNotificationsAreAvailable() - - w.WatchSuites(args, additionalArgs) -} - -func (w *SpecWatcher) runnersForSuites(suites []testsuite.TestSuite, additionalArgs []string) []*testrunner.TestRunner { - runners := []*testrunner.TestRunner{} - - for _, suite := range suites { - runners = append(runners, testrunner.New(suite, w.commandFlags.NumCPU, w.commandFlags.ParallelStream, w.commandFlags.Timeout, w.commandFlags.GoOpts, additionalArgs)) - } - - return runners -} - -func (w *SpecWatcher) WatchSuites(args []string, additionalArgs []string) { - suites, _ := findSuites(args, w.commandFlags.Recurse, w.commandFlags.SkipPackage, false) - - if len(suites) == 0 { - complainAndQuit("Found no test suites") - } - - fmt.Printf("Identified %d test %s. Locating dependencies to a depth of %d (this may take a while)...\n", len(suites), pluralizedWord("suite", "suites", len(suites)), w.commandFlags.Depth) - deltaTracker := watch.NewDeltaTracker(w.commandFlags.Depth, regexp.MustCompile(w.commandFlags.WatchRegExp)) - delta, errors := deltaTracker.Delta(suites) - - fmt.Printf("Watching %d %s:\n", len(delta.NewSuites), pluralizedWord("suite", "suites", len(delta.NewSuites))) - for _, suite := range delta.NewSuites { - fmt.Println(" " + suite.Description()) - } - - for suite, err := range errors { - fmt.Printf("Failed to watch %s: %s\n", suite.PackageName, err) - } - - if len(suites) == 1 { - runners := w.runnersForSuites(suites, additionalArgs) - w.suiteRunner.RunSuites(runners, w.commandFlags.NumCompilers, true, nil) - runners[0].CleanUp() - } - - ticker := time.NewTicker(time.Second) - - for { - select { - case <-ticker.C: - suites, _ := findSuites(args, w.commandFlags.Recurse, w.commandFlags.SkipPackage, false) - delta, _ := deltaTracker.Delta(suites) - coloredStream := colorable.NewColorableStdout() - - suitesToRun := []testsuite.TestSuite{} - - if len(delta.NewSuites) > 0 { - fmt.Fprintf(coloredStream, greenColor+"Detected %d new %s:\n"+defaultStyle, len(delta.NewSuites), pluralizedWord("suite", "suites", len(delta.NewSuites))) - for _, suite := range delta.NewSuites { - suitesToRun = append(suitesToRun, suite.Suite) - fmt.Fprintln(coloredStream, " "+suite.Description()) - } - } - - modifiedSuites := delta.ModifiedSuites() - if len(modifiedSuites) > 0 { - fmt.Fprintln(coloredStream, greenColor+"\nDetected changes in:"+defaultStyle) - for _, pkg := range delta.ModifiedPackages { - fmt.Fprintln(coloredStream, " "+pkg) - } - fmt.Fprintf(coloredStream, greenColor+"Will run %d %s:\n"+defaultStyle, len(modifiedSuites), pluralizedWord("suite", "suites", len(modifiedSuites))) - for _, suite := range modifiedSuites { - suitesToRun = append(suitesToRun, suite.Suite) - fmt.Fprintln(coloredStream, " "+suite.Description()) - } - fmt.Fprintln(coloredStream, "") - } - - if len(suitesToRun) > 0 { - w.UpdateSeed() - w.ComputeSuccinctMode(len(suitesToRun)) - runners := w.runnersForSuites(suitesToRun, additionalArgs) - result, _ := w.suiteRunner.RunSuites(runners, w.commandFlags.NumCompilers, true, func(suite testsuite.TestSuite) { - deltaTracker.WillRun(suite) - }) - for _, runner := range runners { - runner.CleanUp() - } - if !w.interruptHandler.WasInterrupted() { - color := redColor - if result.Passed { - color = greenColor - } - fmt.Fprintln(coloredStream, color+"\nDone. Resuming watch..."+defaultStyle) - } - } - - case <-w.interruptHandler.C: - return - } - } -} - -func (w *SpecWatcher) ComputeSuccinctMode(numSuites int) { - if config.DefaultReporterConfig.Verbose { - config.DefaultReporterConfig.Succinct = false - return - } - - if w.commandFlags.wasSet("succinct") { - return - } - - if numSuites == 1 { - config.DefaultReporterConfig.Succinct = false - } - - if numSuites > 1 { - config.DefaultReporterConfig.Succinct = true - } -} - -func (w *SpecWatcher) UpdateSeed() { - if !w.commandFlags.wasSet("seed") { - config.GinkgoConfig.RandomSeed = time.Now().Unix() - } -} diff --git a/vendor/modules.txt b/vendor/modules.txt index 1733ca65a81d..cdddca421b7d 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -88,13 +88,6 @@ github.com/nxadm/tail/winfile ## explicit github.com/onsi/ginkgo github.com/onsi/ginkgo/config -github.com/onsi/ginkgo/ginkgo -github.com/onsi/ginkgo/ginkgo/convert -github.com/onsi/ginkgo/ginkgo/interrupthandler -github.com/onsi/ginkgo/ginkgo/nodot -github.com/onsi/ginkgo/ginkgo/testrunner -github.com/onsi/ginkgo/ginkgo/testsuite -github.com/onsi/ginkgo/ginkgo/watch github.com/onsi/ginkgo/internal/codelocation github.com/onsi/ginkgo/internal/containernode github.com/onsi/ginkgo/internal/failer From 3d628a1f65b3f6a803cdaabed7173464db6add45 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Tue, 9 Feb 2021 17:14:17 -0500 Subject: [PATCH 08/20] cli: clean up scheme references --- control-plane-operator/main.go | 25 ++----------- .../controllers/infrastatus/setup.go | 10 ++---- hypershift-operator/main.go | 30 +++------------- internal/cmd/install/install.go | 36 +------------------ 4 files changed, 9 insertions(+), 92 deletions(-) diff --git a/control-plane-operator/main.go b/control-plane-operator/main.go index e1d0ab7e1209..9eb2d28eb63d 100644 --- a/control-plane-operator/main.go +++ b/control-plane-operator/main.go @@ -8,25 +8,17 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" - capiaws "sigs.k8s.io/cluster-api-provider-aws/api/v1alpha3" "sigs.k8s.io/controller-runtime/pkg/client" - configv1 "github.com/openshift/api/config/v1" - operatorv1 "github.com/openshift/api/operator/v1" - routev1 "github.com/openshift/api/route/v1" - securityv1 "github.com/openshift/api/security/v1" "github.com/spf13/cobra" appsv1client "k8s.io/client-go/kubernetes/typed/apps/v1" - "k8s.io/apimachinery/pkg/runtime" - clientgoscheme "k8s.io/client-go/kubernetes/scheme" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" - hyperv1 "openshift.io/hypershift/api/v1alpha1" + hyperapi "openshift.io/hypershift/api" "openshift.io/hypershift/control-plane-operator/controllers/hostedcontrolplane" "openshift.io/hypershift/control-plane-operator/releaseinfo" - capiv1 "sigs.k8s.io/cluster-api/api/v1alpha4" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/log/zap" @@ -34,22 +26,9 @@ import ( ) var ( - scheme = runtime.NewScheme() setupLog = ctrl.Log.WithName("setup") ) -func init() { - capiaws.AddToScheme(scheme) - clientgoscheme.AddToScheme(scheme) - hyperv1.AddToScheme(scheme) - capiv1.AddToScheme(scheme) - configv1.AddToScheme(scheme) - securityv1.AddToScheme(scheme) - operatorv1.AddToScheme(scheme) - routev1.AddToScheme(scheme) - // +kubebuilder:scaffold:scheme -} - func main() { cmd := &cobra.Command{ Use: "control-plane-operator", @@ -89,7 +68,7 @@ func NewStartCommand() *cobra.Command { ctrl.SetLogger(zap.New(zap.UseDevMode(true))) mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ - Scheme: scheme, + Scheme: hyperapi.Scheme, MetricsBindAddress: metricsAddr, Port: 9443, LeaderElection: enableLeaderElection, diff --git a/hosted-cluster-config-operator/controllers/infrastatus/setup.go b/hosted-cluster-config-operator/controllers/infrastatus/setup.go index dbdff76bd0e3..7c8d5c287fb8 100644 --- a/hosted-cluster-config-operator/controllers/infrastatus/setup.go +++ b/hosted-cluster-config-operator/controllers/infrastatus/setup.go @@ -13,6 +13,7 @@ import ( configv1 "github.com/openshift/api/config/v1" + hyperapi "openshift.io/hypershift/api" "openshift.io/hypershift/hosted-cluster-config-operator/operator" ) @@ -21,16 +22,9 @@ const ( ) var ( - configScheme = runtime.NewScheme() - configCodecs = serializer.NewCodecFactory(configScheme) + configCodecs = serializer.NewCodecFactory(hyperapi.Scheme) ) -func init() { - if err := configv1.AddToScheme(configScheme); err != nil { - panic(err) - } -} - func Setup(cfg *operator.HostedClusterConfigOperatorConfig) error { infrastructures := cfg.TargetConfigInformers().Config().V1().Infrastructures() sourceInfraConfigMap, err := cfg.KubeClient().CoreV1().ConfigMaps(cfg.Namespace()).Get(context.TODO(), infrastructureConfigMap, metav1.GetOptions{}) diff --git a/hypershift-operator/main.go b/hypershift-operator/main.go index adc35507b8ed..b222f16b3db1 100644 --- a/hypershift-operator/main.go +++ b/hypershift-operator/main.go @@ -21,27 +21,18 @@ import ( "fmt" "os" + "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" appsv1client "k8s.io/client-go/kubernetes/typed/apps/v1" - "k8s.io/client-go/rest" - capiaws "sigs.k8s.io/cluster-api-provider-aws/api/v1alpha3" - - configv1 "github.com/openshift/api/config/v1" - operatorv1 "github.com/openshift/api/operator/v1" - routev1 "github.com/openshift/api/route/v1" - securityv1 "github.com/openshift/api/security/v1" - "github.com/spf13/cobra" - "k8s.io/apimachinery/pkg/runtime" - clientgoscheme "k8s.io/client-go/kubernetes/scheme" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" + "k8s.io/client-go/rest" - hyperv1 "openshift.io/hypershift/api/v1alpha1" + hyperapi "openshift.io/hypershift/api" "openshift.io/hypershift/hypershift-operator/controllers/externalinfracluster" "openshift.io/hypershift/hypershift-operator/controllers/hostedcluster" "openshift.io/hypershift/hypershift-operator/controllers/nodepool" - capiv1 "sigs.k8s.io/cluster-api/api/v1alpha4" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/client" @@ -50,22 +41,9 @@ import ( ) var ( - scheme = runtime.NewScheme() setupLog = ctrl.Log.WithName("setup") ) -func init() { - capiaws.AddToScheme(scheme) - clientgoscheme.AddToScheme(scheme) - hyperv1.AddToScheme(scheme) - capiv1.AddToScheme(scheme) - configv1.AddToScheme(scheme) - securityv1.AddToScheme(scheme) - operatorv1.AddToScheme(scheme) - routev1.AddToScheme(scheme) - // +kubebuilder:scaffold:scheme -} - func main() { cmd := &cobra.Command{ Use: "hypershift-operator", @@ -105,7 +83,7 @@ func NewStartCommand() *cobra.Command { ctrl.SetLogger(zap.New(zap.UseDevMode(true))) mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ - Scheme: scheme, + Scheme: hyperapi.Scheme, MetricsBindAddress: metricsAddr, Port: 9443, LeaderElection: enableLeaderElection, diff --git a/internal/cmd/install/install.go b/internal/cmd/install/install.go index 11bbbc52876b..89e3318c43d1 100644 --- a/internal/cmd/install/install.go +++ b/internal/cmd/install/install.go @@ -20,47 +20,13 @@ import ( "fmt" "os" - configv1 "github.com/openshift/api/config/v1" - operatorv1 "github.com/openshift/api/operator/v1" - routev1 "github.com/openshift/api/route/v1" - securityv1 "github.com/openshift/api/security/v1" "github.com/spf13/cobra" - corev1 "k8s.io/api/core/v1" - rbacv1 "k8s.io/api/rbac/v1" - apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/serializer/json" - clientgoscheme "k8s.io/client-go/kubernetes/scheme" - capiaws "sigs.k8s.io/cluster-api-provider-aws/api/v1alpha3" - capiv1 "sigs.k8s.io/cluster-api/api/v1alpha4" hyperapi "openshift.io/hypershift/api" - hyperv1 "openshift.io/hypershift/api/v1alpha1" "openshift.io/hypershift/internal/cmd/install/assets" ) -var ( - scheme = runtime.NewScheme() - yamlSerializer = json.NewSerializerWithOptions( - json.DefaultMetaFactory, scheme, scheme, - json.SerializerOptions{Yaml: true, Pretty: true, Strict: true}, - ) -) - -func init() { - capiaws.AddToScheme(scheme) - clientgoscheme.AddToScheme(scheme) - hyperv1.AddToScheme(scheme) - capiv1.AddToScheme(scheme) - configv1.AddToScheme(scheme) - securityv1.AddToScheme(scheme) - operatorv1.AddToScheme(scheme) - routev1.AddToScheme(scheme) - rbacv1.AddToScheme(scheme) - corev1.AddToScheme(scheme) - apiextensionsv1.AddToScheme(scheme) -} - type Options struct { Namespace string HyperShiftImage string @@ -84,7 +50,7 @@ func NewCommand() *cobra.Command { objects = append(objects, clusterAPIManifests()...) for _, object := range objects { - err := yamlSerializer.Encode(object, os.Stdout) + err := hyperapi.YamlSerializer.Encode(object, os.Stdout) if err != nil { panic(err) } From 0cf816abf88fba53851bd98b4b064c7b0e222c22 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 11:59:10 -0500 Subject: [PATCH 09/20] cli: move command code to top level cmd directory --- Makefile | 10 +++--- api/scheme.go | 8 ++++- api/version.go | 3 +- {internal/cmd => cmd}/cluster/cluster.go | 2 +- .../cmd => cmd}/cluster/example/example.go | 0 .../cmd => cmd}/install/assets/bindata.go | 36 +++++++++---------- .../cluster.x-k8s.io_clusters.yaml | 0 .../cluster.x-k8s.io_machinedeployments.yaml | 0 .../cluster.x-k8s.io_machinehealthchecks.yaml | 0 .../cluster.x-k8s.io_machines.yaml | 0 .../cluster.x-k8s.io_machinesets.yaml | 0 ...tructure.cluster.x-k8s.io_awsclusters.yaml | 0 ...ture.cluster.x-k8s.io_awsmachinepools.yaml | 0 ...tructure.cluster.x-k8s.io_awsmachines.yaml | 0 ....cluster.x-k8s.io_awsmachinetemplates.yaml | 0 ...e.cluster.x-k8s.io_awsmanagedclusters.yaml | 0 ...uster.x-k8s.io_awsmanagedmachinepools.yaml | 0 .../cmd => cmd}/install/assets/cluster_api.go | 0 ...ft.openshift.io_externalinfraclusters.yaml | 0 ...ypershift.openshift.io_hostedclusters.yaml | 0 ...hift.openshift.io_hostedcontrolplanes.yaml | 0 .../hypershift.openshift.io_nodepools.yaml | 0 .../install/assets/hypershift_operator.go | 0 {internal/cmd => cmd}/install/assets/util.go | 0 {internal/cmd => cmd}/install/install.go | 2 +- main.go | 4 +-- 26 files changed, 36 insertions(+), 29 deletions(-) rename {internal/cmd => cmd}/cluster/cluster.go (84%) rename {internal/cmd => cmd}/cluster/example/example.go (100%) rename {internal/cmd => cmd}/install/assets/bindata.go (99%) rename {internal/cmd => cmd}/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml (100%) rename {internal/cmd => cmd}/install/assets/cluster_api.go (100%) rename {internal/cmd => cmd}/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml (100%) rename {internal/cmd => cmd}/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml (100%) rename {internal/cmd => cmd}/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml (100%) rename {internal/cmd => cmd}/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml (100%) rename {internal/cmd => cmd}/install/assets/hypershift_operator.go (100%) rename {internal/cmd => cmd}/install/assets/util.go (100%) rename {internal/cmd => cmd}/install/install.go (98%) diff --git a/Makefile b/Makefile index c2e8bd47b3eb..8a0ceba4ab5b 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ verify: build fmt vet # Generate Kube manifests (e.g. CRDs) .PHONY: hypershift-operator-manifests hypershift-operator-manifests: - $(CONTROLLER_GEN) $(CRD_OPTIONS) paths="./..." output:crd:artifacts:config=internal/cmd/install/assets/hypershift-operator + $(CONTROLLER_GEN) $(CRD_OPTIONS) paths="./..." output:crd:artifacts:config=cmd/install/assets/hypershift-operator # Build hypershift-operator binary .PHONY: hypershift-operator @@ -70,11 +70,11 @@ hosted-cluster-config-operator: .PHONY: hypershift hypershift: $(BINDATA) -mode 420 -modtime 1 -pkg assets \ - -o ./internal/cmd/install/assets/bindata.go \ - --prefix internal/cmd/install/assets \ + -o ./cmd/install/assets/bindata.go \ + --prefix cmd/install/assets \ --ignore bindata.go \ - ./internal/cmd/install/assets/... - gofmt -s -w ./internal/cmd/install/assets/bindata.go + ./cmd/install/assets/... + gofmt -s -w ./cmd/install/assets/bindata.go $(GO_BUILD_RECIPE) -o bin/hypershift . diff --git a/api/scheme.go b/api/scheme.go index 8b40fe20c855..f0ca61d7a6a3 100644 --- a/api/scheme.go +++ b/api/scheme.go @@ -18,7 +18,13 @@ import ( ) var ( - Scheme = runtime.NewScheme() + Scheme = runtime.NewScheme() + // TODO: Even though an object typer is specified here, serialized objects + // are not always getting their TypeMeta set unless explicitly initialized + // on the variable declarations. + // Investigate https://github.com/kubernetes/cli-runtime/blob/master/pkg/printers/typesetter.go + // as a possible solution. + // See also: https://github.com/openshift/hive/blob/master/contrib/pkg/createcluster/create.go#L937-L954 YamlSerializer = json.NewSerializerWithOptions( json.DefaultMetaFactory, Scheme, Scheme, json.SerializerOptions{Yaml: true, Pretty: true, Strict: true}, diff --git a/api/version.go b/api/version.go index 3151b63cafa5..4180fff4f2da 100644 --- a/api/version.go +++ b/api/version.go @@ -1,7 +1,8 @@ package api var ( - // TODO: Is there any way to meaningfully bake this through ldflags? + // TODO: This goes away when control-plane-operator becomes another component + // in the OCP payload. HyperShiftImage = "registry.ci.openshift.org/hypershift/hypershift:latest" // OCPReleaseImage is the latest compatible OCP release, used for defaulting. diff --git a/internal/cmd/cluster/cluster.go b/cmd/cluster/cluster.go similarity index 84% rename from internal/cmd/cluster/cluster.go rename to cmd/cluster/cluster.go index 586e090d500f..842082076389 100644 --- a/internal/cmd/cluster/cluster.go +++ b/cmd/cluster/cluster.go @@ -3,7 +3,7 @@ package cluster import ( "github.com/spf13/cobra" - "openshift.io/hypershift/internal/cmd/cluster/example" + "openshift.io/hypershift/cmd/cluster/example" ) func NewCommand() *cobra.Command { diff --git a/internal/cmd/cluster/example/example.go b/cmd/cluster/example/example.go similarity index 100% rename from internal/cmd/cluster/example/example.go rename to cmd/cluster/example/example.go diff --git a/internal/cmd/install/assets/bindata.go b/cmd/install/assets/bindata.go similarity index 99% rename from internal/cmd/install/assets/bindata.go rename to cmd/install/assets/bindata.go index fca725ca7778..4d8d951ab7e9 100644 --- a/internal/cmd/install/assets/bindata.go +++ b/cmd/install/assets/bindata.go @@ -1,23 +1,23 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: -// internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml (25.281kB) -// internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml (49.917kB) -// internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml (13.35kB) -// internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml (35.413kB) -// internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml (44.842kB) -// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml (49.873kB) -// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml (20.329kB) -// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml (33.445kB) -// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml (28.198kB) -// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml (4.268kB) -// internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml (10.107kB) -// internal/cmd/install/assets/cluster_api.go (3.319kB) -// internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml (2.916kB) -// internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml (4.157kB) -// internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml (4.494kB) -// internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml (5.227kB) -// internal/cmd/install/assets/hypershift_operator.go (6.975kB) -// internal/cmd/install/assets/util.go (548B) +// cmd/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml (25.281kB) +// cmd/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml (49.917kB) +// cmd/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml (13.35kB) +// cmd/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml (35.413kB) +// cmd/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml (44.842kB) +// cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml (49.873kB) +// cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml (20.329kB) +// cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml (33.445kB) +// cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml (28.198kB) +// cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml (4.268kB) +// cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml (10.107kB) +// cmd/install/assets/cluster_api.go (3.319kB) +// cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml (2.916kB) +// cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml (4.157kB) +// cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml (4.494kB) +// cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml (5.227kB) +// cmd/install/assets/hypershift_operator.go (6.975kB) +// cmd/install/assets/util.go (548B) package assets diff --git a/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml b/cmd/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml rename to cmd/install/assets/cluster-api/cluster.x-k8s.io_clusters.yaml diff --git a/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml b/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml rename to cmd/install/assets/cluster-api/cluster.x-k8s.io_machinedeployments.yaml diff --git a/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml b/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml rename to cmd/install/assets/cluster-api/cluster.x-k8s.io_machinehealthchecks.yaml diff --git a/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml b/cmd/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml rename to cmd/install/assets/cluster-api/cluster.x-k8s.io_machines.yaml diff --git a/internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml b/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml rename to cmd/install/assets/cluster-api/cluster.x-k8s.io_machinesets.yaml diff --git a/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml b/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml rename to cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsclusters.yaml diff --git a/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml b/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml rename to cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml diff --git a/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml b/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml rename to cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachines.yaml diff --git a/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml b/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml rename to cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml diff --git a/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml b/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml rename to cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml diff --git a/internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml b/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml similarity index 100% rename from internal/cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml rename to cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml diff --git a/internal/cmd/install/assets/cluster_api.go b/cmd/install/assets/cluster_api.go similarity index 100% rename from internal/cmd/install/assets/cluster_api.go rename to cmd/install/assets/cluster_api.go diff --git a/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml b/cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml similarity index 100% rename from internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml rename to cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml diff --git a/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml b/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml similarity index 100% rename from internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml rename to cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml diff --git a/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml b/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml similarity index 100% rename from internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml rename to cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml diff --git a/internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml b/cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml similarity index 100% rename from internal/cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml rename to cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml diff --git a/internal/cmd/install/assets/hypershift_operator.go b/cmd/install/assets/hypershift_operator.go similarity index 100% rename from internal/cmd/install/assets/hypershift_operator.go rename to cmd/install/assets/hypershift_operator.go diff --git a/internal/cmd/install/assets/util.go b/cmd/install/assets/util.go similarity index 100% rename from internal/cmd/install/assets/util.go rename to cmd/install/assets/util.go diff --git a/internal/cmd/install/install.go b/cmd/install/install.go similarity index 98% rename from internal/cmd/install/install.go rename to cmd/install/install.go index 89e3318c43d1..ac1529df6ae5 100644 --- a/internal/cmd/install/install.go +++ b/cmd/install/install.go @@ -24,7 +24,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" hyperapi "openshift.io/hypershift/api" - "openshift.io/hypershift/internal/cmd/install/assets" + "openshift.io/hypershift/cmd/install/assets" ) type Options struct { diff --git a/main.go b/main.go index 7af0bd865f78..56c184a2cc70 100644 --- a/main.go +++ b/main.go @@ -22,8 +22,8 @@ import ( "github.com/spf13/cobra" - clustercmd "openshift.io/hypershift/internal/cmd/cluster" - installcmd "openshift.io/hypershift/internal/cmd/install" + clustercmd "openshift.io/hypershift/cmd/cluster" + installcmd "openshift.io/hypershift/cmd/install" ) func main() { From 169ab6a86404c0cccd234c0ca2d6b2b12edbe29a Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 12:01:29 -0500 Subject: [PATCH 10/20] cli: add SSH key default for commands that use it --- cmd/cluster/cluster.go | 4 ---- cmd/cluster/example/example.go | 3 ++- test/e2e/e2e_suite_test.go | 4 +++- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/cmd/cluster/cluster.go b/cmd/cluster/cluster.go index 842082076389..2b5a2dade3ca 100644 --- a/cmd/cluster/cluster.go +++ b/cmd/cluster/cluster.go @@ -12,10 +12,6 @@ func NewCommand() *cobra.Command { Short: "Commands for working with HyperShift clusters", } - cmd.Run = func(cmd *cobra.Command, args []string) { - - } - cmd.AddCommand(example.NewCommand()) return cmd diff --git a/cmd/cluster/example/example.go b/cmd/cluster/example/example.go index ffc5604c13e1..5dc325d04194 100644 --- a/cmd/cluster/example/example.go +++ b/cmd/cluster/example/example.go @@ -4,6 +4,7 @@ import ( "fmt" "io/ioutil" "os" + "path/filepath" "github.com/spf13/cobra" @@ -33,7 +34,7 @@ func NewCommand() *cobra.Command { cmd.Flags().StringVar(&opts.ReleaseImage, "release-image", hyperapi.OCPReleaseImage, "The OCP release image for the cluster") cmd.Flags().StringVar(&opts.PullSecretFile, "pull-secret", "", "Path to a pull secret") cmd.Flags().StringVar(&opts.AWSCredentialsFile, "aws-creds", "", "Path to an AWS credentials file") - cmd.Flags().StringVar(&opts.SSHKeyFile, "ssh-key", "", "Path to an SSH key file") + cmd.Flags().StringVar(&opts.SSHKeyFile, "ssh-key", filepath.Join(os.Getenv("HOME"), ".ssh", "id_rsa.pub"), "Path to an SSH key file") cmd.Run = func(cmd *cobra.Command, args []string) { pullSecret, err := ioutil.ReadFile(opts.PullSecretFile) diff --git a/test/e2e/e2e_suite_test.go b/test/e2e/e2e_suite_test.go index c21192c06a98..697673ed21e1 100644 --- a/test/e2e/e2e_suite_test.go +++ b/test/e2e/e2e_suite_test.go @@ -4,6 +4,8 @@ package e2e import ( "flag" + "os" + "path/filepath" "testing" . "github.com/onsi/ginkgo" @@ -31,7 +33,7 @@ type QuickStartSpecOptions struct { func init() { flag.StringVar(&quickStartSpecOptions.AWSCredentialsFile, "e2e.quick-start.aws-credentials-file", "", "path to AWS credentials") flag.StringVar(&quickStartSpecOptions.PullSecretFile, "e2e.quick-start.pull-secret-file", "", "path to pull secret") - flag.StringVar(&quickStartSpecOptions.SSHKeyFile, "e2e.quick-start.ssh-key-file", "", "path to SSH public key") + flag.StringVar(&quickStartSpecOptions.SSHKeyFile, "e2e.quick-start.ssh-key-file", filepath.Join(os.Getenv("HOME"), ".ssh", "id_rsa.pub"), "path to SSH public key") flag.StringVar(&quickStartSpecOptions.ReleaseImage, "e2e.quick-start.release-image", hyperapi.OCPReleaseImage, "OCP release image to test") } From a029b50d242990a64fc62ec27cfdf548b949e8a8 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 12:06:03 -0500 Subject: [PATCH 11/20] cli: rename 'cluster example' command to 'create cluster' --- README.md | 2 +- cmd/cluster/cluster.go | 18 ------------------ .../example.go => create/cluster/cluster.go} | 6 +++--- cmd/create/create.go | 18 ++++++++++++++++++ main.go | 4 ++-- 5 files changed, 24 insertions(+), 24 deletions(-) delete mode 100644 cmd/cluster/cluster.go rename cmd/{cluster/example/example.go => create/cluster/cluster.go} (95%) create mode 100644 cmd/create/create.go diff --git a/README.md b/README.md index 44794211037d..b16a01e5e93d 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Prerequisites: Install the example cluster: ```bash -$ bin/hypershift cluster example \ +$ bin/hypershift create cluster \ --pull-secret /my/pull-secret \ --aws-creds /my/aws-credentials \ --ssh-key /my/ssh-public-key | oc apply -f - diff --git a/cmd/cluster/cluster.go b/cmd/cluster/cluster.go deleted file mode 100644 index 2b5a2dade3ca..000000000000 --- a/cmd/cluster/cluster.go +++ /dev/null @@ -1,18 +0,0 @@ -package cluster - -import ( - "github.com/spf13/cobra" - - "openshift.io/hypershift/cmd/cluster/example" -) - -func NewCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "cluster", - Short: "Commands for working with HyperShift clusters", - } - - cmd.AddCommand(example.NewCommand()) - - return cmd -} diff --git a/cmd/cluster/example/example.go b/cmd/create/cluster/cluster.go similarity index 95% rename from cmd/cluster/example/example.go rename to cmd/create/cluster/cluster.go index 5dc325d04194..e01f5637dd2a 100644 --- a/cmd/cluster/example/example.go +++ b/cmd/create/cluster/cluster.go @@ -1,4 +1,4 @@ -package example +package cluster import ( "fmt" @@ -23,8 +23,8 @@ type Options struct { func NewCommand() *cobra.Command { cmd := &cobra.Command{ - Use: "example", - Short: "Creates a working example HostedCluster resource", + Use: "cluster", + Short: "Creates basic functional HostedCluster resources", } var opts Options diff --git a/cmd/create/create.go b/cmd/create/create.go new file mode 100644 index 000000000000..25175743685a --- /dev/null +++ b/cmd/create/create.go @@ -0,0 +1,18 @@ +package create + +import ( + "github.com/spf13/cobra" + + "openshift.io/hypershift/cmd/create/cluster" +) + +func NewCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "create", + Short: "Commands for creating HyperShift resources", + } + + cmd.AddCommand(cluster.NewCommand()) + + return cmd +} diff --git a/main.go b/main.go index 56c184a2cc70..342fd89aa530 100644 --- a/main.go +++ b/main.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/cobra" - clustercmd "openshift.io/hypershift/cmd/cluster" + createcmd "openshift.io/hypershift/cmd/create" installcmd "openshift.io/hypershift/cmd/install" ) @@ -35,7 +35,7 @@ func main() { }, } cmd.AddCommand(installcmd.NewCommand()) - cmd.AddCommand(clustercmd.NewCommand()) + cmd.AddCommand(createcmd.NewCommand()) if err := cmd.Execute(); err != nil { fmt.Fprintf(os.Stderr, "%v\n", err) From ed752d426ac661ac38d717e7dbc8964d202832c9 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 12:13:02 -0500 Subject: [PATCH 12/20] cli: add a simple development option for install --- cmd/install/assets/hypershift_operator.go | 3 ++- cmd/install/install.go | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/cmd/install/assets/hypershift_operator.go b/cmd/install/assets/hypershift_operator.go index e4df6be41472..d2701757a622 100644 --- a/cmd/install/assets/hypershift_operator.go +++ b/cmd/install/assets/hypershift_operator.go @@ -29,6 +29,7 @@ type HyperShiftOperatorDeployment struct { Namespace *corev1.Namespace OperatorImage string ServiceAccount *corev1.ServiceAccount + Replicas int32 } func (o HyperShiftOperatorDeployment) Build() *appsv1.Deployment { @@ -42,7 +43,7 @@ func (o HyperShiftOperatorDeployment) Build() *appsv1.Deployment { Namespace: o.Namespace.Name, }, Spec: appsv1.DeploymentSpec{ - Replicas: int32Ptr(1), + Replicas: &o.Replicas, Selector: &metav1.LabelSelector{ MatchLabels: map[string]string{ "name": "operator", diff --git a/cmd/install/install.go b/cmd/install/install.go index ac1529df6ae5..cecd464e73c6 100644 --- a/cmd/install/install.go +++ b/cmd/install/install.go @@ -28,8 +28,10 @@ import ( ) type Options struct { - Namespace string - HyperShiftImage string + Namespace string + HyperShiftImage string + HyperShiftOperatorReplicas int32 + Development bool } func NewCommand() *cobra.Command { @@ -42,8 +44,16 @@ func NewCommand() *cobra.Command { cmd.Flags().StringVar(&opts.Namespace, "namespace", "hypershift", "The namespace in which to install HyperShift") cmd.Flags().StringVar(&opts.HyperShiftImage, "hypershift-image", hyperapi.HyperShiftImage, "The HyperShift image to deploy") + cmd.Flags().BoolVar(&opts.Development, "development", false, "Enable tweaks to facilitate local development") cmd.Run = func(cmd *cobra.Command, args []string) { + switch { + case opts.Development: + opts.HyperShiftOperatorReplicas = 0 + default: + opts.HyperShiftOperatorReplicas = 1 + } + var objects []runtime.Object objects = append(objects, hyperShiftOperatorManifests(opts)...) @@ -81,6 +91,7 @@ func hyperShiftOperatorManifests(opts Options) []runtime.Object { Namespace: operatorNamespace, OperatorImage: opts.HyperShiftImage, ServiceAccount: operatorServiceAccount, + Replicas: opts.HyperShiftOperatorReplicas, }.Build() return []runtime.Object{ From 70162888feaa300651bce9e50d7273060b281794 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 12:34:01 -0500 Subject: [PATCH 13/20] cli: make install apply by default with a flag for render-only --- cmd/install/install.go | 57 +++++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/cmd/install/install.go b/cmd/install/install.go index cecd464e73c6..4cc30443cd18 100644 --- a/cmd/install/install.go +++ b/cmd/install/install.go @@ -17,14 +17,19 @@ limitations under the License. package install import ( + "bytes" + "context" "fmt" "os" "github.com/spf13/cobra" - "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" hyperapi "openshift.io/hypershift/api" "openshift.io/hypershift/cmd/install/assets" + + cr "sigs.k8s.io/controller-runtime" + crclient "sigs.k8s.io/controller-runtime/pkg/client" ) type Options struct { @@ -32,6 +37,7 @@ type Options struct { HyperShiftImage string HyperShiftOperatorReplicas int32 Development bool + Render bool } func NewCommand() *cobra.Command { @@ -45,6 +51,7 @@ func NewCommand() *cobra.Command { cmd.Flags().StringVar(&opts.Namespace, "namespace", "hypershift", "The namespace in which to install HyperShift") cmd.Flags().StringVar(&opts.HyperShiftImage, "hypershift-image", hyperapi.HyperShiftImage, "The HyperShift image to deploy") cmd.Flags().BoolVar(&opts.Development, "development", false, "Enable tweaks to facilitate local development") + cmd.Flags().BoolVar(&opts.Render, "render", false, "Render output as YAML to stdout instead of applying") cmd.Run = func(cmd *cobra.Command, args []string) { switch { @@ -54,24 +61,56 @@ func NewCommand() *cobra.Command { opts.HyperShiftOperatorReplicas = 1 } - var objects []runtime.Object + var objects []crclient.Object objects = append(objects, hyperShiftOperatorManifests(opts)...) objects = append(objects, clusterAPIManifests()...) - for _, object := range objects { - err := hyperapi.YamlSerializer.Encode(object, os.Stdout) + switch { + case opts.Render: + render(objects) + default: + err := apply(context.TODO(), objects) if err != nil { panic(err) } - fmt.Println("---") } } return cmd } -func hyperShiftOperatorManifests(opts Options) []runtime.Object { +func render(objects []crclient.Object) { + for _, object := range objects { + err := hyperapi.YamlSerializer.Encode(object, os.Stdout) + if err != nil { + panic(err) + } + fmt.Println("---") + } +} + +func apply(ctx context.Context, objects []crclient.Object) error { + client, err := crclient.New(cr.GetConfigOrDie(), crclient.Options{Scheme: hyperapi.Scheme}) + if err != nil { + return fmt.Errorf("failed to create kube client: %w", err) + } + for _, object := range objects { + var objectBytes bytes.Buffer + err := hyperapi.YamlSerializer.Encode(object, &objectBytes) + if err != nil { + return err + } + err = client.Patch(ctx, object, crclient.RawPatch(types.ApplyPatchType, objectBytes.Bytes()), crclient.ForceOwnership, crclient.FieldOwner("hypershift")) + if err != nil { + return err + } + fmt.Printf("applied %s %s/%s\n", object.GetObjectKind().GroupVersionKind().Kind, object.GetNamespace(), object.GetName()) + } + return nil +} + +func hyperShiftOperatorManifests(opts Options) []crclient.Object { hostedClustersCRD := assets.HyperShiftHostedClustersCustomResourceDefinition{}.Build() nodePoolsCRD := assets.HyperShiftNodePoolsCustomResourceDefinition{}.Build() hostedControlPlanesCRD := assets.HyperShiftHostedControlPlaneCustomResourceDefinition{}.Build() @@ -94,7 +133,7 @@ func hyperShiftOperatorManifests(opts Options) []runtime.Object { Replicas: opts.HyperShiftOperatorReplicas, }.Build() - return []runtime.Object{ + return []crclient.Object{ hostedClustersCRD, nodePoolsCRD, hostedControlPlanesCRD, @@ -107,7 +146,7 @@ func hyperShiftOperatorManifests(opts Options) []runtime.Object { } } -func clusterAPIManifests() []runtime.Object { +func clusterAPIManifests() []crclient.Object { clustersCRD := assets.ClusterAPIClustersCustomResourceDefinition{}.Build() machineDeploymentsCRD := assets.ClusterAPIMachineDeploymentsCustomResourceDefinition{}.Build() machineHealthChecksCRD := assets.ClusterAPIMachineHealthChecksCustomResourceDefinition{}.Build() @@ -120,7 +159,7 @@ func clusterAPIManifests() []runtime.Object { awsManagedClustersCRD := assets.ClusterAPIAWSManagedClustersCustomResourceDefinition{}.Build() awsManagedMachinePoolsCRD := assets.ClusterAPIAWSManagedMachinePoolsCustomResourceDefinition{}.Build() - return []runtime.Object{ + return []crclient.Object{ clustersCRD, machineDeploymentsCRD, machineHealthChecksCRD, From cec184be555185ae1c1d0bd0337b58c1385b308b Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 13:10:55 -0500 Subject: [PATCH 14/20] cli: make create cluster apply by default with a flag for render-only --- api/fixtures/example.go | 7 ++--- cmd/create/cluster/cluster.go | 50 +++++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/api/fixtures/example.go b/api/fixtures/example.go index 768677fd3f27..db98d7e8bbcb 100644 --- a/api/fixtures/example.go +++ b/api/fixtures/example.go @@ -3,9 +3,10 @@ package fixtures import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" hyperv1 "openshift.io/hypershift/api/v1alpha1" + + crclient "sigs.k8s.io/controller-runtime/pkg/client" ) type ExampleResources struct { @@ -16,8 +17,8 @@ type ExampleResources struct { Cluster *hyperv1.HostedCluster } -func (o *ExampleResources) AsObjects() []runtime.Object { - return []runtime.Object{ +func (o *ExampleResources) AsObjects() []crclient.Object { + return []crclient.Object{ o.Namespace, o.SSHKey, o.PullSecret, diff --git a/cmd/create/cluster/cluster.go b/cmd/create/cluster/cluster.go index e01f5637dd2a..87f4705eaa11 100644 --- a/cmd/create/cluster/cluster.go +++ b/cmd/create/cluster/cluster.go @@ -1,15 +1,21 @@ package cluster import ( + "bytes" + "context" "fmt" "io/ioutil" "os" "path/filepath" "github.com/spf13/cobra" + "k8s.io/apimachinery/pkg/types" hyperapi "openshift.io/hypershift/api" apifixtures "openshift.io/hypershift/api/fixtures" + + cr "sigs.k8s.io/controller-runtime" + crclient "sigs.k8s.io/controller-runtime/pkg/client" ) type Options struct { @@ -19,6 +25,7 @@ type Options struct { PullSecretFile string AWSCredentialsFile string SSHKeyFile string + Render bool } func NewCommand() *cobra.Command { @@ -35,6 +42,7 @@ func NewCommand() *cobra.Command { cmd.Flags().StringVar(&opts.PullSecretFile, "pull-secret", "", "Path to a pull secret") cmd.Flags().StringVar(&opts.AWSCredentialsFile, "aws-creds", "", "Path to an AWS credentials file") cmd.Flags().StringVar(&opts.SSHKeyFile, "ssh-key", filepath.Join(os.Getenv("HOME"), ".ssh", "id_rsa.pub"), "Path to an SSH key file") + cmd.Flags().BoolVar(&opts.Render, "render", false, "Render output as YAML to stdout instead of applying") cmd.Run = func(cmd *cobra.Command, args []string) { pullSecret, err := ioutil.ReadFile(opts.PullSecretFile) @@ -50,23 +58,55 @@ func NewCommand() *cobra.Command { panic(err) } - example := apifixtures.ExampleOptions{ + exampleObjects := apifixtures.ExampleOptions{ Namespace: opts.Namespace, Name: opts.Name, ReleaseImage: opts.ReleaseImage, PullSecret: pullSecret, AWSCredentials: awsCredentials, SSHKey: sshKey, - }.Resources() + }.Resources().AsObjects() - for _, object := range example.AsObjects() { - err := hyperapi.YamlSerializer.Encode(object, os.Stdout) + switch { + case opts.Render: + render(exampleObjects) + default: + err := apply(context.TODO(), exampleObjects) if err != nil { panic(err) } - fmt.Println("---") } } return cmd } + +func render(objects []crclient.Object) { + for _, object := range objects { + err := hyperapi.YamlSerializer.Encode(object, os.Stdout) + if err != nil { + panic(err) + } + fmt.Println("---") + } +} + +func apply(ctx context.Context, objects []crclient.Object) error { + client, err := crclient.New(cr.GetConfigOrDie(), crclient.Options{Scheme: hyperapi.Scheme}) + if err != nil { + return fmt.Errorf("failed to create kube client: %w", err) + } + for _, object := range objects { + var objectBytes bytes.Buffer + err := hyperapi.YamlSerializer.Encode(object, &objectBytes) + if err != nil { + return err + } + err = client.Patch(ctx, object, crclient.RawPatch(types.ApplyPatchType, objectBytes.Bytes()), crclient.ForceOwnership, crclient.FieldOwner("hypershift")) + if err != nil { + return err + } + fmt.Printf("applied %s %s/%s\n", object.GetObjectKind().GroupVersionKind().Kind, object.GetNamespace(), object.GetName()) + } + return nil +} From 9c7dd156934ef970a1f3b58fb150047afff47fbc Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 13:15:55 -0500 Subject: [PATCH 15/20] cli: update docs --- HACKING.md | 13 +++++++------ README.md | 6 +++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/HACKING.md b/HACKING.md index aa905187f8a5..3051302d10cb 100644 --- a/HACKING.md +++ b/HACKING.md @@ -12,16 +12,17 @@ $ make build -3. Install HyperShift with the operator deployment scaled to zero so that it - doesn't conflict with your local operator process. +3. Install HyperShift in development mode which causes the operator deployment + to be deployment scaled to zero so that it doesn't conflict with your local + operator process. - TODO + $ bin/hypershift install --development 4. Run the HyperShift operator locally. $ bin/hypershift-operator run -### Run a custom image using the production profile +### Install HyperShift with a custom image 1. Build and push a custom image build to your own repository. @@ -29,7 +30,7 @@ 2. Install HyperShift using the custom image: - $ bin/hypershift install --hypershift-image quay.io/my/hypershift:latest | oc apply -f - + $ bin/hypershift install --hypershift-image quay.io/my/hypershift:latest ### Run the e2e tests @@ -40,7 +41,7 @@ $ bin/test-e2e -v -args --ginkgo.v --ginkgo.trace \ --e2e.quick-start.aws-credentials-file /my/aws-credentials \ --e2e.quick-start.pull-secret-file /my/pull-secret \ - --e2e.quick-start.ssh-key-file /my/public-ssh-key \ + --e2e.quick-start.ssh-key-file /my/public-ssh-key ### Visualize the Go dependency tree diff --git a/README.md b/README.md index b16a01e5e93d..c03a4e325ffa 100644 --- a/README.md +++ b/README.md @@ -15,13 +15,13 @@ Guest clustering for [OpenShift](https://openshift.io). Install HyperShift into the management cluster: ```bash -$ bin/hypershift install | oc apply -f - +$ bin/hypershift install ``` Remove HyperShift from the management cluster: ```bash -$ bin/hypershift install | oc delete -f - +$ bin/hypershift install --render | oc delete -f - ``` ### Create an example cluster @@ -38,7 +38,7 @@ Install the example cluster: $ bin/hypershift create cluster \ --pull-secret /my/pull-secret \ --aws-creds /my/aws-credentials \ - --ssh-key /my/ssh-public-key | oc apply -f - + --ssh-key /my/ssh-public-key ``` When the cluster is available, get the guest kubeconfig using: From c918ae05440d50d2c198b9c70beef2f1e054854b Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 13:21:38 -0500 Subject: [PATCH 16/20] cli: update docs --- HACKING.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/HACKING.md b/HACKING.md index 3051302d10cb..961fc5552c27 100644 --- a/HACKING.md +++ b/HACKING.md @@ -32,7 +32,7 @@ $ bin/hypershift install --hypershift-image quay.io/my/hypershift:latest -### Run the e2e tests +### Run the e2e tests with a compiled binary 1. Install HyperShift. 2. Run the tests. @@ -43,6 +43,16 @@ --e2e.quick-start.pull-secret-file /my/pull-secret \ --e2e.quick-start.ssh-key-file /my/public-ssh-key +### Run the e2e tests with the local source tree + +1. Install HyperShift. +2. Run the tests. + + $ go test -tags e2e -v ./test/e2e -args --ginkgo.v --ginkgo.trace \ + --e2e.quick-start.aws-credentials-file /my/aws-credentials \ + --e2e.quick-start.pull-secret-file /my/pull-secret \ + --e2e.quick-start.ssh-key-file /my/public-ssh-key + ### Visualize the Go dependency tree MacOS From 67854e65fe653c4edeb7b7d35f396f6593997746 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 13:32:06 -0500 Subject: [PATCH 17/20] cli: remove unused function --- cmd/install/assets/util.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cmd/install/assets/util.go b/cmd/install/assets/util.go index f93c9fc3950d..9fe5f480fd7c 100644 --- a/cmd/install/assets/util.go +++ b/cmd/install/assets/util.go @@ -19,7 +19,3 @@ func mustCustomResourceDefinition(manifest io.Reader) *apiextensionsv1.CustomRes } return &o } - -func int32Ptr(i int32) *int32 { - return &i -} From 2ab0ba7212d8887799422b66bfadee4ffa5ee071 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 13:39:00 -0500 Subject: [PATCH 18/20] cli: exclude Go files from bindata generation --- Makefile | 6 +-- cmd/install/assets/bindata.go | 77 ++--------------------------------- 2 files changed, 7 insertions(+), 76 deletions(-) diff --git a/Makefile b/Makefile index 8a0ceba4ab5b..1e8d66462a73 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,7 @@ hypershift-operator: $(BINDATA) -mode 420 -modtime 1 -pkg assets \ -o ./hypershift-operator/controllers/hostedcluster/assets/bindata.go \ --prefix hypershift-operator/controllers/hostedcluster/assets \ - --ignore bindata.go \ + --ignore '.*\.go' \ ./hypershift-operator/controllers/hostedcluster/assets/... gofmt -s -w ./hypershift-operator/controllers/hostedcluster/assets/bindata.go @@ -56,7 +56,7 @@ control-plane-operator: $(BINDATA) -mode 420 -modtime 1 -pkg assets \ -o ./control-plane-operator/controllers/hostedcontrolplane/assets/bindata.go \ --prefix control-plane-operator/controllers/hostedcontrolplane/assets \ - --ignore bindata.go \ + --ignore '.*\.go' \ ./control-plane-operator/controllers/hostedcontrolplane/assets/... gofmt -s -w ./control-plane-operator/controllers/hostedcontrolplane/assets/bindata.go @@ -72,7 +72,7 @@ hypershift: $(BINDATA) -mode 420 -modtime 1 -pkg assets \ -o ./cmd/install/assets/bindata.go \ --prefix cmd/install/assets \ - --ignore bindata.go \ + --ignore '.*\.go' \ ./cmd/install/assets/... gofmt -s -w ./cmd/install/assets/bindata.go diff --git a/cmd/install/assets/bindata.go b/cmd/install/assets/bindata.go index 4d8d951ab7e9..5de1e591a5c9 100644 --- a/cmd/install/assets/bindata.go +++ b/cmd/install/assets/bindata.go @@ -11,13 +11,10 @@ // cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml (28.198kB) // cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml (4.268kB) // cmd/install/assets/cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml (10.107kB) -// cmd/install/assets/cluster_api.go (3.319kB) // cmd/install/assets/hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml (2.916kB) // cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedclusters.yaml (4.157kB) // cmd/install/assets/hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml (4.494kB) // cmd/install/assets/hypershift-operator/hypershift.openshift.io_nodepools.yaml (5.227kB) -// cmd/install/assets/hypershift_operator.go (6.975kB) -// cmd/install/assets/util.go (548B) package assets @@ -306,26 +303,6 @@ func clusterApiInfrastructureClusterXK8sIo_awsmanagedmachinepoolsYaml() (*asset, return a, nil } -var _cluster_apiGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\xd4\xcf\x8b\xe2\x30\x14\x07\xf0\xf3\xe6\xaf\x08\x3d\xb5\x0b\xb6\x78\xdb\x6b\x57\x0f\xbb\x87\x01\xd1\x01\x8f\x43\x48\x9f\x36\xb4\x4d\x42\x5e\xe2\x28\xe2\xff\x3e\xf4\xc7\x30\x38\xa2\xcd\xd8\x81\xa9\xb7\x90\x1f\xcf\x6f\x3e\x36\x4f\x33\x5e\xb0\x2d\x50\x86\x08\x16\x09\x11\x95\x56\xc6\x52\xa6\x05\xec\x2d\x48\x14\x4a\xe2\x6e\x4a\x83\xe2\x0f\xc6\x42\x25\x67\xf3\x13\xa6\x05\x82\xd9\x81\x49\x74\xb1\xad\xd7\xf0\x7c\x43\xb2\x9b\x06\x84\xd8\x83\x06\x3a\x2b\x1d\x5a\x30\xe9\xe2\x7f\x37\xc2\x99\x43\xab\xaa\x25\xa0\x72\x86\xc3\x1c\x36\x42\x0a\x2b\x94\xa4\x68\x8d\xe3\xf6\x78\x22\x64\xe3\x24\xa7\xa1\xfa\xc2\xe1\x88\xfe\x75\xa2\xcc\xc2\x88\xfe\xfe\x74\x85\xf8\xea\xef\x1d\xc9\x2f\x03\xd6\x19\x49\x2b\x87\xf6\xda\xb6\xb0\x5e\x4c\x6b\xa5\x25\xb0\x0c\x4c\x18\xf0\x36\x4b\xad\x90\x74\xe3\x78\x3f\x69\xa1\x5e\xba\x09\x8c\x0f\xac\x2a\x83\x28\x22\xa7\x0b\x88\x27\xc6\x73\x21\x61\x0e\xba\x54\x87\x0a\xa4\xbd\x8f\xc4\xbf\xcc\x68\x70\xaa\x36\x72\xf6\x11\xb9\x9f\xe9\x1f\xb0\xd2\xe6\xb3\x1c\x78\x31\xc8\xc9\xa7\xce\xd8\xa0\xf2\x26\x33\x6f\x32\xf7\x4b\x0d\xe2\x79\x18\x13\x0f\x88\x15\x0c\x7b\x52\xb7\xce\x8f\x8e\x03\x6e\x3e\xa2\x74\xbd\x1a\xd4\x77\x3d\xce\xff\x94\x88\x90\x1b\xc3\xda\xec\xce\x40\x7c\x01\xc4\x5e\xd1\xa3\x19\xa7\xeb\x55\xf7\xaf\x2f\x94\x2a\xef\x46\xf2\xa9\x31\x62\xa8\xee\x63\xd2\x75\x7c\x2f\xac\xa1\x50\x0f\x8c\xe4\x07\xf4\x0c\x95\x2e\x99\x1d\x0c\xd5\x5b\x67\xfc\x60\xf6\xfd\x0a\x7d\x70\x92\x6d\x21\x1b\xda\xae\x3c\xcb\x8c\x9a\xad\xb9\x81\x6f\xf3\x6a\x36\x7f\x4f\x0f\xf3\x2e\x35\x7e\xbd\x2b\x1d\xed\x2d\x00\x00\xff\xff\xbe\x04\x09\x8c\xf7\x0c\x00\x00") - -func cluster_apiGoBytes() ([]byte, error) { - return bindataRead( - _cluster_apiGo, - "cluster_api.go", - ) -} - -func cluster_apiGo() (*asset, error) { - bytes, err := cluster_apiGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "cluster_api.go", size: 3319, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x85, 0x17, 0xb2, 0xcd, 0xd2, 0xb7, 0x41, 0xf4, 0xc6, 0x1d, 0x96, 0x42, 0xf3, 0xf, 0xad, 0xe4, 0x28, 0x67, 0xc0, 0x24, 0x47, 0x63, 0x6a, 0x81, 0xd, 0x9c, 0x9f, 0xa, 0xda, 0xc6, 0x4a, 0x11}} - return a, nil -} - var _hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x56\x4d\x6f\x23\x37\x0f\xbe\xfb\x57\x10\xfb\x1e\xf2\x16\x88\xc7\xbb\xdd\x4b\xe1\xdb\xc2\x1b\xa0\x41\x3f\x36\x48\x82\x5c\x8a\x1e\x64\x0d\x3d\xc3\x46\x23\xa9\x14\xe5\x34\x2d\xfa\xdf\x0b\x4a\xe3\xaf\xd8\x0e\xd2\xa2\x9d\xd3\x88\x43\x51\x0f\x1f\x92\xcf\xc8\x44\x7a\x40\x4e\x14\xfc\x1c\x4c\x24\xfc\x4d\xd0\xeb\x2a\x35\x8f\xdf\xa4\x86\xc2\x6c\xfd\x61\xf2\x48\xbe\x9d\xc3\x22\x27\x09\xc3\x2d\xa6\x90\xd9\xe2\x67\x5c\x91\x27\xa1\xe0\x27\x03\x8a\x69\x8d\x98\xf9\x04\xc0\x78\x1f\xc4\xa8\x39\xe9\x12\xc0\x06\x2f\x1c\x9c\x43\x9e\x76\xe8\x9b\xc7\xbc\xc4\x65\x26\xd7\x22\x97\xe0\x9b\xa3\xd7\xef\x9b\x8f\xcd\xfb\x09\x80\x65\x2c\xdb\xef\x69\xc0\x24\x66\x88\x73\xf0\xd9\xb9\x09\x80\x37\x03\xce\x41\x01\xb2\x37\x8e\xfc\x8a\x8d\x75\x39\x09\x72\x6a\xfa\xe7\x88\x9c\x7a\x5a\x49\x13\x22\xfa\xfa\x46\x61\x92\x22\x5a\xc5\xd1\x71\xc8\x71\x0e\xe7\xdc\x6a\xf0\x0d\x62\x23\xd8\x05\xa6\xcd\x7a\x0a\xe3\x31\x53\x13\xa9\x58\x2a\x1f\x57\x23\x92\x6b\x45\xb2\xa8\x2e\xe5\xb3\xa3\x24\xdf\x9d\x75\xf9\x9e\x92\x14\xb7\xe8\x32\x1b\x77\x26\xa3\xe2\x91\xfa\xc0\xf2\xe3\x0e\xd9\x14\x90\xec\xee\x6d\x74\x22\xdf\x65\x67\xf8\x74\xa0\x09\x40\xb2\x21\xe2\x1c\x4a\x9c\x68\x2c\xb6\x13\x80\x91\xf7\x12\x77\x3a\x32\xbb\xfe\x60\x5c\xec\xcd\x87\x1a\xd5\xf6\x38\x98\x7a\x2c\x80\x92\xf5\xe9\xe6\xfa\xe1\xe3\xdd\x81\x19\xa0\xc5\x64\x99\xa2\x94\x1a\x9e\xca\x16\x28\x81\xf4\x08\x75\x23\xac\x02\x97\xe5\x49\xd7\x4f\x37\xd7\xdb\xc0\x91\x43\x44\x96\x6d\x11\xea\xb3\xd7\xac\x7b\xd6\x17\x30\x2e\x14\x69\xf5\x82\x56\xbb\x14\x2b\x84\x31\x67\x6c\xc7\xe4\x20\xac\x40\x7a\x4a\xc0\x18\x19\x13\xfa\xda\xb7\x6a\x36\x1e\xc2\xf2\x17\xb4\xd2\xc0\x1d\xb2\x6e\xd4\x5a\x64\xd7\x6a\x3b\xaf\x91\x05\x18\x6d\xe8\x3c\xfd\xbe\x8d\x96\x40\x42\x39\xc6\x19\xc1\x24\x40\xbe\x66\x08\x6b\xe3\x32\x5e\x82\xf1\x2d\x0c\xe6\x19\x18\x35\x2e\x64\xbf\x17\xa1\xb8\xa4\x06\x7e\x08\x8c\x40\x7e\x15\xe6\xd0\x8b\xc4\x34\x9f\xcd\x3a\x92\xcd\x20\xda\x30\x0c\xd9\x93\x3c\xcf\xca\x4c\xd1\x32\x4b\xe0\x34\x6b\x71\x8d\x6e\x96\xa8\x9b\x1a\xb6\x3d\x09\x5a\xc9\x8c\x33\x13\x69\x5a\xc0\xfa\x32\x8c\xcd\xd0\xfe\x8f\xc7\xd1\x4d\x17\x07\xe4\xc9\xb3\xb6\x47\x12\x26\xdf\xed\x7d\x28\x4d\xfe\x0a\xcb\xda\xe1\x5a\x5d\x33\x6e\xad\x59\xec\xc8\x54\x93\xf2\x71\x7b\x75\x77\x0f\x9b\xa3\x2b\xe1\x95\xdb\x9d\x6b\xda\xd1\xac\x14\x91\x5f\x21\x57\xcf\x15\x87\xa1\x44\x41\xdf\xc6\x40\x5e\xca\xc2\x3a\x42\x2f\x90\xf2\x72\x20\xd1\xfa\xfd\x9a\x31\x89\x56\xa0\x81\x45\x51\x20\x58\x22\xe4\xd8\x1a\xc1\xb6\x81\x6b\x0f\x0b\x33\xa0\x5b\x98\x84\xff\x39\xc9\xca\x66\x9a\x2a\x79\x6f\xa3\x79\x5f\x3c\x5f\x3a\x57\x9e\xf6\x3e\x6c\xe4\xec\x4c\x4d\x4e\x4d\xd5\x5d\x44\x7b\x30\x06\x2d\x26\x62\x6d\x5b\x31\x82\xda\xec\x67\x75\xec\xf5\x59\xac\xe2\x3e\xc4\x2c\x78\x8b\xd1\x91\x35\x47\x9f\x37\x79\xe8\x2c\x74\x2f\x82\x6e\xff\x0c\x37\xce\x78\xbc\x1a\xcb\x7b\x1c\xe1\x20\xc1\xc5\x89\x2d\x7b\x6d\x74\xd8\x29\x39\x61\xab\x43\x39\x96\x54\x65\x1d\x9e\x48\xfa\xda\x42\x35\x12\x44\x0d\xd5\x1c\x9d\x7a\x3e\x65\x7d\xfa\x90\x4e\x20\x3d\x42\xfb\x6d\x50\x1d\xa8\xa8\x74\x8b\xca\x2c\x04\x0f\x4f\x3d\xd9\x8a\xe2\xd3\xcd\x35\xa4\xd2\xf9\xea\xa7\x6f\xe4\xbb\x63\x34\x70\xbe\x7d\xb6\x80\x03\xbf\x05\xd2\x4d\xe0\x2d\x24\xdd\xf2\x8f\xe1\xac\x02\x0f\x46\x4a\x69\x3f\x7e\xfd\x0a\xe0\xd3\xa5\x87\x32\xb3\xda\x86\xc7\x98\xa7\x85\xab\x13\x66\xc5\x7b\xa6\xc1\x8e\x06\xa5\x1e\xd1\x1d\xfd\x28\x8e\x08\xb9\xb8\xff\xf2\xf9\x0b\xfc\xdf\xb8\x25\xb2\x84\xaf\xe6\x10\x43\xcc\x2a\xe1\x5b\x42\x54\xb8\xcb\xa5\x04\x55\x12\x52\x1e\x8a\x7a\xb0\x49\xc2\xb9\xa8\x00\xac\xc9\x80\x79\x4a\x90\xda\x47\xe0\xe0\x50\xbb\x67\x45\x0e\x2f\x21\x75\x97\xb0\x8e\xf6\x52\xa5\xca\xa3\xa4\xe6\xe2\x4c\x02\x27\xea\x7a\x9a\xa1\xe9\x98\xd6\x9b\xd4\x42\x8c\xe4\xf4\x77\xf5\xa2\x6c\x3a\x50\x8c\xb0\x2c\x4d\xf1\xef\x48\x06\xa3\x69\x9f\xcf\x09\xc5\x32\x04\x87\xe6\x0d\xc9\x1d\x19\x2b\xc2\x39\x08\x67\xac\x06\x09\x6c\x3a\xdc\xb7\xe4\xe5\xf6\x0f\xb8\x01\x30\x52\x04\x7f\xfc\x39\xd9\xb1\x65\xac\xc5\x28\xd8\xee\xdd\xbc\xea\x8d\xef\xdd\xbb\x83\x8b\x5b\x59\xda\xe0\x5b\xaa\xf7\x5d\xf8\xe9\xe7\x49\x3d\x18\xdb\x87\xcd\x05\x4b\x8d\x7f\x05\x00\x00\xff\xff\xef\xf4\xa0\x83\x64\x0b\x00\x00") func hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYamlBytes() ([]byte, error) { @@ -406,46 +383,6 @@ func hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml() (*asset, error) { return a, nil } -var _hypershift_operatorGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x59\xdf\x6f\xdb\xb6\x13\x7f\x96\xfe\x0a\x42\xf8\xa2\xb0\x8b\x46\x46\xbe\xdb\xc3\x60\x20\x0f\x6e\x9a\xae\xc1\x96\xd6\x88\x8b\x00\x43\x50\x14\x34\x75\xb6\xb9\x4a\xa4\x40\x52\x6e\x3c\xc3\xff\xfb\xc0\x1f\x92\x28\x4b\x56\x9d\xd4\xcd\xaa\x07\x4b\x3c\xde\x1d\x8f\xf7\x8b\x1f\xc9\x39\x26\x5f\xf0\x12\x10\x96\x12\x94\x0c\x43\x9a\xe5\x5c\x28\x34\x08\x03\x9c\xe7\x72\x7d\x8e\xa2\x2f\xbf\xc9\x98\xf2\x11\xce\xe9\x48\x93\x46\xeb\xf3\x28\x0c\x08\x17\xb0\x37\xa9\x49\x76\x52\xcc\x31\xd9\x9b\xd4\x24\x3b\x89\x73\x0a\x0f\x0a\x98\xa4\x9c\xed\xe9\xaf\xe9\x67\x38\xa7\x12\xc4\x1a\xc4\x28\xff\xb2\xd4\x73\xb2\xc9\x60\x75\x65\xa0\x70\x53\x45\x86\xc9\x8a\x32\x10\x9b\x5a\x4e\x33\x19\xf6\x61\x18\xaa\x4d\x0e\xe8\xdd\x26\x07\x31\x5b\xd1\x85\x7a\x8f\x33\x90\x39\x26\x80\xa4\x12\x05\x51\x68\x1b\x06\x9a\xa6\x87\x94\x2d\xc3\x5d\x18\x2e\x0a\x46\xd0\x80\x77\x09\x0d\xd1\xeb\x82\xa6\xc9\x60\x88\x5e\x5a\x77\xc4\xb5\xbe\x6d\x18\xb0\x6a\x30\xbe\x40\x2f\xf6\x39\xb6\x61\x10\x7c\xdc\xe4\x70\x03\x0a\x8f\x91\xdd\x48\x5c\x12\xf4\x64\xf0\x07\x65\xc9\x18\xd9\x2b\xaa\xe4\xa2\x57\x7a\x6e\x32\xbd\xbe\x03\xa1\x3d\x31\x46\x4e\xf3\x8c\xac\x20\x83\xdf\x05\x2f\x72\x37\x15\xcf\xcc\x2e\x06\x43\x2d\xb2\xd3\x3f\x1f\xe6\x7f\x03\x51\x8d\x25\x6b\x92\x59\x54\xaf\x33\x46\xdc\xd8\x59\x8a\xed\xc2\x40\x80\x2a\x04\x43\xd5\x96\xb4\x67\xf6\x7c\xf9\x21\x07\x81\x15\x17\x6f\x20\x4f\xf9\x26\x03\xa6\xf6\x9c\x6a\x7d\x61\xae\x96\xbf\xc2\xa0\x14\xbf\xce\x74\x36\x96\x01\x08\x66\x20\xd6\x94\xc0\x84\x10\x5e\x30\x55\x09\x36\xc9\xdd\x71\x6a\x1b\xe4\x05\xcc\x26\x77\xec\x19\xbb\x0d\x83\xa4\x1e\xe9\x90\xb5\x78\x1e\x19\xb3\x5a\xb0\x1d\x34\xa7\xfb\x94\x41\xb3\x8b\x72\xb7\x6b\xbb\x64\xe5\xe0\x32\xa6\x66\xd0\x88\x6e\x30\xcb\x81\x54\x06\xd5\x36\x6b\xb2\xd1\x7e\x0b\x79\x4a\x09\x96\x63\x44\x99\xfa\xe5\xff\x53\x25\x06\xe7\xc6\xba\x60\x06\x29\x10\xc5\xc5\x18\xbd\x70\x86\xfd\x89\xe7\x90\x96\x64\x23\x1d\xdc\x60\x45\x56\x86\x2e\xc7\x28\xc3\xf9\xbd\x0d\xed\x27\x7b\xb3\x3c\x41\xa4\x33\x2b\x1a\xef\x9b\x6f\x0d\x74\xbf\x1f\x21\xcb\x53\xac\xa0\xca\xf8\x29\x4f\x4a\x5a\x65\xec\x11\xde\x0a\x82\x6f\x59\x73\xd0\x1c\x67\x49\x79\xb3\x9e\xab\xad\xa9\xad\xd8\xcb\xdb\xb2\xaa\x9a\xd4\x2a\x0c\x41\x10\x5c\x72\xa6\xb0\x6e\x5c\x72\x8c\xee\x3f\x39\x95\x15\xb1\xb4\xab\xbc\xfb\x11\xef\x8c\xbb\xbe\x4c\x25\xf9\x4c\x3c\x6e\x14\x59\x93\x71\x5a\xa4\xe9\x94\xa7\x94\x6c\xea\x1d\x15\x69\x3a\x49\xbf\xe2\x8d\xac\x58\xaf\xd8\xda\xb3\xef\x8a\xad\xef\x70\x65\x9c\x67\x5e\x69\x60\x74\xf3\xd7\xe7\xf7\x93\x9b\xab\xd9\x74\x72\x79\x55\x5b\x16\x04\x77\x38\x2d\xe0\xad\xe0\xd9\xb8\xea\x8c\x56\xd9\x8c\x17\xc2\x36\xc7\xf2\x7a\x4b\x21\x4d\x6e\x61\x51\x73\xda\x78\x1a\x7a\x33\xd5\x7c\x89\x29\x56\xab\x31\x8a\x74\x0a\x24\x58\xe1\x98\x35\x1b\xa8\xbb\x76\xde\xc0\x7b\xae\x1f\xeb\xa7\x4b\x9e\x65\x58\x57\xf7\x7d\x99\x2c\xd1\xa8\x90\x62\x34\xa7\x6c\xb4\xd2\x4d\x47\xea\xa6\x73\x56\xc5\xa1\x96\x9c\x88\xa5\x34\x71\xa8\x25\x45\xc1\xa2\x57\x28\x3a\x3b\xf3\xcc\x42\xd1\xff\x06\xbe\xbf\x86\x96\xa3\x6e\x4a\x86\x59\x13\xdb\x6b\xec\xba\xf2\x73\xd7\x6e\xe0\xb5\xb2\x9e\x0e\xbe\xd7\x73\xbb\xba\x78\xbb\x81\xf7\xb6\xe0\xa6\xc6\xf6\xb9\xb9\xb7\xe2\x36\x0c\x24\xf6\x4f\xcd\xe6\xfc\x23\xdb\x70\x53\xf8\x19\xce\xcf\x9e\x86\x7b\xb8\x55\x37\xe3\x24\x71\x4f\x7c\x2e\xd3\x42\x2a\x10\xb7\x3c\x2d\x71\xcb\xb6\xd7\xfb\x1e\xbf\xe7\x7a\x0b\xd2\x62\x5f\xd9\x36\x0c\x84\xbe\x6b\xcf\xb7\xa7\x1f\xe9\x76\x4f\xb2\xed\x73\xa7\xfd\x94\xc7\x5f\xd4\x55\x84\x95\x96\xdb\x22\x05\xd3\x5a\xdd\xca\xb6\xd5\x69\xaa\x51\x61\xfb\xc7\x64\x7a\x6d\x6c\x91\x7e\x91\xd7\x6a\x63\x9e\x03\xb3\x4f\x94\x97\xb5\x77\x0b\xd2\xb4\xac\x86\xcc\xcb\x72\xf6\x0e\xc4\xdc\xd6\x7e\xc7\xac\xfd\xed\x59\x9a\x70\xb6\xa0\xcb\x53\x2d\xbb\x04\xa5\x9b\x47\x4a\xa5\xb9\x7f\xd5\xe7\xf2\xb1\x96\x34\xb0\x77\x6c\xe1\x76\xaf\x29\xa4\x90\x8a\x67\xc2\x4d\x25\xb0\xa0\x8c\x2a\x2d\x7c\x12\xcf\x38\xd0\x30\xe7\x5c\x49\x25\x70\x1e\x13\x9b\x6c\xf1\xc3\x99\xb3\xcd\xf5\x43\xed\x42\x25\x78\x9a\xa7\x98\xc1\x61\x2e\xca\x16\x02\xdb\x52\x2a\x44\x0f\x9f\x7b\xbb\x90\x87\x39\xe0\x21\x8f\x8f\xd5\x86\x93\x44\x7b\xb3\x57\xd7\xe1\x8d\x75\x4f\x3c\x43\x56\x96\xc5\xf5\xec\xe5\x20\x78\xa1\xe0\xd9\x57\x95\x40\x0a\x41\xd5\xe6\xf8\x85\x4b\x09\x9d\x7b\xf0\xa0\x08\x67\x3a\x49\x29\x53\xa7\x49\xfe\x48\xb7\xb0\x18\x17\x6a\xc5\x05\xfd\x07\xeb\xaa\x3a\xa6\x22\x4f\xe4\x8e\xbe\x35\xca\xbc\x5d\x83\xde\xab\x57\x82\x0b\xba\xcc\x70\x5e\x93\x72\x9e\x34\x07\xa3\x94\x2f\x2b\x82\x04\x22\xc0\x53\xc0\x78\x02\xde\xa8\x3c\x54\xa5\x27\x60\x4e\x78\x6c\x4f\xf8\x16\x5d\x36\x6b\xc3\xed\xff\x09\x7b\xd7\xef\x48\xbd\x3e\xae\xe1\xd5\x89\x42\x0d\x8a\x24\xb1\xc6\xaf\x73\x2c\x21\xd6\x48\x85\xcb\x98\xf0\xec\x39\x22\xed\x9a\xdd\x0f\x29\xb8\x26\xda\xd1\xa0\xe3\x38\xbc\xf3\x9a\xb2\x84\xb2\xa5\x87\x49\x7d\xfc\x82\x50\x17\xac\x39\xc9\x47\x84\xb6\x0d\xbd\x50\xaa\xb4\x73\x1b\x06\x73\xf7\xd8\x0d\xaa\x1c\xe3\xd3\xb1\x95\x53\xf0\x33\x40\x2c\x9e\x82\x79\x4f\x73\x2b\xbb\xf1\x36\xf4\x12\x6c\x8c\x7a\xba\xd7\xab\xe6\x3e\xdb\x08\xb2\x06\xcf\xdc\xf7\xe1\xde\xe7\x8c\xc2\x98\xee\x83\x3d\x47\xf2\x90\x9e\xe7\xcd\xce\xf7\x03\x1f\xa7\xf7\xbc\xb6\x37\xd0\x7e\x07\x97\x99\x3b\x94\xf5\x2e\x31\x3a\x12\xff\x1d\x97\x0a\x12\xb7\x43\x79\x69\xa0\x54\x59\x71\x6f\x2a\x28\xd5\x8b\xfd\x8f\x53\xd1\xf8\x20\xd6\xf8\x2c\x1b\x1f\x5c\x75\x5b\x6d\x20\x2b\xa4\x3a\xc4\x36\xd0\x93\x13\x29\x41\xdd\x02\x4e\x40\x0c\xba\x72\x67\x74\x00\x5b\x7f\x5e\x19\xeb\x1d\xc4\x91\xf1\x06\x67\x69\x34\x1c\x76\x78\xea\x3d\x4f\x60\xca\x79\xfa\x34\x27\x7d\x53\xfa\x67\xf5\x8f\x3e\x11\x73\x6d\x78\x8f\x6b\x5c\x06\x58\xfc\x3b\xd5\xf8\xf7\x7b\x12\xe9\x08\x35\x4f\x74\x16\x11\x89\xee\x8d\x3f\x3c\x99\xbc\x17\x81\xda\x6d\x01\x5d\x20\x22\x12\xfb\xdd\x52\xa2\x8b\x0b\xc4\x68\xaa\xad\x0a\x7c\x6a\xc7\x87\xc2\x9d\xa9\xe4\x9a\xe9\xbe\x05\xc8\x47\xeb\x73\x9c\xe6\x2b\xfc\x6b\xf4\x09\x5d\xa0\xc8\x8d\xcc\xdf\x23\x36\x3d\x88\x48\x3a\xc2\x76\xf5\xa0\x40\x30\x9c\x5e\xeb\x97\x88\xef\x6a\x01\x8f\xd2\xf4\xb3\x06\x0f\xdc\x26\xcc\x3b\x55\xab\x21\xfc\xf7\xe1\xfb\x37\x00\x00\xff\xff\x9d\x31\x2e\x55\x3f\x1b\x00\x00") - -func hypershift_operatorGoBytes() ([]byte, error) { - return bindataRead( - _hypershift_operatorGo, - "hypershift_operator.go", - ) -} - -func hypershift_operatorGo() (*asset, error) { - bytes, err := hypershift_operatorGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "hypershift_operator.go", size: 6975, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0x7b, 0x8d, 0xea, 0x85, 0x7a, 0xd, 0xe9, 0x6e, 0xca, 0xb0, 0x75, 0xf3, 0x97, 0x87, 0x7a, 0xf2, 0x58, 0xc3, 0x98, 0x7, 0x95, 0x3f, 0xb3, 0x7e, 0xcf, 0x3f, 0xd, 0xc0, 0x4e, 0xd, 0xba}} - return a, nil -} - -var _utilGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x90\x3f\x4f\xc3\x30\x10\xc5\xe7\xdc\xa7\x38\x32\x54\x71\x05\x49\x0b\x0b\x02\x75\xa8\xe8\x84\x68\x8b\xca\xc4\x68\xc2\xa5\x9c\xda\xd8\xd1\xd9\x29\x54\x55\xbe\x3b\x72\x42\xff\x21\x21\x31\xd9\x3a\xfb\xf7\xee\xbd\x57\xe9\x7c\xa5\x97\x84\xda\x39\xf2\x0e\x80\xcb\xca\x8a\xc7\x04\xa2\xf8\x6d\xeb\xc9\xc5\x10\xc5\x6c\x63\x80\x48\x57\x4c\x5f\x9e\x8c\x63\x6b\xdc\x66\x88\xf1\xea\xd6\xa5\x6c\xb3\xb3\xf9\x95\xae\xd8\x91\x6c\x48\xb2\x6a\xb5\x0c\x6f\xee\xfc\x43\xb6\x19\x06\xc9\x23\x5b\xea\xfc\x83\x0d\xc9\xb6\x05\x6a\xcf\xeb\x6c\xab\xcb\x75\x0c\x0a\xa0\xa8\x4d\x8e\x65\xed\xfc\x38\xb8\x5b\x90\x7e\x27\x49\x5a\xa7\xe8\xbc\xb0\x59\x2a\x64\x9b\x76\x73\xdc\x41\x24\xe4\x6b\x31\xd8\x1a\x4f\x67\xf4\xf9\x43\x4c\xf7\x0a\x1d\xab\x14\x34\x27\xda\x0f\xb5\xf3\xb6\x5c\x90\xb3\xb5\xe4\x34\xa1\x82\x0d\x7b\xb6\x26\x29\xb5\xe1\x82\x9c\x3f\xee\x50\xd8\xff\xd5\x42\xfa\x17\x1d\xec\x58\xbc\x1b\xe1\x7f\x81\x5d\x03\x11\x17\x48\x22\x81\x0a\x15\x84\x04\xaf\xe3\xe9\xd3\x5c\x1e\x5f\xe6\xb3\x09\xe5\x36\x84\xd9\xbb\xba\xc4\xe1\x60\xa0\xd2\x6e\x9c\xf4\xac\xba\x6f\xd9\x8b\x11\x1a\x5e\x87\xed\x51\xa5\x0d\xe7\x09\x89\x28\x88\x9a\x43\x39\x3d\x7b\x48\xcf\xc6\xdf\x5c\x3f\x7b\x49\xb8\xbb\x2a\xec\xb7\xe7\x49\x95\x3d\x86\x06\xbe\x03\x00\x00\xff\xff\xb5\x12\x56\x70\x24\x02\x00\x00") - -func utilGoBytes() ([]byte, error) { - return bindataRead( - _utilGo, - "util.go", - ) -} - -func utilGo() (*asset, error) { - bytes, err := utilGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "util.go", size: 548, mode: os.FileMode(0644), modTime: time.Unix(1, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x93, 0x26, 0x40, 0x99, 0x94, 0x8, 0x7c, 0x5d, 0x57, 0x80, 0xc5, 0x49, 0x8e, 0x6, 0x9f, 0xf1, 0x6c, 0xf2, 0x85, 0x2a, 0xca, 0x4, 0xb8, 0x7a, 0x4b, 0x4f, 0xb3, 0x5c, 0xde, 0x8, 0xa1, 0xca}} - 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. @@ -548,13 +485,10 @@ var _bindata = map[string]func() (*asset, error){ "cluster-api/infrastructure.cluster.x-k8s.io_awsmachinetemplates.yaml": clusterApiInfrastructureClusterXK8sIo_awsmachinetemplatesYaml, "cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml": clusterApiInfrastructureClusterXK8sIo_awsmanagedclustersYaml, "cluster-api/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml": clusterApiInfrastructureClusterXK8sIo_awsmanagedmachinepoolsYaml, - "cluster_api.go": cluster_apiGo, - "hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml": hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYaml, - "hypershift-operator/hypershift.openshift.io_hostedclusters.yaml": hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYaml, - "hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml": hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYaml, - "hypershift-operator/hypershift.openshift.io_nodepools.yaml": hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml, - "hypershift_operator.go": hypershift_operatorGo, - "util.go": utilGo, + "hypershift-operator/hypershift.openshift.io_externalinfraclusters.yaml": hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYaml, + "hypershift-operator/hypershift.openshift.io_hostedclusters.yaml": hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYaml, + "hypershift-operator/hypershift.openshift.io_hostedcontrolplanes.yaml": hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYaml, + "hypershift-operator/hypershift.openshift.io_nodepools.yaml": hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml, } // AssetDebug is true if the assets were built with the debug flag enabled. @@ -614,15 +548,12 @@ var _bintree = &bintree{nil, map[string]*bintree{ "infrastructure.cluster.x-k8s.io_awsmanagedclusters.yaml": {clusterApiInfrastructureClusterXK8sIo_awsmanagedclustersYaml, map[string]*bintree{}}, "infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml": {clusterApiInfrastructureClusterXK8sIo_awsmanagedmachinepoolsYaml, map[string]*bintree{}}, }}, - "cluster_api.go": {cluster_apiGo, map[string]*bintree{}}, "hypershift-operator": {nil, map[string]*bintree{ "hypershift.openshift.io_externalinfraclusters.yaml": {hypershiftOperatorHypershiftOpenshiftIo_externalinfraclustersYaml, map[string]*bintree{}}, "hypershift.openshift.io_hostedclusters.yaml": {hypershiftOperatorHypershiftOpenshiftIo_hostedclustersYaml, map[string]*bintree{}}, "hypershift.openshift.io_hostedcontrolplanes.yaml": {hypershiftOperatorHypershiftOpenshiftIo_hostedcontrolplanesYaml, map[string]*bintree{}}, "hypershift.openshift.io_nodepools.yaml": {hypershiftOperatorHypershiftOpenshiftIo_nodepoolsYaml, map[string]*bintree{}}, }}, - "hypershift_operator.go": {hypershift_operatorGo, map[string]*bintree{}}, - "util.go": {utilGo, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory. From 71b0fec27713b67005e350d288ee12f856f615cf Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Wed, 10 Feb 2021 13:41:09 -0500 Subject: [PATCH 19/20] cli: clean up gitignore files --- .gitignore | 4 ---- test/e2e/.gitignore | 1 - 2 files changed, 5 deletions(-) delete mode 100644 test/e2e/.gitignore diff --git a/.gitignore b/.gitignore index 3183f61d940b..6c6995ab1f77 100644 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,3 @@ tools/bin .envrc .kube - -config/example-cluster/ssh-key -config/example-cluster/pull-secret -config/example-cluster/aws-creds diff --git a/test/e2e/.gitignore b/test/e2e/.gitignore deleted file mode 100644 index a475b665d037..000000000000 --- a/test/e2e/.gitignore +++ /dev/null @@ -1 +0,0 @@ -data/example-cluster.yaml From 7beb9a8da235ef8812567330c7fce7dcc31a8d15 Mon Sep 17 00:00:00 2001 From: Dan Mace Date: Thu, 11 Feb 2021 15:07:32 -0500 Subject: [PATCH 20/20] cli: replace baked OCP image reference with dynamic defaulting --- Makefile | 7 +------ api/version.go | 12 ----------- cmd/create/cluster/cluster.go | 11 +++++++++- cmd/install/install.go | 3 ++- test/e2e/e2e_suite_test.go | 2 +- test/e2e/quick_start_test.go | 13 ++++++++++-- version/version.go | 38 +++++++++++++++++++++++++++++++++++ 7 files changed, 63 insertions(+), 23 deletions(-) delete mode 100644 api/version.go create mode 100644 version/version.go diff --git a/Makefile b/Makefile index 1e8d66462a73..442f2ec4d557 100644 --- a/Makefile +++ b/Makefile @@ -12,14 +12,9 @@ RUNTIME ?= docker CONTROLLER_GEN=GO111MODULE=on GOFLAGS=-mod=vendor go run ./vendor/sigs.k8s.io/controller-tools/cmd/controller-gen BINDATA=GO111MODULE=on GOFLAGS=-mod=vendor go run ./vendor/github.com/kevinburke/go-bindata/go-bindata -# Bake in a compatible OCP release image if provided -ifdef OCP_RELEASE_IMAGE -GO_LDFLAGS=-ldflags="-X 'openshift.io/hypershift/api.OCPReleaseImage=$(OCP_RELEASE_IMAGE)'" -endif - GO_GCFLAGS ?= -gcflags=all='-N -l' GO=GO111MODULE=on GOFLAGS=-mod=vendor go -GO_BUILD_RECIPE=CGO_ENABLED=0 $(GO) build $(GO_GCFLAGS) $(GO_LDFLAGS) +GO_BUILD_RECIPE=CGO_ENABLED=0 $(GO) build $(GO_GCFLAGS) # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) ifeq (,$(shell go env GOBIN)) diff --git a/api/version.go b/api/version.go deleted file mode 100644 index 4180fff4f2da..000000000000 --- a/api/version.go +++ /dev/null @@ -1,12 +0,0 @@ -package api - -var ( - // TODO: This goes away when control-plane-operator becomes another component - // in the OCP payload. - HyperShiftImage = "registry.ci.openshift.org/hypershift/hypershift:latest" - - // OCPReleaseImage is the latest compatible OCP release, used for defaulting. - // This can and should be baked into the binary through ldflags, although - // the version committed here should be kept up to date with major releases. - OCPReleaseImage = "quay.io/openshift-release-dev/ocp-release:4.7.0-fc.3-x86_64" -) diff --git a/cmd/create/cluster/cluster.go b/cmd/create/cluster/cluster.go index 87f4705eaa11..6238264a7f44 100644 --- a/cmd/create/cluster/cluster.go +++ b/cmd/create/cluster/cluster.go @@ -13,6 +13,7 @@ import ( hyperapi "openshift.io/hypershift/api" apifixtures "openshift.io/hypershift/api/fixtures" + "openshift.io/hypershift/version" cr "sigs.k8s.io/controller-runtime" crclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -38,7 +39,7 @@ func NewCommand() *cobra.Command { cmd.Flags().StringVar(&opts.Namespace, "namespace", "clusters", "A namespace to contain the generated resources") cmd.Flags().StringVar(&opts.Name, "name", "example", "A name for the cluster") - cmd.Flags().StringVar(&opts.ReleaseImage, "release-image", hyperapi.OCPReleaseImage, "The OCP release image for the cluster") + cmd.Flags().StringVar(&opts.ReleaseImage, "release-image", "", "The OCP release image for the cluster") cmd.Flags().StringVar(&opts.PullSecretFile, "pull-secret", "", "Path to a pull secret") cmd.Flags().StringVar(&opts.AWSCredentialsFile, "aws-creds", "", "Path to an AWS credentials file") cmd.Flags().StringVar(&opts.SSHKeyFile, "ssh-key", filepath.Join(os.Getenv("HOME"), ".ssh", "id_rsa.pub"), "Path to an SSH key file") @@ -57,6 +58,14 @@ func NewCommand() *cobra.Command { if err != nil { panic(err) } + if len(opts.ReleaseImage) == 0 { + defaultVersion, err := version.LookupDefaultOCPVersion() + if err != nil { + panic(err) + } + opts.ReleaseImage = defaultVersion.PullSpec + fmt.Printf("using default OCP version %s\n", opts.ReleaseImage) + } exampleObjects := apifixtures.ExampleOptions{ Namespace: opts.Namespace, diff --git a/cmd/install/install.go b/cmd/install/install.go index 4cc30443cd18..99e4ff3794cd 100644 --- a/cmd/install/install.go +++ b/cmd/install/install.go @@ -27,6 +27,7 @@ import ( hyperapi "openshift.io/hypershift/api" "openshift.io/hypershift/cmd/install/assets" + "openshift.io/hypershift/version" cr "sigs.k8s.io/controller-runtime" crclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -49,7 +50,7 @@ func NewCommand() *cobra.Command { var opts Options cmd.Flags().StringVar(&opts.Namespace, "namespace", "hypershift", "The namespace in which to install HyperShift") - cmd.Flags().StringVar(&opts.HyperShiftImage, "hypershift-image", hyperapi.HyperShiftImage, "The HyperShift image to deploy") + cmd.Flags().StringVar(&opts.HyperShiftImage, "hypershift-image", version.HyperShiftImage, "The HyperShift image to deploy") cmd.Flags().BoolVar(&opts.Development, "development", false, "Enable tweaks to facilitate local development") cmd.Flags().BoolVar(&opts.Render, "render", false, "Render output as YAML to stdout instead of applying") diff --git a/test/e2e/e2e_suite_test.go b/test/e2e/e2e_suite_test.go index 697673ed21e1..1b4949df906d 100644 --- a/test/e2e/e2e_suite_test.go +++ b/test/e2e/e2e_suite_test.go @@ -34,7 +34,7 @@ func init() { flag.StringVar(&quickStartSpecOptions.AWSCredentialsFile, "e2e.quick-start.aws-credentials-file", "", "path to AWS credentials") flag.StringVar(&quickStartSpecOptions.PullSecretFile, "e2e.quick-start.pull-secret-file", "", "path to pull secret") flag.StringVar(&quickStartSpecOptions.SSHKeyFile, "e2e.quick-start.ssh-key-file", filepath.Join(os.Getenv("HOME"), ".ssh", "id_rsa.pub"), "path to SSH public key") - flag.StringVar(&quickStartSpecOptions.ReleaseImage, "e2e.quick-start.release-image", hyperapi.OCPReleaseImage, "OCP release image to test") + flag.StringVar(&quickStartSpecOptions.ReleaseImage, "e2e.quick-start.release-image", "", "OCP release image to test") } func TestE2E(t *testing.T) { diff --git a/test/e2e/quick_start_test.go b/test/e2e/quick_start_test.go index 94619172f62c..091d05dbcbdf 100644 --- a/test/e2e/quick_start_test.go +++ b/test/e2e/quick_start_test.go @@ -19,14 +19,14 @@ import ( hyperapi "openshift.io/hypershift/api" apifixtures "openshift.io/hypershift/api/fixtures" "openshift.io/hypershift/test/e2e/internal/log" + "openshift.io/hypershift/version" ) var _ = Describe("When following the HyperShift quick-start [PR-Blocking]", func() { QuickStartSpec(context.TODO(), func() QuickStartSpecInput { input := QuickStartSpecInput{ - Client: client, - ReleaseImage: quickStartSpecOptions.ReleaseImage, + Client: client, } var err error input.PullSecret, err = ioutil.ReadFile(quickStartSpecOptions.PullSecretFile) @@ -37,6 +37,13 @@ var _ = Describe("When following the HyperShift quick-start [PR-Blocking]", func input.SSHKey, err = ioutil.ReadFile(quickStartSpecOptions.SSHKeyFile) Expect(err).NotTo(HaveOccurred(), "couldn't read SSH key file %q", quickStartSpecOptions.SSHKeyFile) + + if len(quickStartSpecOptions.ReleaseImage) == 0 { + defaultVersion, err := version.LookupDefaultOCPVersion() + Expect(err).NotTo(HaveOccurred(), "couldn't look up default OCP version") + input.ReleaseImage = defaultVersion.PullSpec + } + return input }) @@ -78,6 +85,8 @@ func QuickStartSpec(ctx context.Context, inputGetter func() QuickStartSpecInput) By("Applying the example cluster resources") + log.Logf("Testing OCP release image %s", input.ReleaseImage) + namespace = &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ GenerateName: "e2e-", diff --git a/version/version.go b/version/version.go new file mode 100644 index 000000000000..028165a7c2b0 --- /dev/null +++ b/version/version.go @@ -0,0 +1,38 @@ +package version + +import ( + "encoding/json" + "io/ioutil" + "net/http" +) + +var ( + // TODO: This goes away when control-plane-operator becomes another component + // in the OCP payload. + HyperShiftImage = "registry.ci.openshift.org/hypershift/hypershift:latest" +) + +const releaseURL = "https://openshift-release.svc.ci.openshift.org/api/v1/releasestream/4-stable/latest" + +type OCPVersion struct { + Name string `json:"name"` + PullSpec string `json:"pullSpec"` + DownloadURL string `json:"downloadURL"` +} + +func LookupDefaultOCPVersion() (OCPVersion, error) { + var version OCPVersion + resp, err := http.Get(releaseURL) + if err != nil { + return version, err + } + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return version, err + } + err = json.Unmarshal(body, &version) + if err != nil { + return version, err + } + return version, nil +}