diff --git a/.gitignore b/.gitignore index 200e4cf49..a889b682d 100644 --- a/.gitignore +++ b/.gitignore @@ -62,6 +62,7 @@ junit.*.xml .tiltbuild /tilt.d tilt-settings.json +tilt_config.json # test results _artifacts diff --git a/Dockerfile b/Dockerfile index 00cdfc353..343c056c3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,7 @@ COPY ./ ./ # Build ARG ARCH -RUN CGO_ENABLED=0 GOOS=linux GOARCH=${ARCH} GO111MODULE=on go build -a -ldflags '-extldflags "-static"' -o manager main.go +RUN CGO_ENABLED=0 GOOS=linux GOARCH=${ARCH} GO111MODULE=on go build -a -trimpath -ldflags '-extldflags "-static"' -o manager main.go # Use distroless as minimal base image to package the manager binary # Refer to https://github.com/GoogleContainerTools/distroless for more details diff --git a/Makefile b/Makefile index aa92f75f6..fce9fd887 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,9 @@ SHELL:=/usr/bin/env bash .DEFAULT_GOAL:=help -# Use GOPROXY environment variable if set +GOPATH := $(shell go env GOPATH) +GOARCH := $(shell go env GOARCH) +GOOS := $(shell go env GOOS) GOPROXY := $(shell go env GOPROXY) ifeq ($(GOPROXY),) GOPROXY := https://proxy.golang.org @@ -42,17 +44,16 @@ E2E_DATA_DIR ?= $(ROOT_DIR)/$(TEST_E2E_DIR)/data KUBETEST_CONF_PATH ?= $(abspath $(E2E_DATA_DIR)/kubetest/conformance.yaml) GO_INSTALL = ./scripts/go_install.sh -# Set --output-base for conversion-gen if we are not within GOPATH -ifneq ($(abspath $(REPO_ROOT)),$(shell go env GOPATH)/src/sigs.k8s.io/cluster-api-provider-digitalocean) - GEN_OUTPUT_BASE := --output-base=$(REPO_ROOT) -endif +# curl retries +CURL_RETRIES=3 # Files E2E_CONF_FILE ?= $(REPO_ROOT)/test/e2e/config/digitalocean-dev.yaml E2E_CONF_FILE_ENVSUBST := $(ROOT_DIR)/test/e2e/config/digitalocean-dev-envsubst.yaml # Define Docker related variables. Releases should modify and double check these vars. -REGISTRY ?= gcr.io/$(shell gcloud config get-value project) +export GCP_PROJECT ?= $(shell gcloud config get-value project) +REGISTRY ?= gcr.io/$(GCP_PROJECT) STAGING_REGISTRY := gcr.io/k8s-staging-cluster-api-do PROD_REGISTRY := us.gcr.io/k8s-artifacts-prod/cluster-api-do IMAGE_NAME ?= cluster-api-do-controller @@ -67,7 +68,6 @@ CRD_ROOT ?= $(MANIFEST_ROOT)/crd/bases WEBHOOK_ROOT ?= $(MANIFEST_ROOT)/webhook RBAC_ROOT ?= $(MANIFEST_ROOT)/rbac - # Allow overriding the e2e configurations GINKGO_FOCUS ?= Workload cluster creation GINKGO_NODES ?= 3 @@ -81,8 +81,23 @@ PULL_POLICY ?= Always DOCKER_BUILDKIT ?= 0 export DOCKER_BUILDKIT +# Hosts running SELinux need :z added to volume mounts +SELINUX_ENABLED := $(shell cat /sys/fs/selinux/enforce 2> /dev/null || echo 0) + +ifeq ($(SELINUX_ENABLED),1) + DOCKER_VOL_OPTS?=:z +endif + KIND_CLUSTER_NAME ?= capdo +# set --output-base used for conversion-gen which needs to be different for in GOPATH and outside GOPATH dev +ifneq ($(abspath $(ROOT_DIR)),$(GOPATH)/src/sigs.k8s.io/cluster-api-provider-digitalocean) + OUTPUT_BASE := --output-base=$(ROOT_DIR) +endif + +# CI +CAPDO_WORKER_CLUSTER_KUBECONFIG ?= "/tmp/kubeconfig" + ## -------------------------------------- ##@ Help ## -------------------------------------- @@ -90,24 +105,23 @@ KIND_CLUSTER_NAME ?= capdo 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 ## -------------------------------------- # Binaries. -CONTROLLER_GEN_VER := v0.5.0 +CONTROLLER_GEN_VER := v0.7.0 CONTROLLER_GEN_BIN := controller-gen CONTROLLER_GEN := $(TOOLS_BIN_DIR)/$(CONTROLLER_GEN_BIN)-$(CONTROLLER_GEN_VER) -CONVERSION_GEN_VER := v0.20.4 +CONVERSION_GEN_VER := v0.22.2 CONVERSION_GEN_BIN := conversion-gen CONVERSION_GEN := $(TOOLS_BIN_DIR)/$(CONVERSION_GEN_BIN)-$(CONVERSION_GEN_VER) ENVSUBST_BIN := envsubst ENVSUBST := $(TOOLS_BIN_DIR)/$(ENVSUBST_BIN)-drone -GOLANGCI_LINT_VER := v1.42.0 +GOLANGCI_LINT_VER := v1.42.1 GOLANGCI_LINT_BIN := golangci-lint GOLANGCI_LINT := $(TOOLS_BIN_DIR)/$(GOLANGCI_LINT_BIN)-$(GOLANGCI_LINT_VER) @@ -119,7 +133,7 @@ MOCKGEN_VER := v1.5.0 MOCKGEN_BIN := mockgen MOCKGEN := $(TOOLS_BIN_DIR)/$(MOCKGEN_BIN)-$(MOCKGEN_VER) -RELEASE_NOTES_VER := v0.3.4 +RELEASE_NOTES_VER := v0.11.0 RELEASE_NOTES_BIN := release-notes RELEASE_NOTES := $(TOOLS_BIN_DIR)/$(RELEASE_NOTES_BIN)-$(RELEASE_NOTES_VER) @@ -127,9 +141,11 @@ GINKGO_VER := v1.16.4 GINKGO_BIN := ginkgo GINKGO := $(TOOLS_BIN_DIR)/$(GINKGO_BIN)-$(GINKGO_VER) -KUBECTL_VER := v1.21.3 -KUBECTL_BIN := kubectl -KUBECTL := $(TOOLS_BIN_DIR)/$(KUBECTL_BIN)-$(KUBECTL_VER) +KUBECTL_VER := v1.22.3 +KUBECTL_BIN := $(TOOLS_BIN_DIR)/kubectl +KUBECTL := $(KUBECTL_BIN)-$(KUBECTL_VER) + +TIMEOUT := $(shell command -v timeout || command -v gtimeout) ## -------------------------------------- ##@ Testing @@ -159,7 +175,7 @@ test-conformance: e2e-image $(ENVSUBST) $(GINKGO) $(KIND) $(KUSTOMIZE) ## Run co .PHONY: e2e-image e2e-image: - docker build --build-arg ldflags="$(LDFLAGS)" --tag="gcr.io/k8s-staging-cluster-api/capdo-manager:e2e" . + docker build --build-arg ldflags="$(LDFLAGS)" --tag="gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:e2e" . .PHONY: binaries @@ -205,9 +221,12 @@ $(GINKGO): ## Build ginkgo. $(KUBECTL): ## Build kubectl mkdir -p $(TOOLS_BIN_DIR) rm -f "$(KUBECTL)*" - curl -fsL https://storage.googleapis.com/kubernetes-release/release/$(KUBECTL_VER)/bin/$(GOOS)/$(GOARCH)/kubectl -o $(KUBECTL) - ln -sf "$(KUBECTL)" "$(TOOLS_BIN_DIR)/$(KUBECTL_BIN)" - chmod +x "$(TOOLS_BIN_DIR)/$(KUBECTL_BIN)" "$(KUBECTL)" + curl --retry $(CURL_RETRIES) -fsL https://storage.googleapis.com/kubernetes-release/release/$(KUBECTL_VER)/bin/$(GOOS)/$(GOARCH)/kubectl -o $(KUBECTL) + ln -sf "$(KUBECTL)" "$(KUBECTL_BIN)" + chmod +x "$(KUBECTL_BIN)" "$(KUBECTL)" + +.PHONY: $(KUBECTL_BIN) +$(KUBECTL_BIN): $(KUBECTL) ## Building kubectl from the tools folder ## -------------------------------------- ##@ Linting @@ -234,22 +253,30 @@ generate: ## Generate code $(MAKE) generate-manifests .PHONY: generate-go -generate-go: $(CONTROLLER_GEN) $(MOCKGEN) $(CONVERSION_GEN) ## Runs Go related generate targets - go generate ./... +generate-go: $(CONTROLLER_GEN) $(CONVERSION_GEN) $(MOCKGEN) ## Runs Go related generate targets $(CONTROLLER_GEN) \ paths=./api/... \ object:headerFile=./hack/boilerplate/boilerplate.generatego.txt - $(CONVERSION_GEN) \ --input-dirs=./api/v1alpha3 \ - --output-file-base=zz_generated.conversion $(GEN_OUTPUT_BASE) \ - --go-header-file=./hack/boilerplate/boilerplate.generatego.txt + --build-tag=ignore_autogenerated_core_v1alpha3 \ + --extra-peer-dirs=sigs.k8s.io/cluster-api/api/v1alpha3 \ + --output-file-base=zz_generated.conversion \ + --go-header-file=./hack/boilerplate/boilerplate.generatego.txt $(OUTPUT_BASE) + $(CONVERSION_GEN) \ + --input-dirs=./api/v1alpha4 \ + --build-tag=ignore_autogenerated_core_v1alpha4 \ + --extra-peer-dirs=sigs.k8s.io/cluster-api/api/v1alpha4 \ + --output-file-base=zz_generated.conversion \ + --go-header-file=./hack/boilerplate/boilerplate.generatego.txt $(OUTPUT_BASE) + go generate ./... .PHONY: generate-manifests generate-manifests: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc. $(CONTROLLER_GEN) \ paths=./api/... \ crd:crdVersions=v1 \ + rbac:roleName=manager-role \ output:crd:dir=$(CRD_ROOT) \ output:webhook:dir=$(WEBHOOK_ROOT) \ webhook @@ -259,21 +286,27 @@ generate-manifests: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc. rbac:roleName=manager-role ## -------------------------------------- -##@ Docker +## Docker ## -------------------------------------- +.PHONY: docker-pull-prerequisites +docker-pull-prerequisites: + docker pull docker/dockerfile:1.1-experimental + docker pull docker.io/library/golang:1.16 + docker pull gcr.io/distroless/static:latest + .PHONY: docker-build -docker-build: ## Build the docker image for controller-manager - docker build --pull --build-arg ARCH=$(ARCH) . -t $(CONTROLLER_IMG)-$(ARCH):$(TAG) - MANIFEST_IMG=$(CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) $(MAKE) set-manifest-image - $(MAKE) set-manifest-pull-policy +docker-build: docker-pull-prerequisites ## Build the docker image for controller-manager + DOCKER_BUILDKIT=1 docker build --build-arg goproxy=$(GOPROXY) --build-arg ARCH=$(ARCH) --build-arg ldflags="$(LDFLAGS)" . -t $(CONTROLLER_IMG)-$(ARCH):$(TAG) + $(MAKE) set-manifest-image MANIFEST_IMG=$(CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="./config/default/manager_image_patch.yaml" + $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="./config/default/manager_pull_policy.yaml" .PHONY: docker-push docker-push: ## Push the docker image docker push $(CONTROLLER_IMG)-$(ARCH):$(TAG) ## -------------------------------------- -##@ Docker — All ARCH +## Docker — All ARCH ## -------------------------------------- .PHONY: docker-build-all ## Build all the architecture docker images @@ -300,12 +333,12 @@ docker-push-manifest: ## Push the fat manifest docker image. .PHONY: set-manifest-image set-manifest-image: - $(info Updating kustomize image patch file for manager resource) + $(info Updating kustomize image patch file for default resource) sed -i'' -e 's@image: .*@image: '"${MANIFEST_IMG}:$(MANIFEST_TAG)"'@' ./config/default/manager_image_patch.yaml .PHONY: set-manifest-pull-policy set-manifest-pull-policy: - $(info Updating kustomize pull policy file for manager resource) + $(info Updating kustomize pull policy file for default resource) sed -i'' -e 's@imagePullPolicy: .*@imagePullPolicy: '"$(PULL_POLICY)"'@' ./config/default/manager_pull_policy.yaml ## -------------------------------------- @@ -384,47 +417,48 @@ create-cluster: $(CLUSTERCTL) ## Create a development Kubernetes cluster on Digi # e2e-conformance.sh script, which is why we need it as a variable here. CLUSTER_NAME ?= test1 -.PHONY: create-cluster-management -create-cluster-management: $(CLUSTERCTL) ## Create a development Kubernetes cluster on DigitalOcean in a KIND management cluster. +.PHONY: create-management-cluster +create-management-cluster: $(KUSTOMIZE) $(ENVSUBST) ## Create kind management cluster. $(MAKE) kind-create - @if [ ! -z "${LOAD_IMAGE}" ]; then \ - echo "loading ${LOAD_IMAGE} into kind cluster ..." && \ - kind --name="clusterapi" load docker-image "${LOAD_IMAGE}"; \ - fi - # Apply core-components. - kubectl \ - --kubeconfig=$$(kind get kubeconfig-path --name="clusterapi") \ - create -f examples/_out/core-components.yaml - # Apply provider-components. - kubectl \ - --kubeconfig=$$(kind get kubeconfig-path --name="clusterapi") \ - create -f examples/_out/provider-components.yaml - # Create Cluster. - kubectl \ - --kubeconfig=$$(kind get kubeconfig-path --name="clusterapi") \ - create -f examples/_out/cluster.yaml - # Create control plane machine. - kubectl \ - --kubeconfig=$$(kind get kubeconfig-path --name="clusterapi") \ - create -f examples/_out/controlplane.yaml - # Get KubeConfig using clusterctl. - $(CLUSTERCTL) \ - alpha phases get-kubeconfig -v=3 \ - --kubeconfig=$$(kind get kubeconfig-path --name="clusterapi") \ - --namespace=default \ - --cluster-name=$(CLUSTER_NAME) - # Apply addons on the target cluster, waiting for the control-plane to become available. - $(CLUSTERCTL) \ - alpha phases apply-addons -v=3 \ - --kubeconfig=./kubeconfig \ - -a examples/addons.yaml - # Create a worker node with MachineDeployment. - kubectl \ - --kubeconfig=$$(kind get kubeconfig-path --name="clusterapi") \ - create -f examples/_out/machinedeployment.yaml + # Install cert manager and wait for availability + ./hack/install-cert-manager.sh + + # Deploy CAPI + curl --retry $(CURL_RETRIES) -sSL https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.0.0/cluster-api-components.yaml | $(ENVSUBST) | kubectl apply -f - + + # Deploy CAPG + kind load docker-image $(CONTROLLER_IMG)-$(ARCH):$(TAG) --name=capdo + $(KUSTOMIZE) build config/default | $(ENVSUBST) | kubectl apply -f - + + # Wait for CAPI pods + kubectl wait --for=condition=Available --timeout=5m -n capi-system deployment -l cluster.x-k8s.io/provider=cluster-api + kubectl wait --for=condition=Available --timeout=5m -n capi-kubeadm-bootstrap-system deployment -l cluster.x-k8s.io/provider=bootstrap-kubeadm + kubectl wait --for=condition=Available --timeout=5m -n capi-kubeadm-control-plane-system deployment -l cluster.x-k8s.io/provider=control-plane-kubeadm + + # Wait for CAPDO pods + kubectl wait --for=condition=Ready --timeout=5m -n capdo-system pod -l cluster.x-k8s.io/provider=infrastructure-digitalocean + + # required sleep for when creating management and workload cluster simultaneously + sleep 10 + @echo 'Set kubectl context to the kind management cluster by running "kubectl config set-context kind-clusterapi"' + +.PHONY: create-workload-cluster +create-workload-cluster: $(KUSTOMIZE) $(ENVSUBST) + # Create workload Cluster. + $(KUSTOMIZE) build templates | $(ENVSUBST) | kubectl apply -f - + + # Wait for the kubeconfig to become available. + ${TIMEOUT} 5m bash -c "while ! kubectl get secrets | grep $(CLUSTER_NAME)-kubeconfig; do sleep 1; done" + # Get kubeconfig and store it locally. + kubectl get secrets $(CLUSTER_NAME)-kubeconfig -o json | jq -r .data.value | base64 --decode > $(CAPDO_WORKER_CLUSTER_KUBECONFIG) + ${TIMEOUT} 15m bash -c "while ! kubectl --kubeconfig=$(CAPDO_WORKER_CLUSTER_KUBECONFIG) get nodes | grep master; do sleep 1; done" + # Deploy calico + kubectl --kubeconfig=$(CAPDO_WORKER_CLUSTER_KUBECONFIG) apply -f https://docs.projectcalico.org/manifests/calico.yaml + + @echo 'run "kubectl --kubeconfig=$(CAPDO_WORKER_CLUSTER_KUBECONFIG) ..." to work with the new target cluster' .PHONY: delete-workload-cluster delete-workload-cluster: $(CLUSTERCTL) ## Deletes the development Kubernetes Cluster "$CLUSTER_NAME" @@ -437,18 +471,26 @@ delete-workload-cluster: $(CLUSTERCTL) ## Deletes the development Kubernetes Clu --kubeconfig ./kubeconfig \ -p ./examples/_out/provider-components.yaml \ +## -------------------------------------- +## Tilt / Kind +## -------------------------------------- + .PHONY: kind-create -kind-create: ## create capdo kind cluster if needed +kind-create: $(KUBECTL) ## create capg kind cluster if needed ./scripts/kind-with-registry.sh +.PHONY: kind-delete +kind-delete: ## Destroys the "capdo" kind cluster. + kind delete cluster --name=$(KIND_CLUSTER_NAME) + +.PHONY: tilt-up +tilt-up: $(ENVSUBST) $(KUSTOMIZE) $(KUBECTL) kind-create ## start tilt and build kind cluster if needed + EXP_CLUSTER_RESOURCE_SET=true tilt up + .PHONY: delete-cluster delete-cluster: delete-workload-cluster ## Deletes the example kind cluster "capdo" kind delete cluster --name=$(KIND_CLUSTER_NAME) -.PHONY: kind-reset -kind-reset: ## Destroys the "capdo" kind cluster. - kind delete cluster --name=$(KIND_CLUSTER_NAME) || true - ## -------------------------------------- ##@ Verification ## -------------------------------------- diff --git a/PROJECT b/PROJECT index 403e176bd..eb22eb444 100644 --- a/PROJECT +++ b/PROJECT @@ -2,6 +2,7 @@ version: "3" domain: cluster.x-k8s.io repo: sigs.k8s.io/cluster-api-provider-digitalocean resources: +# v1alpha3 types - group: infrastructure kind: DOCluster version: v1alpha3 @@ -11,6 +12,7 @@ resources: - group: infrastructure kind: DOMachineTemplate version: v1alpha3 +# v1alpha4 types - group: infrastructure kind: DOCluster version: v1alpha4 @@ -20,3 +22,13 @@ resources: - group: infrastructure kind: DOMachineTemplate version: v1alpha4 +# v1beta1 types +- group: infrastructure + kind: DOCluster + version: v1beta1 +- group: infrastructure + kind: DOMachine + version: v1beta1 +- group: infrastructure + kind: DOMachineTemplate + version: v1beta1 diff --git a/Tiltfile b/Tiltfile new file mode 100644 index 000000000..4981aaee7 --- /dev/null +++ b/Tiltfile @@ -0,0 +1,212 @@ +# -*- mode: Python -*- + +envsubst_cmd = "./hack/tools/bin/envsubst" +tools_bin = "./hack/tools/bin" + +#Add tools to path +os.putenv('PATH', os.getenv('PATH') + ':' + tools_bin) + +update_settings(k8s_upsert_timeout_secs=60) # on first tilt up, often can take longer than 30 seconds + +# set defaults +settings = { + "allowed_contexts": [ + "kind-capdo" + ], + "deploy_cert_manager": True, + "preload_images_for_kind": True, + "kind_cluster_name": "capdo", + "capi_version": "v1.0.0", + "cert_manager_version": "v1.1.0", + "kubernetes_version": "v1.22.3", +} + +keys = ["DO_B64ENCODED_CREDENTIALS"] + +# global settings +settings.update(read_json( + "tilt-settings.json", + default = {}, +)) + +if settings.get("trigger_mode") == "manual": + trigger_mode(TRIGGER_MODE_MANUAL) + +if "allowed_contexts" in settings: + allow_k8s_contexts(settings.get("allowed_contexts")) + +if "default_registry" in settings: + default_registry(settings.get("default_registry")) + +# deploy CAPI +def deploy_capi(): + version = settings.get("capi_version") + capi_uri = "https://github.com/kubernetes-sigs/cluster-api/releases/download/{}/cluster-api-components.yaml".format(version) + cmd = "curl -sSL {} | {} | kubectl apply -f -".format(capi_uri, envsubst_cmd) + local(cmd, quiet=True) + if settings.get("extra_args"): + extra_args = settings.get("extra_args") + if extra_args.get("core"): + core_extra_args = extra_args.get("core") + if core_extra_args: + for namespace in ["capi-system", "capi-webhook-system"]: + patch_args_with_extra_args(namespace, "capi-controller-manager", core_extra_args) + if extra_args.get("kubeadm-bootstrap"): + kb_extra_args = extra_args.get("kubeadm-bootstrap") + if kb_extra_args: + patch_args_with_extra_args("capi-kubeadm-bootstrap-system", "capi-kubeadm-bootstrap-controller-manager", kb_extra_args) + +def patch_args_with_extra_args(namespace, name, extra_args): + args_str = str(local('kubectl get deployments {} -n {} -o jsonpath={{.spec.template.spec.containers[1].args}}'.format(name, namespace))) + args_to_add = [arg for arg in extra_args if arg not in args_str] + if args_to_add: + args = args_str[1:-1].split() + args.extend(args_to_add) + patch = [{ + "op": "replace", + "path": "/spec/template/spec/containers/1/args", + "value": args, + }] + local("kubectl patch deployment {} -n {} --type json -p='{}'".format(name, namespace, str(encode_json(patch)).replace("\n", ""))) + + +# Users may define their own Tilt customizations in tilt.d. This directory is excluded from git and these files will +# not be checked in to version control. +def include_user_tilt_files(): + user_tiltfiles = listdir("tilt.d") + for f in user_tiltfiles: + include(f) + + +def append_arg_for_container_in_deployment(yaml_stream, name, namespace, contains_image_name, args): + for item in yaml_stream: + if item["kind"] == "Deployment" and item.get("metadata").get("name") == name and item.get("metadata").get("namespace") == namespace: + containers = item.get("spec").get("template").get("spec").get("containers") + for container in containers: + if contains_image_name in container.get("image"): + container.get("args").extend(args) + + +def fixup_yaml_empty_arrays(yaml_str): + yaml_str = yaml_str.replace("conditions: null", "conditions: []") + return yaml_str.replace("storedVersions: null", "storedVersions: []") + + +def validate_auth(): + substitutions = settings.get("kustomize_substitutions", {}) + missing = [k for k in keys if k not in substitutions] + if missing: + fail("missing kustomize_substitutions keys {} in tilt-setting.json".format(missing)) + +tilt_helper_dockerfile_header = """ +# Tilt image +FROM golang:1.16 as tilt-helper +# Support live reloading with Tilt +RUN wget --output-document /restart.sh --quiet https://raw.githubusercontent.com/windmilleng/rerun-process-wrapper/master/restart.sh && \ + wget --output-document /start.sh --quiet https://raw.githubusercontent.com/windmilleng/rerun-process-wrapper/master/start.sh && \ + chmod +x /start.sh && chmod +x /restart.sh +""" + +tilt_dockerfile_header = """ +FROM gcr.io/distroless/base:debug as tilt +WORKDIR / +COPY --from=tilt-helper /start.sh . +COPY --from=tilt-helper /restart.sh . +COPY manager . +""" + +# Build CAPDO and add feature gates +def capdo(): + # Apply the kustomized yaml for this provider + substitutions = settings.get("kustomize_substitutions", {}) + os.environ.update(substitutions) + + yaml = str(kustomizesub("./config/default")) + + # add extra_args if they are defined + if settings.get("extra_args"): + do_extra_args = settings.get("extra_args").get("do") + if do_extra_args: + yaml_dict = decode_yaml_stream(yaml) + append_arg_for_container_in_deployment(yaml_dict, "capdo-controller-manager", "capdo-system", "cluster-api-do-controller", do_extra_args) + yaml = str(encode_yaml_stream(yaml_dict)) + yaml = fixup_yaml_empty_arrays(yaml) + + # Set up a local_resource build of the provider's manager binary. + local_resource( + "manager", + cmd = 'mkdir -p .tiltbuild;CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags \'-extldflags "-static"\' -o .tiltbuild/manager', + deps = ["api", "cloud", "config", "controllers", "exp", "feature", "pkg", "go.mod", "go.sum", "main.go"] + ) + + dockerfile_contents = "\n".join([ + tilt_helper_dockerfile_header, + tilt_dockerfile_header, + ]) + + entrypoint = ["sh", "/start.sh", "/manager"] + extra_args = settings.get("extra_args") + if extra_args: + entrypoint.extend(extra_args) + + # Set up an image build for the provider. The live update configuration syncs the output from the local_resource + # build into the container. + docker_build( + ref = "gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller", + context = "./.tiltbuild/", + dockerfile_contents = dockerfile_contents, + target = "tilt", + entrypoint = entrypoint, + only = "manager", + live_update = [ + sync(".tiltbuild/manager", "/manager"), + run("sh /restart.sh"), + ], + ignore = ["templates"] + ) + + k8s_yaml(blob(yaml)) + +def base64_encode(to_encode): + encode_blob = local("echo '{}' | tr -d '\n' | base64 - | tr -d '\n'".format(to_encode), quiet=True) + return str(encode_blob) + +def base64_encode_file(path_to_encode): + encode_blob = local("cat {} | tr -d '\n' | base64 - | tr -d '\n'".format(path_to_encode), quiet=True) + return str(encode_blob) + +def read_file_from_path(path_to_read): + str_blob = local("cat {} | tr -d '\n'".format(path_to_read), quiet=True) + return str(str_blob) + +def base64_decode(to_decode): + decode_blob = local("echo '{}' | base64 --decode -".format(to_decode), quiet=True) + return str(decode_blob) + +def kustomizesub(folder): + yaml = local('hack/kustomize-sub.sh {}'.format(folder), quiet=True) + return yaml + +def waitforsystem(): + local("kubectl wait --for=condition=ready --timeout=300s pod --all -n capi-kubeadm-bootstrap-system") + local("kubectl wait --for=condition=ready --timeout=300s pod --all -n capi-kubeadm-control-plane-system") + local("kubectl wait --for=condition=ready --timeout=300s pod --all -n capi-system") + +############################## +# Actual work happens here +############################## + +validate_auth() + +include_user_tilt_files() + +load("ext://cert_manager", "deploy_cert_manager") + +if settings.get("deploy_cert_manager"): + deploy_cert_manager() + +deploy_capi() + +capdo() + +waitforsystem() diff --git a/api/v1alpha3/doc.go b/api/v1alpha3/doc.go index 42bf89d06..3c036c18d 100644 --- a/api/v1alpha3/doc.go +++ b/api/v1alpha3/doc.go @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Package v1alpha3 contains API Schema definitions for the infrastructure v1alpha3 API group package v1alpha3 -// +k8s:conversion-gen=sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4 +// +k8s:conversion-gen=sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1 diff --git a/api/v1alpha3/docluster_conversion.go b/api/v1alpha3/docluster_conversion.go index 9c4bfc6ad..2eb075314 100644 --- a/api/v1alpha3/docluster_conversion.go +++ b/api/v1alpha3/docluster_conversion.go @@ -17,23 +17,21 @@ limitations under the License. package v1alpha3 import ( - apiconversion "k8s.io/apimachinery/pkg/conversion" - infrav1alpha4 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" - clusterv1alpha3 "sigs.k8s.io/cluster-api/api/v1alpha3" - clusterv1alpha4 "sigs.k8s.io/cluster-api/api/v1alpha4" utilconversion "sigs.k8s.io/cluster-api/util/conversion" "sigs.k8s.io/controller-runtime/pkg/conversion" + + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" ) -// ConvertTo converts this DOCluster to the Hub version (v1alpha4). +// ConvertTo converts this DOCluster to the Hub version (v1beta1). func (src *DOCluster) ConvertTo(dstRaw conversion.Hub) error { // nolint - dst := dstRaw.(*infrav1alpha4.DOCluster) - if err := Convert_v1alpha3_DOCluster_To_v1alpha4_DOCluster(src, dst, nil); err != nil { + dst := dstRaw.(*infrav1.DOCluster) + if err := Convert_v1alpha3_DOCluster_To_v1beta1_DOCluster(src, dst, nil); err != nil { return err } // Manually restore data from annotations - restored := &infrav1alpha4.DOCluster{} + restored := &infrav1.DOCluster{} if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { return err } @@ -41,10 +39,10 @@ func (src *DOCluster) ConvertTo(dstRaw conversion.Hub) error { // nolint return nil } -// ConvertFrom converts from the Hub version (v1alpha4) to this version. +// ConvertFrom converts from the Hub version (v1beta1) to this version. func (dst *DOCluster) ConvertFrom(srcRaw conversion.Hub) error { // nolint - src := srcRaw.(*infrav1alpha4.DOCluster) - if err := Convert_v1alpha4_DOCluster_To_v1alpha3_DOCluster(src, dst, nil); err != nil { + src := srcRaw.(*infrav1.DOCluster) + if err := Convert_v1beta1_DOCluster_To_v1alpha3_DOCluster(src, dst, nil); err != nil { return err } @@ -56,24 +54,14 @@ func (dst *DOCluster) ConvertFrom(srcRaw conversion.Hub) error { // nolint return nil } -// ConvertTo converts this DOClusterList to the Hub version (v1alpha4). +// ConvertTo converts this DOClusterList to the Hub version (v1beta1). func (src *DOClusterList) ConvertTo(dstRaw conversion.Hub) error { // nolint - dst := dstRaw.(*infrav1alpha4.DOClusterList) - return Convert_v1alpha3_DOClusterList_To_v1alpha4_DOClusterList(src, dst, nil) + dst := dstRaw.(*infrav1.DOClusterList) + return Convert_v1alpha3_DOClusterList_To_v1beta1_DOClusterList(src, dst, nil) } -// ConvertFrom converts from the Hub version (v1alpha4) to this version. +// ConvertFrom converts from the Hub version (v1beta1) to this version. func (dst *DOClusterList) ConvertFrom(srcRaw conversion.Hub) error { // nolint - src := srcRaw.(*infrav1alpha4.DOClusterList) - return Convert_v1alpha4_DOClusterList_To_v1alpha3_DOClusterList(src, dst, nil) -} - -// Convert_v1alpha3_APIEndpoint_To_v1alpha4_APIEndpoint is an autogenerated conversion function. -func Convert_v1alpha3_APIEndpoint_To_v1alpha4_APIEndpoint(in *clusterv1alpha3.APIEndpoint, out *clusterv1alpha4.APIEndpoint, s apiconversion.Scope) error { - return clusterv1alpha3.Convert_v1alpha3_APIEndpoint_To_v1alpha4_APIEndpoint(in, out, s) -} - -// Convert_v1alpha4_APIEndpoint_To_v1alpha3_APIEndpoint is an autogenerated conversion function. -func Convert_v1alpha4_APIEndpoint_To_v1alpha3_APIEndpoint(in *clusterv1alpha4.APIEndpoint, out *clusterv1alpha3.APIEndpoint, s apiconversion.Scope) error { - return clusterv1alpha3.Convert_v1alpha4_APIEndpoint_To_v1alpha3_APIEndpoint(in, out, s) + src := srcRaw.(*infrav1.DOClusterList) + return Convert_v1beta1_DOClusterList_To_v1alpha3_DOClusterList(src, dst, nil) } diff --git a/api/v1alpha3/docluster_types.go b/api/v1alpha3/docluster_types.go index 1b81f1423..45f1da457 100644 --- a/api/v1alpha3/docluster_types.go +++ b/api/v1alpha3/docluster_types.go @@ -18,7 +18,7 @@ package v1alpha3 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha3" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" ) const ( diff --git a/api/v1alpha3/domachine_conversion.go b/api/v1alpha3/domachine_conversion.go index 9a940efff..b57e01a9c 100644 --- a/api/v1alpha3/domachine_conversion.go +++ b/api/v1alpha3/domachine_conversion.go @@ -17,20 +17,21 @@ limitations under the License. package v1alpha3 import ( - infrav1alpha4 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" utilconversion "sigs.k8s.io/cluster-api/util/conversion" "sigs.k8s.io/controller-runtime/pkg/conversion" + + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" ) -// ConvertTo converts this DOMachine to the Hub version (v1alpha4). +// ConvertTo converts this DOMachine to the Hub version (v1beta1). func (src *DOMachine) ConvertTo(dstRaw conversion.Hub) error { // nolint - dst := dstRaw.(*infrav1alpha4.DOMachine) - if err := Convert_v1alpha3_DOMachine_To_v1alpha4_DOMachine(src, dst, nil); err != nil { + dst := dstRaw.(*infrav1.DOMachine) + if err := Convert_v1alpha3_DOMachine_To_v1beta1_DOMachine(src, dst, nil); err != nil { return err } // Manually restore data from annotations - restored := &infrav1alpha4.DOMachine{} + restored := &infrav1.DOMachine{} if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { return err } @@ -38,10 +39,10 @@ func (src *DOMachine) ConvertTo(dstRaw conversion.Hub) error { // nolint return nil } -// ConvertFrom converts from the Hub version (v1alpha4) to this version. +// ConvertFrom converts from the Hub version (v1beta1) to this version. func (dst *DOMachine) ConvertFrom(srcRaw conversion.Hub) error { // nolint - src := srcRaw.(*infrav1alpha4.DOMachine) - if err := Convert_v1alpha4_DOMachine_To_v1alpha3_DOMachine(src, dst, nil); err != nil { + src := srcRaw.(*infrav1.DOMachine) + if err := Convert_v1beta1_DOMachine_To_v1alpha3_DOMachine(src, dst, nil); err != nil { return err } @@ -53,14 +54,14 @@ func (dst *DOMachine) ConvertFrom(srcRaw conversion.Hub) error { // nolint return nil } -// ConvertTo converts this DOMachineList to the Hub version (v1alpha4). +// ConvertTo converts this DOMachineList to the Hub version (v1beta1). func (src *DOMachineList) ConvertTo(dstRaw conversion.Hub) error { // nolint - dst := dstRaw.(*infrav1alpha4.DOMachineList) - return Convert_v1alpha3_DOMachineList_To_v1alpha4_DOMachineList(src, dst, nil) + dst := dstRaw.(*infrav1.DOMachineList) + return Convert_v1alpha3_DOMachineList_To_v1beta1_DOMachineList(src, dst, nil) } -// ConvertFrom converts from the Hub version (v1alpha4) to this version. +// ConvertFrom converts from the Hub version (v1beta1) to this version. func (dst *DOMachineList) ConvertFrom(srcRaw conversion.Hub) error { // nolint - src := srcRaw.(*infrav1alpha4.DOMachineList) - return Convert_v1alpha4_DOMachineList_To_v1alpha3_DOMachineList(src, dst, nil) + src := srcRaw.(*infrav1.DOMachineList) + return Convert_v1beta1_DOMachineList_To_v1alpha3_DOMachineList(src, dst, nil) } diff --git a/api/v1alpha3/domachinetemplate_conversion.go b/api/v1alpha3/domachinetemplate_conversion.go index 6f461bdfa..72bbfcc60 100644 --- a/api/v1alpha3/domachinetemplate_conversion.go +++ b/api/v1alpha3/domachinetemplate_conversion.go @@ -17,20 +17,21 @@ limitations under the License. package v1alpha3 import ( - infrav1alpha4 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" utilconversion "sigs.k8s.io/cluster-api/util/conversion" "sigs.k8s.io/controller-runtime/pkg/conversion" + + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" ) -// ConvertTo converts this DOMachineTemplate to the Hub version (v1alpha4). +// ConvertTo converts this DOMachineTemplate to the Hub version (v1beta1). func (src *DOMachineTemplate) ConvertTo(dstRaw conversion.Hub) error { // nolint - dst := dstRaw.(*infrav1alpha4.DOMachineTemplate) - if err := Convert_v1alpha3_DOMachineTemplate_To_v1alpha4_DOMachineTemplate(src, dst, nil); err != nil { + dst := dstRaw.(*infrav1.DOMachineTemplate) + if err := Convert_v1alpha3_DOMachineTemplate_To_v1beta1_DOMachineTemplate(src, dst, nil); err != nil { return err } // Manually restore data from annotations - restored := &infrav1alpha4.DOMachineTemplate{} + restored := &infrav1.DOMachineTemplate{} if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { return err } @@ -38,10 +39,10 @@ func (src *DOMachineTemplate) ConvertTo(dstRaw conversion.Hub) error { // nolint return nil } -// ConvertFrom converts from the Hub version (v1alpha4) to this version. +// ConvertFrom converts from the Hub version (v1beta1) to this version. func (dst *DOMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error { // nolint - src := srcRaw.(*infrav1alpha4.DOMachineTemplate) - if err := Convert_v1alpha4_DOMachineTemplate_To_v1alpha3_DOMachineTemplate(src, dst, nil); err != nil { + src := srcRaw.(*infrav1.DOMachineTemplate) + if err := Convert_v1beta1_DOMachineTemplate_To_v1alpha3_DOMachineTemplate(src, dst, nil); err != nil { return err } @@ -53,14 +54,14 @@ func (dst *DOMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error { // noli return nil } -// ConvertTo converts this DOMachineTemplateList to the Hub version (v1alpha4). +// ConvertTo converts this DOMachineTemplateList to the Hub version (v1beta1). func (src *DOMachineTemplateList) ConvertTo(dstRaw conversion.Hub) error { // nolint - dst := dstRaw.(*infrav1alpha4.DOMachineTemplateList) - return Convert_v1alpha3_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList(src, dst, nil) + dst := dstRaw.(*infrav1.DOMachineTemplateList) + return Convert_v1alpha3_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList(src, dst, nil) } -// ConvertFrom converts from the Hub version (v1alpha4) to this version. +// ConvertFrom converts from the Hub version (v1beta1) to this version. func (dst *DOMachineTemplateList) ConvertFrom(srcRaw conversion.Hub) error { // nolint - src := srcRaw.(*infrav1alpha4.DOMachineTemplateList) - return Convert_v1alpha4_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList(src, dst, nil) + src := srcRaw.(*infrav1.DOMachineTemplateList) + return Convert_v1beta1_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList(src, dst, nil) } diff --git a/api/v1alpha3/groupversion_info.go b/api/v1alpha3/groupversion_info.go index a3bce8cca..8f9a24eaf 100644 --- a/api/v1alpha3/groupversion_info.go +++ b/api/v1alpha3/groupversion_info.go @@ -14,10 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Package v1alpha3 contains API Schema definitions for the infrastructure v1alpha3 API group +package v1alpha3 + // +kubebuilder:object:generate=true // +groupName=infrastructure.cluster.x-k8s.io -package v1alpha3 import ( "k8s.io/apimachinery/pkg/runtime/schema" diff --git a/api/v1alpha3/types.go b/api/v1alpha3/types.go index cfac46434..1577a4d39 100644 --- a/api/v1alpha3/types.go +++ b/api/v1alpha3/types.go @@ -21,14 +21,6 @@ import ( "strings" ) -// APIEndpoint represents a reachable Kubernetes API endpoint. -type APIEndpoint struct { - // The hostname on which the API server is serving. - Host string `json:"host"` - // The port on which the API server is serving. - Port int `json:"port"` -} - // DOSafeName returns DigitalOcean safe name with replacing '.' and '/' to '-' // since DigitalOcean doesn't support naming with those character. func DOSafeName(name string) string { diff --git a/api/v1alpha3/zz_generated.conversion.go b/api/v1alpha3/zz_generated.conversion.go index 9b69b0f40..3434acf6c 100644 --- a/api/v1alpha3/zz_generated.conversion.go +++ b/api/v1alpha3/zz_generated.conversion.go @@ -1,4 +1,4 @@ -// +build !ignore_autogenerated +// +build !ignore_autogenerated_core_v1alpha3 /* Copyright The Kubernetes Authors. @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Code generated by conversion-gen-v0.20.4. DO NOT EDIT. +// Code generated by conversion-gen-v0.22.2. DO NOT EDIT. package v1alpha3 @@ -27,9 +27,7 @@ import ( conversion "k8s.io/apimachinery/pkg/conversion" runtime "k8s.io/apimachinery/pkg/runtime" intstr "k8s.io/apimachinery/pkg/util/intstr" - v1alpha4 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" - apiv1alpha3 "sigs.k8s.io/cluster-api/api/v1alpha3" - apiv1alpha4 "sigs.k8s.io/cluster-api/api/v1alpha4" + v1beta1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" errors "sigs.k8s.io/cluster-api/errors" ) @@ -40,244 +38,234 @@ func init() { // RegisterConversions adds conversion functions to the given scheme. // Public to allow building arbitrary schemes. func RegisterConversions(s *runtime.Scheme) error { - if err := s.AddGeneratedConversionFunc((*BuildTagParams)(nil), (*v1alpha4.BuildTagParams)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_BuildTagParams_To_v1alpha4_BuildTagParams(a.(*BuildTagParams), b.(*v1alpha4.BuildTagParams), scope) + if err := s.AddGeneratedConversionFunc((*BuildTagParams)(nil), (*v1beta1.BuildTagParams)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_BuildTagParams_To_v1beta1_BuildTagParams(a.(*BuildTagParams), b.(*v1beta1.BuildTagParams), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.BuildTagParams)(nil), (*BuildTagParams)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_BuildTagParams_To_v1alpha3_BuildTagParams(a.(*v1alpha4.BuildTagParams), b.(*BuildTagParams), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.BuildTagParams)(nil), (*BuildTagParams)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_BuildTagParams_To_v1alpha3_BuildTagParams(a.(*v1beta1.BuildTagParams), b.(*BuildTagParams), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOCluster)(nil), (*v1alpha4.DOCluster)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOCluster_To_v1alpha4_DOCluster(a.(*DOCluster), b.(*v1alpha4.DOCluster), scope) + if err := s.AddGeneratedConversionFunc((*DOCluster)(nil), (*v1beta1.DOCluster)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOCluster_To_v1beta1_DOCluster(a.(*DOCluster), b.(*v1beta1.DOCluster), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOCluster)(nil), (*DOCluster)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOCluster_To_v1alpha3_DOCluster(a.(*v1alpha4.DOCluster), b.(*DOCluster), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOCluster)(nil), (*DOCluster)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOCluster_To_v1alpha3_DOCluster(a.(*v1beta1.DOCluster), b.(*DOCluster), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOClusterList)(nil), (*v1alpha4.DOClusterList)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOClusterList_To_v1alpha4_DOClusterList(a.(*DOClusterList), b.(*v1alpha4.DOClusterList), scope) + if err := s.AddGeneratedConversionFunc((*DOClusterList)(nil), (*v1beta1.DOClusterList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOClusterList_To_v1beta1_DOClusterList(a.(*DOClusterList), b.(*v1beta1.DOClusterList), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOClusterList)(nil), (*DOClusterList)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOClusterList_To_v1alpha3_DOClusterList(a.(*v1alpha4.DOClusterList), b.(*DOClusterList), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOClusterList)(nil), (*DOClusterList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOClusterList_To_v1alpha3_DOClusterList(a.(*v1beta1.DOClusterList), b.(*DOClusterList), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOClusterSpec)(nil), (*v1alpha4.DOClusterSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOClusterSpec_To_v1alpha4_DOClusterSpec(a.(*DOClusterSpec), b.(*v1alpha4.DOClusterSpec), scope) + if err := s.AddGeneratedConversionFunc((*DOClusterSpec)(nil), (*v1beta1.DOClusterSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOClusterSpec_To_v1beta1_DOClusterSpec(a.(*DOClusterSpec), b.(*v1beta1.DOClusterSpec), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOClusterSpec)(nil), (*DOClusterSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOClusterSpec_To_v1alpha3_DOClusterSpec(a.(*v1alpha4.DOClusterSpec), b.(*DOClusterSpec), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOClusterSpec)(nil), (*DOClusterSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOClusterSpec_To_v1alpha3_DOClusterSpec(a.(*v1beta1.DOClusterSpec), b.(*DOClusterSpec), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOClusterStatus)(nil), (*v1alpha4.DOClusterStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOClusterStatus_To_v1alpha4_DOClusterStatus(a.(*DOClusterStatus), b.(*v1alpha4.DOClusterStatus), scope) + if err := s.AddGeneratedConversionFunc((*DOClusterStatus)(nil), (*v1beta1.DOClusterStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOClusterStatus_To_v1beta1_DOClusterStatus(a.(*DOClusterStatus), b.(*v1beta1.DOClusterStatus), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOClusterStatus)(nil), (*DOClusterStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOClusterStatus_To_v1alpha3_DOClusterStatus(a.(*v1alpha4.DOClusterStatus), b.(*DOClusterStatus), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOClusterStatus)(nil), (*DOClusterStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOClusterStatus_To_v1alpha3_DOClusterStatus(a.(*v1beta1.DOClusterStatus), b.(*DOClusterStatus), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOControlPlaneDNS)(nil), (*v1alpha4.DOControlPlaneDNS)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOControlPlaneDNS_To_v1alpha4_DOControlPlaneDNS(a.(*DOControlPlaneDNS), b.(*v1alpha4.DOControlPlaneDNS), scope) + if err := s.AddGeneratedConversionFunc((*DOControlPlaneDNS)(nil), (*v1beta1.DOControlPlaneDNS)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOControlPlaneDNS_To_v1beta1_DOControlPlaneDNS(a.(*DOControlPlaneDNS), b.(*v1beta1.DOControlPlaneDNS), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOControlPlaneDNS)(nil), (*DOControlPlaneDNS)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOControlPlaneDNS_To_v1alpha3_DOControlPlaneDNS(a.(*v1alpha4.DOControlPlaneDNS), b.(*DOControlPlaneDNS), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOControlPlaneDNS)(nil), (*DOControlPlaneDNS)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOControlPlaneDNS_To_v1alpha3_DOControlPlaneDNS(a.(*v1beta1.DOControlPlaneDNS), b.(*DOControlPlaneDNS), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOLoadBalancer)(nil), (*v1alpha4.DOLoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOLoadBalancer_To_v1alpha4_DOLoadBalancer(a.(*DOLoadBalancer), b.(*v1alpha4.DOLoadBalancer), scope) + if err := s.AddGeneratedConversionFunc((*DOLoadBalancer)(nil), (*v1beta1.DOLoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOLoadBalancer_To_v1beta1_DOLoadBalancer(a.(*DOLoadBalancer), b.(*v1beta1.DOLoadBalancer), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOLoadBalancer)(nil), (*DOLoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOLoadBalancer_To_v1alpha3_DOLoadBalancer(a.(*v1alpha4.DOLoadBalancer), b.(*DOLoadBalancer), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOLoadBalancer)(nil), (*DOLoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOLoadBalancer_To_v1alpha3_DOLoadBalancer(a.(*v1beta1.DOLoadBalancer), b.(*DOLoadBalancer), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOLoadBalancerHealthCheck)(nil), (*v1alpha4.DOLoadBalancerHealthCheck)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck(a.(*DOLoadBalancerHealthCheck), b.(*v1alpha4.DOLoadBalancerHealthCheck), scope) + if err := s.AddGeneratedConversionFunc((*DOLoadBalancerHealthCheck)(nil), (*v1beta1.DOLoadBalancerHealthCheck)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck(a.(*DOLoadBalancerHealthCheck), b.(*v1beta1.DOLoadBalancerHealthCheck), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOLoadBalancerHealthCheck)(nil), (*DOLoadBalancerHealthCheck)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck(a.(*v1alpha4.DOLoadBalancerHealthCheck), b.(*DOLoadBalancerHealthCheck), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOLoadBalancerHealthCheck)(nil), (*DOLoadBalancerHealthCheck)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck(a.(*v1beta1.DOLoadBalancerHealthCheck), b.(*DOLoadBalancerHealthCheck), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOMachine)(nil), (*v1alpha4.DOMachine)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOMachine_To_v1alpha4_DOMachine(a.(*DOMachine), b.(*v1alpha4.DOMachine), scope) + if err := s.AddGeneratedConversionFunc((*DOMachine)(nil), (*v1beta1.DOMachine)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOMachine_To_v1beta1_DOMachine(a.(*DOMachine), b.(*v1beta1.DOMachine), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOMachine)(nil), (*DOMachine)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOMachine_To_v1alpha3_DOMachine(a.(*v1alpha4.DOMachine), b.(*DOMachine), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachine)(nil), (*DOMachine)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachine_To_v1alpha3_DOMachine(a.(*v1beta1.DOMachine), b.(*DOMachine), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOMachineList)(nil), (*v1alpha4.DOMachineList)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOMachineList_To_v1alpha4_DOMachineList(a.(*DOMachineList), b.(*v1alpha4.DOMachineList), scope) + if err := s.AddGeneratedConversionFunc((*DOMachineList)(nil), (*v1beta1.DOMachineList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOMachineList_To_v1beta1_DOMachineList(a.(*DOMachineList), b.(*v1beta1.DOMachineList), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOMachineList)(nil), (*DOMachineList)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOMachineList_To_v1alpha3_DOMachineList(a.(*v1alpha4.DOMachineList), b.(*DOMachineList), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineList)(nil), (*DOMachineList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineList_To_v1alpha3_DOMachineList(a.(*v1beta1.DOMachineList), b.(*DOMachineList), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOMachineSpec)(nil), (*v1alpha4.DOMachineSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOMachineSpec_To_v1alpha4_DOMachineSpec(a.(*DOMachineSpec), b.(*v1alpha4.DOMachineSpec), scope) + if err := s.AddGeneratedConversionFunc((*DOMachineSpec)(nil), (*v1beta1.DOMachineSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOMachineSpec_To_v1beta1_DOMachineSpec(a.(*DOMachineSpec), b.(*v1beta1.DOMachineSpec), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOMachineSpec)(nil), (*DOMachineSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOMachineSpec_To_v1alpha3_DOMachineSpec(a.(*v1alpha4.DOMachineSpec), b.(*DOMachineSpec), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineSpec)(nil), (*DOMachineSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineSpec_To_v1alpha3_DOMachineSpec(a.(*v1beta1.DOMachineSpec), b.(*DOMachineSpec), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOMachineStatus)(nil), (*v1alpha4.DOMachineStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOMachineStatus_To_v1alpha4_DOMachineStatus(a.(*DOMachineStatus), b.(*v1alpha4.DOMachineStatus), scope) + if err := s.AddGeneratedConversionFunc((*DOMachineStatus)(nil), (*v1beta1.DOMachineStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOMachineStatus_To_v1beta1_DOMachineStatus(a.(*DOMachineStatus), b.(*v1beta1.DOMachineStatus), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOMachineStatus)(nil), (*DOMachineStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOMachineStatus_To_v1alpha3_DOMachineStatus(a.(*v1alpha4.DOMachineStatus), b.(*DOMachineStatus), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineStatus)(nil), (*DOMachineStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineStatus_To_v1alpha3_DOMachineStatus(a.(*v1beta1.DOMachineStatus), b.(*DOMachineStatus), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOMachineTemplate)(nil), (*v1alpha4.DOMachineTemplate)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOMachineTemplate_To_v1alpha4_DOMachineTemplate(a.(*DOMachineTemplate), b.(*v1alpha4.DOMachineTemplate), scope) + if err := s.AddGeneratedConversionFunc((*DOMachineTemplate)(nil), (*v1beta1.DOMachineTemplate)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOMachineTemplate_To_v1beta1_DOMachineTemplate(a.(*DOMachineTemplate), b.(*v1beta1.DOMachineTemplate), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOMachineTemplate)(nil), (*DOMachineTemplate)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOMachineTemplate_To_v1alpha3_DOMachineTemplate(a.(*v1alpha4.DOMachineTemplate), b.(*DOMachineTemplate), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineTemplate)(nil), (*DOMachineTemplate)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineTemplate_To_v1alpha3_DOMachineTemplate(a.(*v1beta1.DOMachineTemplate), b.(*DOMachineTemplate), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOMachineTemplateList)(nil), (*v1alpha4.DOMachineTemplateList)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList(a.(*DOMachineTemplateList), b.(*v1alpha4.DOMachineTemplateList), scope) + if err := s.AddGeneratedConversionFunc((*DOMachineTemplateList)(nil), (*v1beta1.DOMachineTemplateList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList(a.(*DOMachineTemplateList), b.(*v1beta1.DOMachineTemplateList), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOMachineTemplateList)(nil), (*DOMachineTemplateList)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList(a.(*v1alpha4.DOMachineTemplateList), b.(*DOMachineTemplateList), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineTemplateList)(nil), (*DOMachineTemplateList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList(a.(*v1beta1.DOMachineTemplateList), b.(*DOMachineTemplateList), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOMachineTemplateResource)(nil), (*v1alpha4.DOMachineTemplateResource)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource(a.(*DOMachineTemplateResource), b.(*v1alpha4.DOMachineTemplateResource), scope) + if err := s.AddGeneratedConversionFunc((*DOMachineTemplateResource)(nil), (*v1beta1.DOMachineTemplateResource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource(a.(*DOMachineTemplateResource), b.(*v1beta1.DOMachineTemplateResource), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOMachineTemplateResource)(nil), (*DOMachineTemplateResource)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource(a.(*v1alpha4.DOMachineTemplateResource), b.(*DOMachineTemplateResource), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineTemplateResource)(nil), (*DOMachineTemplateResource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource(a.(*v1beta1.DOMachineTemplateResource), b.(*DOMachineTemplateResource), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOMachineTemplateSpec)(nil), (*v1alpha4.DOMachineTemplateSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec(a.(*DOMachineTemplateSpec), b.(*v1alpha4.DOMachineTemplateSpec), scope) + if err := s.AddGeneratedConversionFunc((*DOMachineTemplateSpec)(nil), (*v1beta1.DOMachineTemplateSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec(a.(*DOMachineTemplateSpec), b.(*v1beta1.DOMachineTemplateSpec), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOMachineTemplateSpec)(nil), (*DOMachineTemplateSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec(a.(*v1alpha4.DOMachineTemplateSpec), b.(*DOMachineTemplateSpec), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineTemplateSpec)(nil), (*DOMachineTemplateSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec(a.(*v1beta1.DOMachineTemplateSpec), b.(*DOMachineTemplateSpec), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DONetwork)(nil), (*v1alpha4.DONetwork)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DONetwork_To_v1alpha4_DONetwork(a.(*DONetwork), b.(*v1alpha4.DONetwork), scope) + if err := s.AddGeneratedConversionFunc((*DONetwork)(nil), (*v1beta1.DONetwork)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DONetwork_To_v1beta1_DONetwork(a.(*DONetwork), b.(*v1beta1.DONetwork), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DONetwork)(nil), (*DONetwork)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DONetwork_To_v1alpha3_DONetwork(a.(*v1alpha4.DONetwork), b.(*DONetwork), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DONetwork)(nil), (*DONetwork)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DONetwork_To_v1alpha3_DONetwork(a.(*v1beta1.DONetwork), b.(*DONetwork), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DONetworkResource)(nil), (*v1alpha4.DONetworkResource)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DONetworkResource_To_v1alpha4_DONetworkResource(a.(*DONetworkResource), b.(*v1alpha4.DONetworkResource), scope) + if err := s.AddGeneratedConversionFunc((*DONetworkResource)(nil), (*v1beta1.DONetworkResource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DONetworkResource_To_v1beta1_DONetworkResource(a.(*DONetworkResource), b.(*v1beta1.DONetworkResource), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DONetworkResource)(nil), (*DONetworkResource)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DONetworkResource_To_v1alpha3_DONetworkResource(a.(*v1alpha4.DONetworkResource), b.(*DONetworkResource), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DONetworkResource)(nil), (*DONetworkResource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DONetworkResource_To_v1alpha3_DONetworkResource(a.(*v1beta1.DONetworkResource), b.(*DONetworkResource), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOResourceReference)(nil), (*v1alpha4.DOResourceReference)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOResourceReference_To_v1alpha4_DOResourceReference(a.(*DOResourceReference), b.(*v1alpha4.DOResourceReference), scope) + if err := s.AddGeneratedConversionFunc((*DOResourceReference)(nil), (*v1beta1.DOResourceReference)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOResourceReference_To_v1beta1_DOResourceReference(a.(*DOResourceReference), b.(*v1beta1.DOResourceReference), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOResourceReference)(nil), (*DOResourceReference)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOResourceReference_To_v1alpha3_DOResourceReference(a.(*v1alpha4.DOResourceReference), b.(*DOResourceReference), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOResourceReference)(nil), (*DOResourceReference)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOResourceReference_To_v1alpha3_DOResourceReference(a.(*v1beta1.DOResourceReference), b.(*DOResourceReference), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DOVPC)(nil), (*v1alpha4.DOVPC)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DOVPC_To_v1alpha4_DOVPC(a.(*DOVPC), b.(*v1alpha4.DOVPC), scope) + if err := s.AddGeneratedConversionFunc((*DOVPC)(nil), (*v1beta1.DOVPC)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DOVPC_To_v1beta1_DOVPC(a.(*DOVPC), b.(*v1beta1.DOVPC), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DOVPC)(nil), (*DOVPC)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DOVPC_To_v1alpha3_DOVPC(a.(*v1alpha4.DOVPC), b.(*DOVPC), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DOVPC)(nil), (*DOVPC)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOVPC_To_v1alpha3_DOVPC(a.(*v1beta1.DOVPC), b.(*DOVPC), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*DataDisk)(nil), (*v1alpha4.DataDisk)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_DataDisk_To_v1alpha4_DataDisk(a.(*DataDisk), b.(*v1alpha4.DataDisk), scope) + if err := s.AddGeneratedConversionFunc((*DataDisk)(nil), (*v1beta1.DataDisk)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_DataDisk_To_v1beta1_DataDisk(a.(*DataDisk), b.(*v1beta1.DataDisk), scope) }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha4.DataDisk)(nil), (*DataDisk)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_DataDisk_To_v1alpha3_DataDisk(a.(*v1alpha4.DataDisk), b.(*DataDisk), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*apiv1alpha3.APIEndpoint)(nil), (*apiv1alpha4.APIEndpoint)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_APIEndpoint_To_v1alpha4_APIEndpoint(a.(*apiv1alpha3.APIEndpoint), b.(*apiv1alpha4.APIEndpoint), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*apiv1alpha4.APIEndpoint)(nil), (*apiv1alpha3.APIEndpoint)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_APIEndpoint_To_v1alpha3_APIEndpoint(a.(*apiv1alpha4.APIEndpoint), b.(*apiv1alpha3.APIEndpoint), scope) + if err := s.AddGeneratedConversionFunc((*v1beta1.DataDisk)(nil), (*DataDisk)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DataDisk_To_v1alpha3_DataDisk(a.(*v1beta1.DataDisk), b.(*DataDisk), scope) }); err != nil { return err } return nil } -func autoConvert_v1alpha3_BuildTagParams_To_v1alpha4_BuildTagParams(in *BuildTagParams, out *v1alpha4.BuildTagParams, s conversion.Scope) error { +func autoConvert_v1alpha3_BuildTagParams_To_v1beta1_BuildTagParams(in *BuildTagParams, out *v1beta1.BuildTagParams, s conversion.Scope) error { out.ClusterName = in.ClusterName out.ClusterUID = in.ClusterUID out.Name = in.Name out.Role = in.Role - out.Additional = *(*v1alpha4.Tags)(unsafe.Pointer(&in.Additional)) + out.Additional = *(*v1beta1.Tags)(unsafe.Pointer(&in.Additional)) return nil } -// Convert_v1alpha3_BuildTagParams_To_v1alpha4_BuildTagParams is an autogenerated conversion function. -func Convert_v1alpha3_BuildTagParams_To_v1alpha4_BuildTagParams(in *BuildTagParams, out *v1alpha4.BuildTagParams, s conversion.Scope) error { - return autoConvert_v1alpha3_BuildTagParams_To_v1alpha4_BuildTagParams(in, out, s) +// Convert_v1alpha3_BuildTagParams_To_v1beta1_BuildTagParams is an autogenerated conversion function. +func Convert_v1alpha3_BuildTagParams_To_v1beta1_BuildTagParams(in *BuildTagParams, out *v1beta1.BuildTagParams, s conversion.Scope) error { + return autoConvert_v1alpha3_BuildTagParams_To_v1beta1_BuildTagParams(in, out, s) } -func autoConvert_v1alpha4_BuildTagParams_To_v1alpha3_BuildTagParams(in *v1alpha4.BuildTagParams, out *BuildTagParams, s conversion.Scope) error { +func autoConvert_v1beta1_BuildTagParams_To_v1alpha3_BuildTagParams(in *v1beta1.BuildTagParams, out *BuildTagParams, s conversion.Scope) error { out.ClusterName = in.ClusterName out.ClusterUID = in.ClusterUID out.Name = in.Name @@ -286,198 +274,174 @@ func autoConvert_v1alpha4_BuildTagParams_To_v1alpha3_BuildTagParams(in *v1alpha4 return nil } -// Convert_v1alpha4_BuildTagParams_To_v1alpha3_BuildTagParams is an autogenerated conversion function. -func Convert_v1alpha4_BuildTagParams_To_v1alpha3_BuildTagParams(in *v1alpha4.BuildTagParams, out *BuildTagParams, s conversion.Scope) error { - return autoConvert_v1alpha4_BuildTagParams_To_v1alpha3_BuildTagParams(in, out, s) +// Convert_v1beta1_BuildTagParams_To_v1alpha3_BuildTagParams is an autogenerated conversion function. +func Convert_v1beta1_BuildTagParams_To_v1alpha3_BuildTagParams(in *v1beta1.BuildTagParams, out *BuildTagParams, s conversion.Scope) error { + return autoConvert_v1beta1_BuildTagParams_To_v1alpha3_BuildTagParams(in, out, s) } -func autoConvert_v1alpha3_DOCluster_To_v1alpha4_DOCluster(in *DOCluster, out *v1alpha4.DOCluster, s conversion.Scope) error { +func autoConvert_v1alpha3_DOCluster_To_v1beta1_DOCluster(in *DOCluster, out *v1beta1.DOCluster, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta - if err := Convert_v1alpha3_DOClusterSpec_To_v1alpha4_DOClusterSpec(&in.Spec, &out.Spec, s); err != nil { + if err := Convert_v1alpha3_DOClusterSpec_To_v1beta1_DOClusterSpec(&in.Spec, &out.Spec, s); err != nil { return err } - if err := Convert_v1alpha3_DOClusterStatus_To_v1alpha4_DOClusterStatus(&in.Status, &out.Status, s); err != nil { + if err := Convert_v1alpha3_DOClusterStatus_To_v1beta1_DOClusterStatus(&in.Status, &out.Status, s); err != nil { return err } return nil } -// Convert_v1alpha3_DOCluster_To_v1alpha4_DOCluster is an autogenerated conversion function. -func Convert_v1alpha3_DOCluster_To_v1alpha4_DOCluster(in *DOCluster, out *v1alpha4.DOCluster, s conversion.Scope) error { - return autoConvert_v1alpha3_DOCluster_To_v1alpha4_DOCluster(in, out, s) +// Convert_v1alpha3_DOCluster_To_v1beta1_DOCluster is an autogenerated conversion function. +func Convert_v1alpha3_DOCluster_To_v1beta1_DOCluster(in *DOCluster, out *v1beta1.DOCluster, s conversion.Scope) error { + return autoConvert_v1alpha3_DOCluster_To_v1beta1_DOCluster(in, out, s) } -func autoConvert_v1alpha4_DOCluster_To_v1alpha3_DOCluster(in *v1alpha4.DOCluster, out *DOCluster, s conversion.Scope) error { +func autoConvert_v1beta1_DOCluster_To_v1alpha3_DOCluster(in *v1beta1.DOCluster, out *DOCluster, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta - if err := Convert_v1alpha4_DOClusterSpec_To_v1alpha3_DOClusterSpec(&in.Spec, &out.Spec, s); err != nil { + if err := Convert_v1beta1_DOClusterSpec_To_v1alpha3_DOClusterSpec(&in.Spec, &out.Spec, s); err != nil { return err } - if err := Convert_v1alpha4_DOClusterStatus_To_v1alpha3_DOClusterStatus(&in.Status, &out.Status, s); err != nil { + if err := Convert_v1beta1_DOClusterStatus_To_v1alpha3_DOClusterStatus(&in.Status, &out.Status, s); err != nil { return err } return nil } -// Convert_v1alpha4_DOCluster_To_v1alpha3_DOCluster is an autogenerated conversion function. -func Convert_v1alpha4_DOCluster_To_v1alpha3_DOCluster(in *v1alpha4.DOCluster, out *DOCluster, s conversion.Scope) error { - return autoConvert_v1alpha4_DOCluster_To_v1alpha3_DOCluster(in, out, s) +// Convert_v1beta1_DOCluster_To_v1alpha3_DOCluster is an autogenerated conversion function. +func Convert_v1beta1_DOCluster_To_v1alpha3_DOCluster(in *v1beta1.DOCluster, out *DOCluster, s conversion.Scope) error { + return autoConvert_v1beta1_DOCluster_To_v1alpha3_DOCluster(in, out, s) } -func autoConvert_v1alpha3_DOClusterList_To_v1alpha4_DOClusterList(in *DOClusterList, out *v1alpha4.DOClusterList, s conversion.Scope) error { +func autoConvert_v1alpha3_DOClusterList_To_v1beta1_DOClusterList(in *DOClusterList, out *v1beta1.DOClusterList, s conversion.Scope) error { out.ListMeta = in.ListMeta - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]v1alpha4.DOCluster, len(*in)) - for i := range *in { - if err := Convert_v1alpha3_DOCluster_To_v1alpha4_DOCluster(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Items = nil - } + out.Items = *(*[]v1beta1.DOCluster)(unsafe.Pointer(&in.Items)) return nil } -// Convert_v1alpha3_DOClusterList_To_v1alpha4_DOClusterList is an autogenerated conversion function. -func Convert_v1alpha3_DOClusterList_To_v1alpha4_DOClusterList(in *DOClusterList, out *v1alpha4.DOClusterList, s conversion.Scope) error { - return autoConvert_v1alpha3_DOClusterList_To_v1alpha4_DOClusterList(in, out, s) +// Convert_v1alpha3_DOClusterList_To_v1beta1_DOClusterList is an autogenerated conversion function. +func Convert_v1alpha3_DOClusterList_To_v1beta1_DOClusterList(in *DOClusterList, out *v1beta1.DOClusterList, s conversion.Scope) error { + return autoConvert_v1alpha3_DOClusterList_To_v1beta1_DOClusterList(in, out, s) } -func autoConvert_v1alpha4_DOClusterList_To_v1alpha3_DOClusterList(in *v1alpha4.DOClusterList, out *DOClusterList, s conversion.Scope) error { +func autoConvert_v1beta1_DOClusterList_To_v1alpha3_DOClusterList(in *v1beta1.DOClusterList, out *DOClusterList, s conversion.Scope) error { out.ListMeta = in.ListMeta - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]DOCluster, len(*in)) - for i := range *in { - if err := Convert_v1alpha4_DOCluster_To_v1alpha3_DOCluster(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Items = nil - } + out.Items = *(*[]DOCluster)(unsafe.Pointer(&in.Items)) return nil } -// Convert_v1alpha4_DOClusterList_To_v1alpha3_DOClusterList is an autogenerated conversion function. -func Convert_v1alpha4_DOClusterList_To_v1alpha3_DOClusterList(in *v1alpha4.DOClusterList, out *DOClusterList, s conversion.Scope) error { - return autoConvert_v1alpha4_DOClusterList_To_v1alpha3_DOClusterList(in, out, s) +// Convert_v1beta1_DOClusterList_To_v1alpha3_DOClusterList is an autogenerated conversion function. +func Convert_v1beta1_DOClusterList_To_v1alpha3_DOClusterList(in *v1beta1.DOClusterList, out *DOClusterList, s conversion.Scope) error { + return autoConvert_v1beta1_DOClusterList_To_v1alpha3_DOClusterList(in, out, s) } -func autoConvert_v1alpha3_DOClusterSpec_To_v1alpha4_DOClusterSpec(in *DOClusterSpec, out *v1alpha4.DOClusterSpec, s conversion.Scope) error { +func autoConvert_v1alpha3_DOClusterSpec_To_v1beta1_DOClusterSpec(in *DOClusterSpec, out *v1beta1.DOClusterSpec, s conversion.Scope) error { out.Region = in.Region - if err := Convert_v1alpha3_DONetwork_To_v1alpha4_DONetwork(&in.Network, &out.Network, s); err != nil { - return err - } - if err := Convert_v1alpha3_APIEndpoint_To_v1alpha4_APIEndpoint(&in.ControlPlaneEndpoint, &out.ControlPlaneEndpoint, s); err != nil { + if err := Convert_v1alpha3_DONetwork_To_v1beta1_DONetwork(&in.Network, &out.Network, s); err != nil { return err } - out.ControlPlaneDNS = (*v1alpha4.DOControlPlaneDNS)(unsafe.Pointer(in.ControlPlaneDNS)) + out.ControlPlaneEndpoint = in.ControlPlaneEndpoint + out.ControlPlaneDNS = (*v1beta1.DOControlPlaneDNS)(unsafe.Pointer(in.ControlPlaneDNS)) return nil } -// Convert_v1alpha3_DOClusterSpec_To_v1alpha4_DOClusterSpec is an autogenerated conversion function. -func Convert_v1alpha3_DOClusterSpec_To_v1alpha4_DOClusterSpec(in *DOClusterSpec, out *v1alpha4.DOClusterSpec, s conversion.Scope) error { - return autoConvert_v1alpha3_DOClusterSpec_To_v1alpha4_DOClusterSpec(in, out, s) +// Convert_v1alpha3_DOClusterSpec_To_v1beta1_DOClusterSpec is an autogenerated conversion function. +func Convert_v1alpha3_DOClusterSpec_To_v1beta1_DOClusterSpec(in *DOClusterSpec, out *v1beta1.DOClusterSpec, s conversion.Scope) error { + return autoConvert_v1alpha3_DOClusterSpec_To_v1beta1_DOClusterSpec(in, out, s) } -func autoConvert_v1alpha4_DOClusterSpec_To_v1alpha3_DOClusterSpec(in *v1alpha4.DOClusterSpec, out *DOClusterSpec, s conversion.Scope) error { +func autoConvert_v1beta1_DOClusterSpec_To_v1alpha3_DOClusterSpec(in *v1beta1.DOClusterSpec, out *DOClusterSpec, s conversion.Scope) error { out.Region = in.Region - if err := Convert_v1alpha4_DONetwork_To_v1alpha3_DONetwork(&in.Network, &out.Network, s); err != nil { - return err - } - if err := Convert_v1alpha4_APIEndpoint_To_v1alpha3_APIEndpoint(&in.ControlPlaneEndpoint, &out.ControlPlaneEndpoint, s); err != nil { + if err := Convert_v1beta1_DONetwork_To_v1alpha3_DONetwork(&in.Network, &out.Network, s); err != nil { return err } + out.ControlPlaneEndpoint = in.ControlPlaneEndpoint out.ControlPlaneDNS = (*DOControlPlaneDNS)(unsafe.Pointer(in.ControlPlaneDNS)) return nil } -// Convert_v1alpha4_DOClusterSpec_To_v1alpha3_DOClusterSpec is an autogenerated conversion function. -func Convert_v1alpha4_DOClusterSpec_To_v1alpha3_DOClusterSpec(in *v1alpha4.DOClusterSpec, out *DOClusterSpec, s conversion.Scope) error { - return autoConvert_v1alpha4_DOClusterSpec_To_v1alpha3_DOClusterSpec(in, out, s) +// Convert_v1beta1_DOClusterSpec_To_v1alpha3_DOClusterSpec is an autogenerated conversion function. +func Convert_v1beta1_DOClusterSpec_To_v1alpha3_DOClusterSpec(in *v1beta1.DOClusterSpec, out *DOClusterSpec, s conversion.Scope) error { + return autoConvert_v1beta1_DOClusterSpec_To_v1alpha3_DOClusterSpec(in, out, s) } -func autoConvert_v1alpha3_DOClusterStatus_To_v1alpha4_DOClusterStatus(in *DOClusterStatus, out *v1alpha4.DOClusterStatus, s conversion.Scope) error { +func autoConvert_v1alpha3_DOClusterStatus_To_v1beta1_DOClusterStatus(in *DOClusterStatus, out *v1beta1.DOClusterStatus, s conversion.Scope) error { out.Ready = in.Ready out.ControlPlaneDNSRecordReady = in.ControlPlaneDNSRecordReady - if err := Convert_v1alpha3_DONetworkResource_To_v1alpha4_DONetworkResource(&in.Network, &out.Network, s); err != nil { + if err := Convert_v1alpha3_DONetworkResource_To_v1beta1_DONetworkResource(&in.Network, &out.Network, s); err != nil { return err } return nil } -// Convert_v1alpha3_DOClusterStatus_To_v1alpha4_DOClusterStatus is an autogenerated conversion function. -func Convert_v1alpha3_DOClusterStatus_To_v1alpha4_DOClusterStatus(in *DOClusterStatus, out *v1alpha4.DOClusterStatus, s conversion.Scope) error { - return autoConvert_v1alpha3_DOClusterStatus_To_v1alpha4_DOClusterStatus(in, out, s) +// Convert_v1alpha3_DOClusterStatus_To_v1beta1_DOClusterStatus is an autogenerated conversion function. +func Convert_v1alpha3_DOClusterStatus_To_v1beta1_DOClusterStatus(in *DOClusterStatus, out *v1beta1.DOClusterStatus, s conversion.Scope) error { + return autoConvert_v1alpha3_DOClusterStatus_To_v1beta1_DOClusterStatus(in, out, s) } -func autoConvert_v1alpha4_DOClusterStatus_To_v1alpha3_DOClusterStatus(in *v1alpha4.DOClusterStatus, out *DOClusterStatus, s conversion.Scope) error { +func autoConvert_v1beta1_DOClusterStatus_To_v1alpha3_DOClusterStatus(in *v1beta1.DOClusterStatus, out *DOClusterStatus, s conversion.Scope) error { out.Ready = in.Ready out.ControlPlaneDNSRecordReady = in.ControlPlaneDNSRecordReady - if err := Convert_v1alpha4_DONetworkResource_To_v1alpha3_DONetworkResource(&in.Network, &out.Network, s); err != nil { + if err := Convert_v1beta1_DONetworkResource_To_v1alpha3_DONetworkResource(&in.Network, &out.Network, s); err != nil { return err } return nil } -// Convert_v1alpha4_DOClusterStatus_To_v1alpha3_DOClusterStatus is an autogenerated conversion function. -func Convert_v1alpha4_DOClusterStatus_To_v1alpha3_DOClusterStatus(in *v1alpha4.DOClusterStatus, out *DOClusterStatus, s conversion.Scope) error { - return autoConvert_v1alpha4_DOClusterStatus_To_v1alpha3_DOClusterStatus(in, out, s) +// Convert_v1beta1_DOClusterStatus_To_v1alpha3_DOClusterStatus is an autogenerated conversion function. +func Convert_v1beta1_DOClusterStatus_To_v1alpha3_DOClusterStatus(in *v1beta1.DOClusterStatus, out *DOClusterStatus, s conversion.Scope) error { + return autoConvert_v1beta1_DOClusterStatus_To_v1alpha3_DOClusterStatus(in, out, s) } -func autoConvert_v1alpha3_DOControlPlaneDNS_To_v1alpha4_DOControlPlaneDNS(in *DOControlPlaneDNS, out *v1alpha4.DOControlPlaneDNS, s conversion.Scope) error { +func autoConvert_v1alpha3_DOControlPlaneDNS_To_v1beta1_DOControlPlaneDNS(in *DOControlPlaneDNS, out *v1beta1.DOControlPlaneDNS, s conversion.Scope) error { out.Domain = in.Domain out.Name = in.Name return nil } -// Convert_v1alpha3_DOControlPlaneDNS_To_v1alpha4_DOControlPlaneDNS is an autogenerated conversion function. -func Convert_v1alpha3_DOControlPlaneDNS_To_v1alpha4_DOControlPlaneDNS(in *DOControlPlaneDNS, out *v1alpha4.DOControlPlaneDNS, s conversion.Scope) error { - return autoConvert_v1alpha3_DOControlPlaneDNS_To_v1alpha4_DOControlPlaneDNS(in, out, s) +// Convert_v1alpha3_DOControlPlaneDNS_To_v1beta1_DOControlPlaneDNS is an autogenerated conversion function. +func Convert_v1alpha3_DOControlPlaneDNS_To_v1beta1_DOControlPlaneDNS(in *DOControlPlaneDNS, out *v1beta1.DOControlPlaneDNS, s conversion.Scope) error { + return autoConvert_v1alpha3_DOControlPlaneDNS_To_v1beta1_DOControlPlaneDNS(in, out, s) } -func autoConvert_v1alpha4_DOControlPlaneDNS_To_v1alpha3_DOControlPlaneDNS(in *v1alpha4.DOControlPlaneDNS, out *DOControlPlaneDNS, s conversion.Scope) error { +func autoConvert_v1beta1_DOControlPlaneDNS_To_v1alpha3_DOControlPlaneDNS(in *v1beta1.DOControlPlaneDNS, out *DOControlPlaneDNS, s conversion.Scope) error { out.Domain = in.Domain out.Name = in.Name return nil } -// Convert_v1alpha4_DOControlPlaneDNS_To_v1alpha3_DOControlPlaneDNS is an autogenerated conversion function. -func Convert_v1alpha4_DOControlPlaneDNS_To_v1alpha3_DOControlPlaneDNS(in *v1alpha4.DOControlPlaneDNS, out *DOControlPlaneDNS, s conversion.Scope) error { - return autoConvert_v1alpha4_DOControlPlaneDNS_To_v1alpha3_DOControlPlaneDNS(in, out, s) +// Convert_v1beta1_DOControlPlaneDNS_To_v1alpha3_DOControlPlaneDNS is an autogenerated conversion function. +func Convert_v1beta1_DOControlPlaneDNS_To_v1alpha3_DOControlPlaneDNS(in *v1beta1.DOControlPlaneDNS, out *DOControlPlaneDNS, s conversion.Scope) error { + return autoConvert_v1beta1_DOControlPlaneDNS_To_v1alpha3_DOControlPlaneDNS(in, out, s) } -func autoConvert_v1alpha3_DOLoadBalancer_To_v1alpha4_DOLoadBalancer(in *DOLoadBalancer, out *v1alpha4.DOLoadBalancer, s conversion.Scope) error { +func autoConvert_v1alpha3_DOLoadBalancer_To_v1beta1_DOLoadBalancer(in *DOLoadBalancer, out *v1beta1.DOLoadBalancer, s conversion.Scope) error { out.Port = in.Port out.Algorithm = in.Algorithm - if err := Convert_v1alpha3_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck(&in.HealthCheck, &out.HealthCheck, s); err != nil { + if err := Convert_v1alpha3_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck(&in.HealthCheck, &out.HealthCheck, s); err != nil { return err } return nil } -// Convert_v1alpha3_DOLoadBalancer_To_v1alpha4_DOLoadBalancer is an autogenerated conversion function. -func Convert_v1alpha3_DOLoadBalancer_To_v1alpha4_DOLoadBalancer(in *DOLoadBalancer, out *v1alpha4.DOLoadBalancer, s conversion.Scope) error { - return autoConvert_v1alpha3_DOLoadBalancer_To_v1alpha4_DOLoadBalancer(in, out, s) +// Convert_v1alpha3_DOLoadBalancer_To_v1beta1_DOLoadBalancer is an autogenerated conversion function. +func Convert_v1alpha3_DOLoadBalancer_To_v1beta1_DOLoadBalancer(in *DOLoadBalancer, out *v1beta1.DOLoadBalancer, s conversion.Scope) error { + return autoConvert_v1alpha3_DOLoadBalancer_To_v1beta1_DOLoadBalancer(in, out, s) } -func autoConvert_v1alpha4_DOLoadBalancer_To_v1alpha3_DOLoadBalancer(in *v1alpha4.DOLoadBalancer, out *DOLoadBalancer, s conversion.Scope) error { +func autoConvert_v1beta1_DOLoadBalancer_To_v1alpha3_DOLoadBalancer(in *v1beta1.DOLoadBalancer, out *DOLoadBalancer, s conversion.Scope) error { out.Port = in.Port out.Algorithm = in.Algorithm - if err := Convert_v1alpha4_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck(&in.HealthCheck, &out.HealthCheck, s); err != nil { + if err := Convert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck(&in.HealthCheck, &out.HealthCheck, s); err != nil { return err } return nil } -// Convert_v1alpha4_DOLoadBalancer_To_v1alpha3_DOLoadBalancer is an autogenerated conversion function. -func Convert_v1alpha4_DOLoadBalancer_To_v1alpha3_DOLoadBalancer(in *v1alpha4.DOLoadBalancer, out *DOLoadBalancer, s conversion.Scope) error { - return autoConvert_v1alpha4_DOLoadBalancer_To_v1alpha3_DOLoadBalancer(in, out, s) +// Convert_v1beta1_DOLoadBalancer_To_v1alpha3_DOLoadBalancer is an autogenerated conversion function. +func Convert_v1beta1_DOLoadBalancer_To_v1alpha3_DOLoadBalancer(in *v1beta1.DOLoadBalancer, out *DOLoadBalancer, s conversion.Scope) error { + return autoConvert_v1beta1_DOLoadBalancer_To_v1alpha3_DOLoadBalancer(in, out, s) } -func autoConvert_v1alpha3_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck(in *DOLoadBalancerHealthCheck, out *v1alpha4.DOLoadBalancerHealthCheck, s conversion.Scope) error { +func autoConvert_v1alpha3_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck(in *DOLoadBalancerHealthCheck, out *v1beta1.DOLoadBalancerHealthCheck, s conversion.Scope) error { out.Interval = in.Interval out.Timeout = in.Timeout out.UnhealthyThreshold = in.UnhealthyThreshold @@ -485,12 +449,12 @@ func autoConvert_v1alpha3_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHe return nil } -// Convert_v1alpha3_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck is an autogenerated conversion function. -func Convert_v1alpha3_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck(in *DOLoadBalancerHealthCheck, out *v1alpha4.DOLoadBalancerHealthCheck, s conversion.Scope) error { - return autoConvert_v1alpha3_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck(in, out, s) +// Convert_v1alpha3_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck is an autogenerated conversion function. +func Convert_v1alpha3_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck(in *DOLoadBalancerHealthCheck, out *v1beta1.DOLoadBalancerHealthCheck, s conversion.Scope) error { + return autoConvert_v1alpha3_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck(in, out, s) } -func autoConvert_v1alpha4_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck(in *v1alpha4.DOLoadBalancerHealthCheck, out *DOLoadBalancerHealthCheck, s conversion.Scope) error { +func autoConvert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck(in *v1beta1.DOLoadBalancerHealthCheck, out *DOLoadBalancerHealthCheck, s conversion.Scope) error { out.Interval = in.Interval out.Timeout = in.Timeout out.UnhealthyThreshold = in.UnhealthyThreshold @@ -498,81 +462,81 @@ func autoConvert_v1alpha4_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHe return nil } -// Convert_v1alpha4_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck is an autogenerated conversion function. -func Convert_v1alpha4_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck(in *v1alpha4.DOLoadBalancerHealthCheck, out *DOLoadBalancerHealthCheck, s conversion.Scope) error { - return autoConvert_v1alpha4_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck(in, out, s) +// Convert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck is an autogenerated conversion function. +func Convert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck(in *v1beta1.DOLoadBalancerHealthCheck, out *DOLoadBalancerHealthCheck, s conversion.Scope) error { + return autoConvert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha3_DOLoadBalancerHealthCheck(in, out, s) } -func autoConvert_v1alpha3_DOMachine_To_v1alpha4_DOMachine(in *DOMachine, out *v1alpha4.DOMachine, s conversion.Scope) error { +func autoConvert_v1alpha3_DOMachine_To_v1beta1_DOMachine(in *DOMachine, out *v1beta1.DOMachine, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta - if err := Convert_v1alpha3_DOMachineSpec_To_v1alpha4_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { + if err := Convert_v1alpha3_DOMachineSpec_To_v1beta1_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { return err } - if err := Convert_v1alpha3_DOMachineStatus_To_v1alpha4_DOMachineStatus(&in.Status, &out.Status, s); err != nil { + if err := Convert_v1alpha3_DOMachineStatus_To_v1beta1_DOMachineStatus(&in.Status, &out.Status, s); err != nil { return err } return nil } -// Convert_v1alpha3_DOMachine_To_v1alpha4_DOMachine is an autogenerated conversion function. -func Convert_v1alpha3_DOMachine_To_v1alpha4_DOMachine(in *DOMachine, out *v1alpha4.DOMachine, s conversion.Scope) error { - return autoConvert_v1alpha3_DOMachine_To_v1alpha4_DOMachine(in, out, s) +// Convert_v1alpha3_DOMachine_To_v1beta1_DOMachine is an autogenerated conversion function. +func Convert_v1alpha3_DOMachine_To_v1beta1_DOMachine(in *DOMachine, out *v1beta1.DOMachine, s conversion.Scope) error { + return autoConvert_v1alpha3_DOMachine_To_v1beta1_DOMachine(in, out, s) } -func autoConvert_v1alpha4_DOMachine_To_v1alpha3_DOMachine(in *v1alpha4.DOMachine, out *DOMachine, s conversion.Scope) error { +func autoConvert_v1beta1_DOMachine_To_v1alpha3_DOMachine(in *v1beta1.DOMachine, out *DOMachine, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta - if err := Convert_v1alpha4_DOMachineSpec_To_v1alpha3_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { + if err := Convert_v1beta1_DOMachineSpec_To_v1alpha3_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { return err } - if err := Convert_v1alpha4_DOMachineStatus_To_v1alpha3_DOMachineStatus(&in.Status, &out.Status, s); err != nil { + if err := Convert_v1beta1_DOMachineStatus_To_v1alpha3_DOMachineStatus(&in.Status, &out.Status, s); err != nil { return err } return nil } -// Convert_v1alpha4_DOMachine_To_v1alpha3_DOMachine is an autogenerated conversion function. -func Convert_v1alpha4_DOMachine_To_v1alpha3_DOMachine(in *v1alpha4.DOMachine, out *DOMachine, s conversion.Scope) error { - return autoConvert_v1alpha4_DOMachine_To_v1alpha3_DOMachine(in, out, s) +// Convert_v1beta1_DOMachine_To_v1alpha3_DOMachine is an autogenerated conversion function. +func Convert_v1beta1_DOMachine_To_v1alpha3_DOMachine(in *v1beta1.DOMachine, out *DOMachine, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachine_To_v1alpha3_DOMachine(in, out, s) } -func autoConvert_v1alpha3_DOMachineList_To_v1alpha4_DOMachineList(in *DOMachineList, out *v1alpha4.DOMachineList, s conversion.Scope) error { +func autoConvert_v1alpha3_DOMachineList_To_v1beta1_DOMachineList(in *DOMachineList, out *v1beta1.DOMachineList, s conversion.Scope) error { out.ListMeta = in.ListMeta - out.Items = *(*[]v1alpha4.DOMachine)(unsafe.Pointer(&in.Items)) + out.Items = *(*[]v1beta1.DOMachine)(unsafe.Pointer(&in.Items)) return nil } -// Convert_v1alpha3_DOMachineList_To_v1alpha4_DOMachineList is an autogenerated conversion function. -func Convert_v1alpha3_DOMachineList_To_v1alpha4_DOMachineList(in *DOMachineList, out *v1alpha4.DOMachineList, s conversion.Scope) error { - return autoConvert_v1alpha3_DOMachineList_To_v1alpha4_DOMachineList(in, out, s) +// Convert_v1alpha3_DOMachineList_To_v1beta1_DOMachineList is an autogenerated conversion function. +func Convert_v1alpha3_DOMachineList_To_v1beta1_DOMachineList(in *DOMachineList, out *v1beta1.DOMachineList, s conversion.Scope) error { + return autoConvert_v1alpha3_DOMachineList_To_v1beta1_DOMachineList(in, out, s) } -func autoConvert_v1alpha4_DOMachineList_To_v1alpha3_DOMachineList(in *v1alpha4.DOMachineList, out *DOMachineList, s conversion.Scope) error { +func autoConvert_v1beta1_DOMachineList_To_v1alpha3_DOMachineList(in *v1beta1.DOMachineList, out *DOMachineList, s conversion.Scope) error { out.ListMeta = in.ListMeta out.Items = *(*[]DOMachine)(unsafe.Pointer(&in.Items)) return nil } -// Convert_v1alpha4_DOMachineList_To_v1alpha3_DOMachineList is an autogenerated conversion function. -func Convert_v1alpha4_DOMachineList_To_v1alpha3_DOMachineList(in *v1alpha4.DOMachineList, out *DOMachineList, s conversion.Scope) error { - return autoConvert_v1alpha4_DOMachineList_To_v1alpha3_DOMachineList(in, out, s) +// Convert_v1beta1_DOMachineList_To_v1alpha3_DOMachineList is an autogenerated conversion function. +func Convert_v1beta1_DOMachineList_To_v1alpha3_DOMachineList(in *v1beta1.DOMachineList, out *DOMachineList, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineList_To_v1alpha3_DOMachineList(in, out, s) } -func autoConvert_v1alpha3_DOMachineSpec_To_v1alpha4_DOMachineSpec(in *DOMachineSpec, out *v1alpha4.DOMachineSpec, s conversion.Scope) error { +func autoConvert_v1alpha3_DOMachineSpec_To_v1beta1_DOMachineSpec(in *DOMachineSpec, out *v1beta1.DOMachineSpec, s conversion.Scope) error { out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) out.Size = in.Size out.Image = in.Image - out.DataDisks = *(*[]v1alpha4.DataDisk)(unsafe.Pointer(&in.DataDisks)) + out.DataDisks = *(*[]v1beta1.DataDisk)(unsafe.Pointer(&in.DataDisks)) out.SSHKeys = *(*[]intstr.IntOrString)(unsafe.Pointer(&in.SSHKeys)) - out.AdditionalTags = *(*v1alpha4.Tags)(unsafe.Pointer(&in.AdditionalTags)) + out.AdditionalTags = *(*v1beta1.Tags)(unsafe.Pointer(&in.AdditionalTags)) return nil } -// Convert_v1alpha3_DOMachineSpec_To_v1alpha4_DOMachineSpec is an autogenerated conversion function. -func Convert_v1alpha3_DOMachineSpec_To_v1alpha4_DOMachineSpec(in *DOMachineSpec, out *v1alpha4.DOMachineSpec, s conversion.Scope) error { - return autoConvert_v1alpha3_DOMachineSpec_To_v1alpha4_DOMachineSpec(in, out, s) +// Convert_v1alpha3_DOMachineSpec_To_v1beta1_DOMachineSpec is an autogenerated conversion function. +func Convert_v1alpha3_DOMachineSpec_To_v1beta1_DOMachineSpec(in *DOMachineSpec, out *v1beta1.DOMachineSpec, s conversion.Scope) error { + return autoConvert_v1alpha3_DOMachineSpec_To_v1beta1_DOMachineSpec(in, out, s) } -func autoConvert_v1alpha4_DOMachineSpec_To_v1alpha3_DOMachineSpec(in *v1alpha4.DOMachineSpec, out *DOMachineSpec, s conversion.Scope) error { +func autoConvert_v1beta1_DOMachineSpec_To_v1alpha3_DOMachineSpec(in *v1beta1.DOMachineSpec, out *DOMachineSpec, s conversion.Scope) error { out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) out.Size = in.Size out.Image = in.Image @@ -582,26 +546,26 @@ func autoConvert_v1alpha4_DOMachineSpec_To_v1alpha3_DOMachineSpec(in *v1alpha4.D return nil } -// Convert_v1alpha4_DOMachineSpec_To_v1alpha3_DOMachineSpec is an autogenerated conversion function. -func Convert_v1alpha4_DOMachineSpec_To_v1alpha3_DOMachineSpec(in *v1alpha4.DOMachineSpec, out *DOMachineSpec, s conversion.Scope) error { - return autoConvert_v1alpha4_DOMachineSpec_To_v1alpha3_DOMachineSpec(in, out, s) +// Convert_v1beta1_DOMachineSpec_To_v1alpha3_DOMachineSpec is an autogenerated conversion function. +func Convert_v1beta1_DOMachineSpec_To_v1alpha3_DOMachineSpec(in *v1beta1.DOMachineSpec, out *DOMachineSpec, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineSpec_To_v1alpha3_DOMachineSpec(in, out, s) } -func autoConvert_v1alpha3_DOMachineStatus_To_v1alpha4_DOMachineStatus(in *DOMachineStatus, out *v1alpha4.DOMachineStatus, s conversion.Scope) error { +func autoConvert_v1alpha3_DOMachineStatus_To_v1beta1_DOMachineStatus(in *DOMachineStatus, out *v1beta1.DOMachineStatus, s conversion.Scope) error { out.Ready = in.Ready out.Addresses = *(*[]v1.NodeAddress)(unsafe.Pointer(&in.Addresses)) - out.InstanceStatus = (*v1alpha4.DOResourceStatus)(unsafe.Pointer(in.InstanceStatus)) + out.InstanceStatus = (*v1beta1.DOResourceStatus)(unsafe.Pointer(in.InstanceStatus)) out.FailureReason = (*errors.MachineStatusError)(unsafe.Pointer(in.FailureReason)) out.FailureMessage = (*string)(unsafe.Pointer(in.FailureMessage)) return nil } -// Convert_v1alpha3_DOMachineStatus_To_v1alpha4_DOMachineStatus is an autogenerated conversion function. -func Convert_v1alpha3_DOMachineStatus_To_v1alpha4_DOMachineStatus(in *DOMachineStatus, out *v1alpha4.DOMachineStatus, s conversion.Scope) error { - return autoConvert_v1alpha3_DOMachineStatus_To_v1alpha4_DOMachineStatus(in, out, s) +// Convert_v1alpha3_DOMachineStatus_To_v1beta1_DOMachineStatus is an autogenerated conversion function. +func Convert_v1alpha3_DOMachineStatus_To_v1beta1_DOMachineStatus(in *DOMachineStatus, out *v1beta1.DOMachineStatus, s conversion.Scope) error { + return autoConvert_v1alpha3_DOMachineStatus_To_v1beta1_DOMachineStatus(in, out, s) } -func autoConvert_v1alpha4_DOMachineStatus_To_v1alpha3_DOMachineStatus(in *v1alpha4.DOMachineStatus, out *DOMachineStatus, s conversion.Scope) error { +func autoConvert_v1beta1_DOMachineStatus_To_v1alpha3_DOMachineStatus(in *v1beta1.DOMachineStatus, out *DOMachineStatus, s conversion.Scope) error { out.Ready = in.Ready out.Addresses = *(*[]v1.NodeAddress)(unsafe.Pointer(&in.Addresses)) out.InstanceStatus = (*DOResourceStatus)(unsafe.Pointer(in.InstanceStatus)) @@ -610,204 +574,204 @@ func autoConvert_v1alpha4_DOMachineStatus_To_v1alpha3_DOMachineStatus(in *v1alph return nil } -// Convert_v1alpha4_DOMachineStatus_To_v1alpha3_DOMachineStatus is an autogenerated conversion function. -func Convert_v1alpha4_DOMachineStatus_To_v1alpha3_DOMachineStatus(in *v1alpha4.DOMachineStatus, out *DOMachineStatus, s conversion.Scope) error { - return autoConvert_v1alpha4_DOMachineStatus_To_v1alpha3_DOMachineStatus(in, out, s) +// Convert_v1beta1_DOMachineStatus_To_v1alpha3_DOMachineStatus is an autogenerated conversion function. +func Convert_v1beta1_DOMachineStatus_To_v1alpha3_DOMachineStatus(in *v1beta1.DOMachineStatus, out *DOMachineStatus, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineStatus_To_v1alpha3_DOMachineStatus(in, out, s) } -func autoConvert_v1alpha3_DOMachineTemplate_To_v1alpha4_DOMachineTemplate(in *DOMachineTemplate, out *v1alpha4.DOMachineTemplate, s conversion.Scope) error { +func autoConvert_v1alpha3_DOMachineTemplate_To_v1beta1_DOMachineTemplate(in *DOMachineTemplate, out *v1beta1.DOMachineTemplate, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta - if err := Convert_v1alpha3_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec(&in.Spec, &out.Spec, s); err != nil { + if err := Convert_v1alpha3_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec(&in.Spec, &out.Spec, s); err != nil { return err } return nil } -// Convert_v1alpha3_DOMachineTemplate_To_v1alpha4_DOMachineTemplate is an autogenerated conversion function. -func Convert_v1alpha3_DOMachineTemplate_To_v1alpha4_DOMachineTemplate(in *DOMachineTemplate, out *v1alpha4.DOMachineTemplate, s conversion.Scope) error { - return autoConvert_v1alpha3_DOMachineTemplate_To_v1alpha4_DOMachineTemplate(in, out, s) +// Convert_v1alpha3_DOMachineTemplate_To_v1beta1_DOMachineTemplate is an autogenerated conversion function. +func Convert_v1alpha3_DOMachineTemplate_To_v1beta1_DOMachineTemplate(in *DOMachineTemplate, out *v1beta1.DOMachineTemplate, s conversion.Scope) error { + return autoConvert_v1alpha3_DOMachineTemplate_To_v1beta1_DOMachineTemplate(in, out, s) } -func autoConvert_v1alpha4_DOMachineTemplate_To_v1alpha3_DOMachineTemplate(in *v1alpha4.DOMachineTemplate, out *DOMachineTemplate, s conversion.Scope) error { +func autoConvert_v1beta1_DOMachineTemplate_To_v1alpha3_DOMachineTemplate(in *v1beta1.DOMachineTemplate, out *DOMachineTemplate, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta - if err := Convert_v1alpha4_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec(&in.Spec, &out.Spec, s); err != nil { + if err := Convert_v1beta1_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec(&in.Spec, &out.Spec, s); err != nil { return err } return nil } -// Convert_v1alpha4_DOMachineTemplate_To_v1alpha3_DOMachineTemplate is an autogenerated conversion function. -func Convert_v1alpha4_DOMachineTemplate_To_v1alpha3_DOMachineTemplate(in *v1alpha4.DOMachineTemplate, out *DOMachineTemplate, s conversion.Scope) error { - return autoConvert_v1alpha4_DOMachineTemplate_To_v1alpha3_DOMachineTemplate(in, out, s) +// Convert_v1beta1_DOMachineTemplate_To_v1alpha3_DOMachineTemplate is an autogenerated conversion function. +func Convert_v1beta1_DOMachineTemplate_To_v1alpha3_DOMachineTemplate(in *v1beta1.DOMachineTemplate, out *DOMachineTemplate, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineTemplate_To_v1alpha3_DOMachineTemplate(in, out, s) } -func autoConvert_v1alpha3_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList(in *DOMachineTemplateList, out *v1alpha4.DOMachineTemplateList, s conversion.Scope) error { +func autoConvert_v1alpha3_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList(in *DOMachineTemplateList, out *v1beta1.DOMachineTemplateList, s conversion.Scope) error { out.ListMeta = in.ListMeta - out.Items = *(*[]v1alpha4.DOMachineTemplate)(unsafe.Pointer(&in.Items)) + out.Items = *(*[]v1beta1.DOMachineTemplate)(unsafe.Pointer(&in.Items)) return nil } -// Convert_v1alpha3_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList is an autogenerated conversion function. -func Convert_v1alpha3_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList(in *DOMachineTemplateList, out *v1alpha4.DOMachineTemplateList, s conversion.Scope) error { - return autoConvert_v1alpha3_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList(in, out, s) +// Convert_v1alpha3_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList is an autogenerated conversion function. +func Convert_v1alpha3_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList(in *DOMachineTemplateList, out *v1beta1.DOMachineTemplateList, s conversion.Scope) error { + return autoConvert_v1alpha3_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList(in, out, s) } -func autoConvert_v1alpha4_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList(in *v1alpha4.DOMachineTemplateList, out *DOMachineTemplateList, s conversion.Scope) error { +func autoConvert_v1beta1_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList(in *v1beta1.DOMachineTemplateList, out *DOMachineTemplateList, s conversion.Scope) error { out.ListMeta = in.ListMeta out.Items = *(*[]DOMachineTemplate)(unsafe.Pointer(&in.Items)) return nil } -// Convert_v1alpha4_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList is an autogenerated conversion function. -func Convert_v1alpha4_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList(in *v1alpha4.DOMachineTemplateList, out *DOMachineTemplateList, s conversion.Scope) error { - return autoConvert_v1alpha4_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList(in, out, s) +// Convert_v1beta1_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList is an autogenerated conversion function. +func Convert_v1beta1_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList(in *v1beta1.DOMachineTemplateList, out *DOMachineTemplateList, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineTemplateList_To_v1alpha3_DOMachineTemplateList(in, out, s) } -func autoConvert_v1alpha3_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource(in *DOMachineTemplateResource, out *v1alpha4.DOMachineTemplateResource, s conversion.Scope) error { - if err := Convert_v1alpha3_DOMachineSpec_To_v1alpha4_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { +func autoConvert_v1alpha3_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource(in *DOMachineTemplateResource, out *v1beta1.DOMachineTemplateResource, s conversion.Scope) error { + if err := Convert_v1alpha3_DOMachineSpec_To_v1beta1_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { return err } return nil } -// Convert_v1alpha3_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource is an autogenerated conversion function. -func Convert_v1alpha3_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource(in *DOMachineTemplateResource, out *v1alpha4.DOMachineTemplateResource, s conversion.Scope) error { - return autoConvert_v1alpha3_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource(in, out, s) +// Convert_v1alpha3_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource is an autogenerated conversion function. +func Convert_v1alpha3_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource(in *DOMachineTemplateResource, out *v1beta1.DOMachineTemplateResource, s conversion.Scope) error { + return autoConvert_v1alpha3_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource(in, out, s) } -func autoConvert_v1alpha4_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource(in *v1alpha4.DOMachineTemplateResource, out *DOMachineTemplateResource, s conversion.Scope) error { - if err := Convert_v1alpha4_DOMachineSpec_To_v1alpha3_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { +func autoConvert_v1beta1_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource(in *v1beta1.DOMachineTemplateResource, out *DOMachineTemplateResource, s conversion.Scope) error { + if err := Convert_v1beta1_DOMachineSpec_To_v1alpha3_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { return err } return nil } -// Convert_v1alpha4_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource is an autogenerated conversion function. -func Convert_v1alpha4_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource(in *v1alpha4.DOMachineTemplateResource, out *DOMachineTemplateResource, s conversion.Scope) error { - return autoConvert_v1alpha4_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource(in, out, s) +// Convert_v1beta1_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource is an autogenerated conversion function. +func Convert_v1beta1_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource(in *v1beta1.DOMachineTemplateResource, out *DOMachineTemplateResource, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource(in, out, s) } -func autoConvert_v1alpha3_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec(in *DOMachineTemplateSpec, out *v1alpha4.DOMachineTemplateSpec, s conversion.Scope) error { - if err := Convert_v1alpha3_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource(&in.Template, &out.Template, s); err != nil { +func autoConvert_v1alpha3_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec(in *DOMachineTemplateSpec, out *v1beta1.DOMachineTemplateSpec, s conversion.Scope) error { + if err := Convert_v1alpha3_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource(&in.Template, &out.Template, s); err != nil { return err } return nil } -// Convert_v1alpha3_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec is an autogenerated conversion function. -func Convert_v1alpha3_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec(in *DOMachineTemplateSpec, out *v1alpha4.DOMachineTemplateSpec, s conversion.Scope) error { - return autoConvert_v1alpha3_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec(in, out, s) +// Convert_v1alpha3_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec is an autogenerated conversion function. +func Convert_v1alpha3_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec(in *DOMachineTemplateSpec, out *v1beta1.DOMachineTemplateSpec, s conversion.Scope) error { + return autoConvert_v1alpha3_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec(in, out, s) } -func autoConvert_v1alpha4_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec(in *v1alpha4.DOMachineTemplateSpec, out *DOMachineTemplateSpec, s conversion.Scope) error { - if err := Convert_v1alpha4_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource(&in.Template, &out.Template, s); err != nil { +func autoConvert_v1beta1_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec(in *v1beta1.DOMachineTemplateSpec, out *DOMachineTemplateSpec, s conversion.Scope) error { + if err := Convert_v1beta1_DOMachineTemplateResource_To_v1alpha3_DOMachineTemplateResource(&in.Template, &out.Template, s); err != nil { return err } return nil } -// Convert_v1alpha4_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec is an autogenerated conversion function. -func Convert_v1alpha4_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec(in *v1alpha4.DOMachineTemplateSpec, out *DOMachineTemplateSpec, s conversion.Scope) error { - return autoConvert_v1alpha4_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec(in, out, s) +// Convert_v1beta1_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec is an autogenerated conversion function. +func Convert_v1beta1_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec(in *v1beta1.DOMachineTemplateSpec, out *DOMachineTemplateSpec, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineTemplateSpec_To_v1alpha3_DOMachineTemplateSpec(in, out, s) } -func autoConvert_v1alpha3_DONetwork_To_v1alpha4_DONetwork(in *DONetwork, out *v1alpha4.DONetwork, s conversion.Scope) error { - if err := Convert_v1alpha3_DOLoadBalancer_To_v1alpha4_DOLoadBalancer(&in.APIServerLoadbalancers, &out.APIServerLoadbalancers, s); err != nil { +func autoConvert_v1alpha3_DONetwork_To_v1beta1_DONetwork(in *DONetwork, out *v1beta1.DONetwork, s conversion.Scope) error { + if err := Convert_v1alpha3_DOLoadBalancer_To_v1beta1_DOLoadBalancer(&in.APIServerLoadbalancers, &out.APIServerLoadbalancers, s); err != nil { return err } - if err := Convert_v1alpha3_DOVPC_To_v1alpha4_DOVPC(&in.VPC, &out.VPC, s); err != nil { + if err := Convert_v1alpha3_DOVPC_To_v1beta1_DOVPC(&in.VPC, &out.VPC, s); err != nil { return err } return nil } -// Convert_v1alpha3_DONetwork_To_v1alpha4_DONetwork is an autogenerated conversion function. -func Convert_v1alpha3_DONetwork_To_v1alpha4_DONetwork(in *DONetwork, out *v1alpha4.DONetwork, s conversion.Scope) error { - return autoConvert_v1alpha3_DONetwork_To_v1alpha4_DONetwork(in, out, s) +// Convert_v1alpha3_DONetwork_To_v1beta1_DONetwork is an autogenerated conversion function. +func Convert_v1alpha3_DONetwork_To_v1beta1_DONetwork(in *DONetwork, out *v1beta1.DONetwork, s conversion.Scope) error { + return autoConvert_v1alpha3_DONetwork_To_v1beta1_DONetwork(in, out, s) } -func autoConvert_v1alpha4_DONetwork_To_v1alpha3_DONetwork(in *v1alpha4.DONetwork, out *DONetwork, s conversion.Scope) error { - if err := Convert_v1alpha4_DOLoadBalancer_To_v1alpha3_DOLoadBalancer(&in.APIServerLoadbalancers, &out.APIServerLoadbalancers, s); err != nil { +func autoConvert_v1beta1_DONetwork_To_v1alpha3_DONetwork(in *v1beta1.DONetwork, out *DONetwork, s conversion.Scope) error { + if err := Convert_v1beta1_DOLoadBalancer_To_v1alpha3_DOLoadBalancer(&in.APIServerLoadbalancers, &out.APIServerLoadbalancers, s); err != nil { return err } - if err := Convert_v1alpha4_DOVPC_To_v1alpha3_DOVPC(&in.VPC, &out.VPC, s); err != nil { + if err := Convert_v1beta1_DOVPC_To_v1alpha3_DOVPC(&in.VPC, &out.VPC, s); err != nil { return err } return nil } -// Convert_v1alpha4_DONetwork_To_v1alpha3_DONetwork is an autogenerated conversion function. -func Convert_v1alpha4_DONetwork_To_v1alpha3_DONetwork(in *v1alpha4.DONetwork, out *DONetwork, s conversion.Scope) error { - return autoConvert_v1alpha4_DONetwork_To_v1alpha3_DONetwork(in, out, s) +// Convert_v1beta1_DONetwork_To_v1alpha3_DONetwork is an autogenerated conversion function. +func Convert_v1beta1_DONetwork_To_v1alpha3_DONetwork(in *v1beta1.DONetwork, out *DONetwork, s conversion.Scope) error { + return autoConvert_v1beta1_DONetwork_To_v1alpha3_DONetwork(in, out, s) } -func autoConvert_v1alpha3_DONetworkResource_To_v1alpha4_DONetworkResource(in *DONetworkResource, out *v1alpha4.DONetworkResource, s conversion.Scope) error { - if err := Convert_v1alpha3_DOResourceReference_To_v1alpha4_DOResourceReference(&in.APIServerLoadbalancersRef, &out.APIServerLoadbalancersRef, s); err != nil { +func autoConvert_v1alpha3_DONetworkResource_To_v1beta1_DONetworkResource(in *DONetworkResource, out *v1beta1.DONetworkResource, s conversion.Scope) error { + if err := Convert_v1alpha3_DOResourceReference_To_v1beta1_DOResourceReference(&in.APIServerLoadbalancersRef, &out.APIServerLoadbalancersRef, s); err != nil { return err } return nil } -// Convert_v1alpha3_DONetworkResource_To_v1alpha4_DONetworkResource is an autogenerated conversion function. -func Convert_v1alpha3_DONetworkResource_To_v1alpha4_DONetworkResource(in *DONetworkResource, out *v1alpha4.DONetworkResource, s conversion.Scope) error { - return autoConvert_v1alpha3_DONetworkResource_To_v1alpha4_DONetworkResource(in, out, s) +// Convert_v1alpha3_DONetworkResource_To_v1beta1_DONetworkResource is an autogenerated conversion function. +func Convert_v1alpha3_DONetworkResource_To_v1beta1_DONetworkResource(in *DONetworkResource, out *v1beta1.DONetworkResource, s conversion.Scope) error { + return autoConvert_v1alpha3_DONetworkResource_To_v1beta1_DONetworkResource(in, out, s) } -func autoConvert_v1alpha4_DONetworkResource_To_v1alpha3_DONetworkResource(in *v1alpha4.DONetworkResource, out *DONetworkResource, s conversion.Scope) error { - if err := Convert_v1alpha4_DOResourceReference_To_v1alpha3_DOResourceReference(&in.APIServerLoadbalancersRef, &out.APIServerLoadbalancersRef, s); err != nil { +func autoConvert_v1beta1_DONetworkResource_To_v1alpha3_DONetworkResource(in *v1beta1.DONetworkResource, out *DONetworkResource, s conversion.Scope) error { + if err := Convert_v1beta1_DOResourceReference_To_v1alpha3_DOResourceReference(&in.APIServerLoadbalancersRef, &out.APIServerLoadbalancersRef, s); err != nil { return err } return nil } -// Convert_v1alpha4_DONetworkResource_To_v1alpha3_DONetworkResource is an autogenerated conversion function. -func Convert_v1alpha4_DONetworkResource_To_v1alpha3_DONetworkResource(in *v1alpha4.DONetworkResource, out *DONetworkResource, s conversion.Scope) error { - return autoConvert_v1alpha4_DONetworkResource_To_v1alpha3_DONetworkResource(in, out, s) +// Convert_v1beta1_DONetworkResource_To_v1alpha3_DONetworkResource is an autogenerated conversion function. +func Convert_v1beta1_DONetworkResource_To_v1alpha3_DONetworkResource(in *v1beta1.DONetworkResource, out *DONetworkResource, s conversion.Scope) error { + return autoConvert_v1beta1_DONetworkResource_To_v1alpha3_DONetworkResource(in, out, s) } -func autoConvert_v1alpha3_DOResourceReference_To_v1alpha4_DOResourceReference(in *DOResourceReference, out *v1alpha4.DOResourceReference, s conversion.Scope) error { +func autoConvert_v1alpha3_DOResourceReference_To_v1beta1_DOResourceReference(in *DOResourceReference, out *v1beta1.DOResourceReference, s conversion.Scope) error { out.ResourceID = in.ResourceID - out.ResourceStatus = v1alpha4.DOResourceStatus(in.ResourceStatus) + out.ResourceStatus = v1beta1.DOResourceStatus(in.ResourceStatus) return nil } -// Convert_v1alpha3_DOResourceReference_To_v1alpha4_DOResourceReference is an autogenerated conversion function. -func Convert_v1alpha3_DOResourceReference_To_v1alpha4_DOResourceReference(in *DOResourceReference, out *v1alpha4.DOResourceReference, s conversion.Scope) error { - return autoConvert_v1alpha3_DOResourceReference_To_v1alpha4_DOResourceReference(in, out, s) +// Convert_v1alpha3_DOResourceReference_To_v1beta1_DOResourceReference is an autogenerated conversion function. +func Convert_v1alpha3_DOResourceReference_To_v1beta1_DOResourceReference(in *DOResourceReference, out *v1beta1.DOResourceReference, s conversion.Scope) error { + return autoConvert_v1alpha3_DOResourceReference_To_v1beta1_DOResourceReference(in, out, s) } -func autoConvert_v1alpha4_DOResourceReference_To_v1alpha3_DOResourceReference(in *v1alpha4.DOResourceReference, out *DOResourceReference, s conversion.Scope) error { +func autoConvert_v1beta1_DOResourceReference_To_v1alpha3_DOResourceReference(in *v1beta1.DOResourceReference, out *DOResourceReference, s conversion.Scope) error { out.ResourceID = in.ResourceID out.ResourceStatus = DOResourceStatus(in.ResourceStatus) return nil } -// Convert_v1alpha4_DOResourceReference_To_v1alpha3_DOResourceReference is an autogenerated conversion function. -func Convert_v1alpha4_DOResourceReference_To_v1alpha3_DOResourceReference(in *v1alpha4.DOResourceReference, out *DOResourceReference, s conversion.Scope) error { - return autoConvert_v1alpha4_DOResourceReference_To_v1alpha3_DOResourceReference(in, out, s) +// Convert_v1beta1_DOResourceReference_To_v1alpha3_DOResourceReference is an autogenerated conversion function. +func Convert_v1beta1_DOResourceReference_To_v1alpha3_DOResourceReference(in *v1beta1.DOResourceReference, out *DOResourceReference, s conversion.Scope) error { + return autoConvert_v1beta1_DOResourceReference_To_v1alpha3_DOResourceReference(in, out, s) } -func autoConvert_v1alpha3_DOVPC_To_v1alpha4_DOVPC(in *DOVPC, out *v1alpha4.DOVPC, s conversion.Scope) error { +func autoConvert_v1alpha3_DOVPC_To_v1beta1_DOVPC(in *DOVPC, out *v1beta1.DOVPC, s conversion.Scope) error { out.VPCUUID = in.VPCUUID return nil } -// Convert_v1alpha3_DOVPC_To_v1alpha4_DOVPC is an autogenerated conversion function. -func Convert_v1alpha3_DOVPC_To_v1alpha4_DOVPC(in *DOVPC, out *v1alpha4.DOVPC, s conversion.Scope) error { - return autoConvert_v1alpha3_DOVPC_To_v1alpha4_DOVPC(in, out, s) +// Convert_v1alpha3_DOVPC_To_v1beta1_DOVPC is an autogenerated conversion function. +func Convert_v1alpha3_DOVPC_To_v1beta1_DOVPC(in *DOVPC, out *v1beta1.DOVPC, s conversion.Scope) error { + return autoConvert_v1alpha3_DOVPC_To_v1beta1_DOVPC(in, out, s) } -func autoConvert_v1alpha4_DOVPC_To_v1alpha3_DOVPC(in *v1alpha4.DOVPC, out *DOVPC, s conversion.Scope) error { +func autoConvert_v1beta1_DOVPC_To_v1alpha3_DOVPC(in *v1beta1.DOVPC, out *DOVPC, s conversion.Scope) error { out.VPCUUID = in.VPCUUID return nil } -// Convert_v1alpha4_DOVPC_To_v1alpha3_DOVPC is an autogenerated conversion function. -func Convert_v1alpha4_DOVPC_To_v1alpha3_DOVPC(in *v1alpha4.DOVPC, out *DOVPC, s conversion.Scope) error { - return autoConvert_v1alpha4_DOVPC_To_v1alpha3_DOVPC(in, out, s) +// Convert_v1beta1_DOVPC_To_v1alpha3_DOVPC is an autogenerated conversion function. +func Convert_v1beta1_DOVPC_To_v1alpha3_DOVPC(in *v1beta1.DOVPC, out *DOVPC, s conversion.Scope) error { + return autoConvert_v1beta1_DOVPC_To_v1alpha3_DOVPC(in, out, s) } -func autoConvert_v1alpha3_DataDisk_To_v1alpha4_DataDisk(in *DataDisk, out *v1alpha4.DataDisk, s conversion.Scope) error { +func autoConvert_v1alpha3_DataDisk_To_v1beta1_DataDisk(in *DataDisk, out *v1beta1.DataDisk, s conversion.Scope) error { out.NameSuffix = in.NameSuffix out.DiskSizeGB = in.DiskSizeGB out.FilesystemType = in.FilesystemType @@ -815,12 +779,12 @@ func autoConvert_v1alpha3_DataDisk_To_v1alpha4_DataDisk(in *DataDisk, out *v1alp return nil } -// Convert_v1alpha3_DataDisk_To_v1alpha4_DataDisk is an autogenerated conversion function. -func Convert_v1alpha3_DataDisk_To_v1alpha4_DataDisk(in *DataDisk, out *v1alpha4.DataDisk, s conversion.Scope) error { - return autoConvert_v1alpha3_DataDisk_To_v1alpha4_DataDisk(in, out, s) +// Convert_v1alpha3_DataDisk_To_v1beta1_DataDisk is an autogenerated conversion function. +func Convert_v1alpha3_DataDisk_To_v1beta1_DataDisk(in *DataDisk, out *v1beta1.DataDisk, s conversion.Scope) error { + return autoConvert_v1alpha3_DataDisk_To_v1beta1_DataDisk(in, out, s) } -func autoConvert_v1alpha4_DataDisk_To_v1alpha3_DataDisk(in *v1alpha4.DataDisk, out *DataDisk, s conversion.Scope) error { +func autoConvert_v1beta1_DataDisk_To_v1alpha3_DataDisk(in *v1beta1.DataDisk, out *DataDisk, s conversion.Scope) error { out.NameSuffix = in.NameSuffix out.DiskSizeGB = in.DiskSizeGB out.FilesystemType = in.FilesystemType @@ -828,7 +792,7 @@ func autoConvert_v1alpha4_DataDisk_To_v1alpha3_DataDisk(in *v1alpha4.DataDisk, o return nil } -// Convert_v1alpha4_DataDisk_To_v1alpha3_DataDisk is an autogenerated conversion function. -func Convert_v1alpha4_DataDisk_To_v1alpha3_DataDisk(in *v1alpha4.DataDisk, out *DataDisk, s conversion.Scope) error { - return autoConvert_v1alpha4_DataDisk_To_v1alpha3_DataDisk(in, out, s) +// Convert_v1beta1_DataDisk_To_v1alpha3_DataDisk is an autogenerated conversion function. +func Convert_v1beta1_DataDisk_To_v1alpha3_DataDisk(in *v1beta1.DataDisk, out *DataDisk, s conversion.Scope) error { + return autoConvert_v1beta1_DataDisk_To_v1alpha3_DataDisk(in, out, s) } diff --git a/api/v1alpha3/zz_generated.deepcopy.go b/api/v1alpha3/zz_generated.deepcopy.go index 7f68eb401..c601e61ee 100644 --- a/api/v1alpha3/zz_generated.deepcopy.go +++ b/api/v1alpha3/zz_generated.deepcopy.go @@ -22,26 +22,11 @@ package v1alpha3 import ( "k8s.io/api/core/v1" - runtime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" "sigs.k8s.io/cluster-api/errors" ) -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *APIEndpoint) DeepCopyInto(out *APIEndpoint) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIEndpoint. -func (in *APIEndpoint) DeepCopy() *APIEndpoint { - if in == nil { - return nil - } - out := new(APIEndpoint) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BuildTagParams) DeepCopyInto(out *BuildTagParams) { *out = *in diff --git a/api/v1alpha4/doc.go b/api/v1alpha4/doc.go new file mode 100644 index 000000000..5ea40d8ac --- /dev/null +++ b/api/v1alpha4/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1alpha4 contains API Schema definitions for the infrastructure v1alpha4 API group +package v1alpha4 + +// +k8s:conversion-gen=sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1 diff --git a/api/v1alpha4/docluster_conversion.go b/api/v1alpha4/docluster_conversion.go index 2bdf89f71..c231407c1 100644 --- a/api/v1alpha4/docluster_conversion.go +++ b/api/v1alpha4/docluster_conversion.go @@ -16,8 +16,52 @@ limitations under the License. package v1alpha4 -// Hub marks DOCluster as a conversion hub. -func (*DOCluster) Hub() {} +import ( + utilconversion "sigs.k8s.io/cluster-api/util/conversion" + "sigs.k8s.io/controller-runtime/pkg/conversion" -// Hub marks DOClusterList as a conversion hub. -func (*DOClusterList) Hub() {} + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" +) + +// ConvertTo converts this DOCluster to the Hub version (v1beta1). +func (src *DOCluster) ConvertTo(dstRaw conversion.Hub) error { // nolint + dst := dstRaw.(*infrav1.DOCluster) + if err := Convert_v1alpha4_DOCluster_To_v1beta1_DOCluster(src, dst, nil); err != nil { + return err + } + + // Manually restore data from annotations + restored := &infrav1.DOCluster{} + if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { + return err + } + + return nil +} + +// ConvertFrom converts from the Hub version (v1beta1) to this version. +func (dst *DOCluster) ConvertFrom(srcRaw conversion.Hub) error { // nolint + src := srcRaw.(*infrav1.DOCluster) + if err := Convert_v1beta1_DOCluster_To_v1alpha4_DOCluster(src, dst, nil); err != nil { + return err + } + + // Preserve Hub data on down-conversion. + if err := utilconversion.MarshalData(src, dst); err != nil { + return err + } + + return nil +} + +// ConvertTo converts this DOClusterList to the Hub version (v1beta1). +func (src *DOClusterList) ConvertTo(dstRaw conversion.Hub) error { // nolint + dst := dstRaw.(*infrav1.DOClusterList) + return Convert_v1alpha4_DOClusterList_To_v1beta1_DOClusterList(src, dst, nil) +} + +// ConvertFrom converts from the Hub version (v1beta1) to this version. +func (dst *DOClusterList) ConvertFrom(srcRaw conversion.Hub) error { // nolint + src := srcRaw.(*infrav1.DOClusterList) + return Convert_v1beta1_DOClusterList_To_v1alpha4_DOClusterList(src, dst, nil) +} diff --git a/api/v1alpha4/docluster_types.go b/api/v1alpha4/docluster_types.go index 12b632aa3..65ab4eeaa 100644 --- a/api/v1alpha4/docluster_types.go +++ b/api/v1alpha4/docluster_types.go @@ -18,7 +18,7 @@ package v1alpha4 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" ) const ( @@ -63,7 +63,6 @@ type DOClusterStatus struct { // +kubebuilder:object:root=true // +kubebuilder:resource:path=doclusters,scope=Namespaced,categories=cluster-api -// +kubebuilder:storageversion // +kubebuilder:subresource:status // +kubebuilder:printcolumn:name="Cluster",type="string",JSONPath=".metadata.labels.cluster\\.x-k8s\\.io/cluster-name",description="Cluster to which this DOCluster belongs" // +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.ready",description="Cluster infrastructure is ready for DigitalOcean droplet instances" diff --git a/api/v1alpha4/domachine_conversion.go b/api/v1alpha4/domachine_conversion.go index 6ad54105a..2b80e5f62 100644 --- a/api/v1alpha4/domachine_conversion.go +++ b/api/v1alpha4/domachine_conversion.go @@ -16,8 +16,52 @@ limitations under the License. package v1alpha4 -// Hub marks DOMachine as a conversion hub. -func (*DOMachine) Hub() {} +import ( + utilconversion "sigs.k8s.io/cluster-api/util/conversion" + "sigs.k8s.io/controller-runtime/pkg/conversion" -// Hub marks DOMachineList as a conversion hub. -func (*DOMachineList) Hub() {} + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" +) + +// ConvertTo converts this DOMachine to the Hub version (v1beta1). +func (src *DOMachine) ConvertTo(dstRaw conversion.Hub) error { // nolint + dst := dstRaw.(*infrav1.DOMachine) + if err := Convert_v1alpha4_DOMachine_To_v1beta1_DOMachine(src, dst, nil); err != nil { + return err + } + + // Manually restore data from annotations + restored := &infrav1.DOMachine{} + if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { + return err + } + + return nil +} + +// ConvertFrom converts from the Hub version (v1beta1) to this version. +func (dst *DOMachine) ConvertFrom(srcRaw conversion.Hub) error { // nolint + src := srcRaw.(*infrav1.DOMachine) + if err := Convert_v1beta1_DOMachine_To_v1alpha4_DOMachine(src, dst, nil); err != nil { + return err + } + + // Preserve Hub data on down-conversion. + if err := utilconversion.MarshalData(src, dst); err != nil { + return err + } + + return nil +} + +// ConvertTo converts this DOMachineList to the Hub version (v1beta1). +func (src *DOMachineList) ConvertTo(dstRaw conversion.Hub) error { // nolint + dst := dstRaw.(*infrav1.DOMachineList) + return Convert_v1alpha4_DOMachineList_To_v1beta1_DOMachineList(src, dst, nil) +} + +// ConvertFrom converts from the Hub version (v1beta1) to this version. +func (dst *DOMachineList) ConvertFrom(srcRaw conversion.Hub) error { // nolint + src := srcRaw.(*infrav1.DOMachineList) + return Convert_v1beta1_DOMachineList_To_v1alpha4_DOMachineList(src, dst, nil) +} diff --git a/api/v1alpha4/domachine_types.go b/api/v1alpha4/domachine_types.go index cd9d4615f..23df53561 100644 --- a/api/v1alpha4/domachine_types.go +++ b/api/v1alpha4/domachine_types.go @@ -102,7 +102,6 @@ type DOMachineStatus struct { // +kubebuilder:object:root=true // +kubebuilder:resource:path=domachines,scope=Namespaced,categories=cluster-api -// +kubebuilder:storageversion // +kubebuilder:subresource:status // +kubebuilder:printcolumn:name="Cluster",type="string",JSONPath=".metadata.labels.cluster\\.x-k8s\\.io/cluster-name",description="Cluster to which this DOMachine belongs" // +kubebuilder:printcolumn:name="State",type="string",JSONPath=".status.instanceStatus",description="DigitalOcean droplet instance state" diff --git a/api/v1alpha4/domachinetemplate_conversion.go b/api/v1alpha4/domachinetemplate_conversion.go index 5c31b9319..a90ca13b8 100644 --- a/api/v1alpha4/domachinetemplate_conversion.go +++ b/api/v1alpha4/domachinetemplate_conversion.go @@ -16,8 +16,52 @@ limitations under the License. package v1alpha4 -// Hub marks DOMachineTemplate as a conversion hub. -func (*DOMachineTemplate) Hub() {} +import ( + utilconversion "sigs.k8s.io/cluster-api/util/conversion" + "sigs.k8s.io/controller-runtime/pkg/conversion" -// Hub marks DOMachineTemplateList as a conversion hub. -func (*DOMachineTemplateList) Hub() {} + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" +) + +// ConvertTo converts this DOMachineTemplate to the Hub version (v1beta1). +func (src *DOMachineTemplate) ConvertTo(dstRaw conversion.Hub) error { // nolint + dst := dstRaw.(*infrav1.DOMachineTemplate) + if err := Convert_v1alpha4_DOMachineTemplate_To_v1beta1_DOMachineTemplate(src, dst, nil); err != nil { + return err + } + + // Manually restore data from annotations + restored := &infrav1.DOMachineTemplate{} + if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok { + return err + } + + return nil +} + +// ConvertFrom converts from the Hub version (v1beta1) to this version. +func (dst *DOMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error { // nolint + src := srcRaw.(*infrav1.DOMachineTemplate) + if err := Convert_v1beta1_DOMachineTemplate_To_v1alpha4_DOMachineTemplate(src, dst, nil); err != nil { + return err + } + + // Preserve Hub data on down-conversion. + if err := utilconversion.MarshalData(src, dst); err != nil { + return err + } + + return nil +} + +// ConvertTo converts this DOMachineTemplateList to the Hub version (v1beta1). +func (src *DOMachineTemplateList) ConvertTo(dstRaw conversion.Hub) error { // nolint + dst := dstRaw.(*infrav1.DOMachineTemplateList) + return Convert_v1alpha4_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList(src, dst, nil) +} + +// ConvertFrom converts from the Hub version (v1beta1) to this version. +func (dst *DOMachineTemplateList) ConvertFrom(srcRaw conversion.Hub) error { // nolint + src := srcRaw.(*infrav1.DOMachineTemplateList) + return Convert_v1beta1_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList(src, dst, nil) +} diff --git a/api/v1alpha4/domachinetemplate_types.go b/api/v1alpha4/domachinetemplate_types.go index be564fbcb..e09003c63 100644 --- a/api/v1alpha4/domachinetemplate_types.go +++ b/api/v1alpha4/domachinetemplate_types.go @@ -27,7 +27,6 @@ type DOMachineTemplateSpec struct { // +kubebuilder:object:root=true // +kubebuilder:resource:path=domachinetemplates,scope=Namespaced,categories=cluster-api -// +kubebuilder:storageversion // DOMachineTemplate is the Schema for the domachinetemplates API. type DOMachineTemplate struct { diff --git a/api/v1alpha4/groupversion_info.go b/api/v1alpha4/groupversion_info.go index 795355354..afa1ac949 100644 --- a/api/v1alpha4/groupversion_info.go +++ b/api/v1alpha4/groupversion_info.go @@ -14,10 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Package v1alpha4 contains API Schema definitions for the infrastructure v1alpha4 API group +package v1alpha4 + // +kubebuilder:object:generate=true // +groupName=infrastructure.cluster.x-k8s.io -package v1alpha4 import ( "k8s.io/apimachinery/pkg/runtime/schema" @@ -33,4 +33,7 @@ var ( // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = SchemeBuilder.AddToScheme + + // localSchemeBuilder is used for type conversions. + localSchemeBuilder = SchemeBuilder.SchemeBuilder ) diff --git a/api/v1alpha4/zz_generated.conversion.go b/api/v1alpha4/zz_generated.conversion.go new file mode 100644 index 000000000..b2ebc7323 --- /dev/null +++ b/api/v1alpha4/zz_generated.conversion.go @@ -0,0 +1,798 @@ +// +build !ignore_autogenerated_core_v1alpha4 + +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by conversion-gen-v0.22.2. DO NOT EDIT. + +package v1alpha4 + +import ( + unsafe "unsafe" + + v1 "k8s.io/api/core/v1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + intstr "k8s.io/apimachinery/pkg/util/intstr" + v1beta1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" + errors "sigs.k8s.io/cluster-api/errors" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*BuildTagParams)(nil), (*v1beta1.BuildTagParams)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_BuildTagParams_To_v1beta1_BuildTagParams(a.(*BuildTagParams), b.(*v1beta1.BuildTagParams), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.BuildTagParams)(nil), (*BuildTagParams)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_BuildTagParams_To_v1alpha4_BuildTagParams(a.(*v1beta1.BuildTagParams), b.(*BuildTagParams), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOCluster)(nil), (*v1beta1.DOCluster)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOCluster_To_v1beta1_DOCluster(a.(*DOCluster), b.(*v1beta1.DOCluster), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOCluster)(nil), (*DOCluster)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOCluster_To_v1alpha4_DOCluster(a.(*v1beta1.DOCluster), b.(*DOCluster), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOClusterList)(nil), (*v1beta1.DOClusterList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOClusterList_To_v1beta1_DOClusterList(a.(*DOClusterList), b.(*v1beta1.DOClusterList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOClusterList)(nil), (*DOClusterList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOClusterList_To_v1alpha4_DOClusterList(a.(*v1beta1.DOClusterList), b.(*DOClusterList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOClusterSpec)(nil), (*v1beta1.DOClusterSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOClusterSpec_To_v1beta1_DOClusterSpec(a.(*DOClusterSpec), b.(*v1beta1.DOClusterSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOClusterSpec)(nil), (*DOClusterSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOClusterSpec_To_v1alpha4_DOClusterSpec(a.(*v1beta1.DOClusterSpec), b.(*DOClusterSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOClusterStatus)(nil), (*v1beta1.DOClusterStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOClusterStatus_To_v1beta1_DOClusterStatus(a.(*DOClusterStatus), b.(*v1beta1.DOClusterStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOClusterStatus)(nil), (*DOClusterStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOClusterStatus_To_v1alpha4_DOClusterStatus(a.(*v1beta1.DOClusterStatus), b.(*DOClusterStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOControlPlaneDNS)(nil), (*v1beta1.DOControlPlaneDNS)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOControlPlaneDNS_To_v1beta1_DOControlPlaneDNS(a.(*DOControlPlaneDNS), b.(*v1beta1.DOControlPlaneDNS), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOControlPlaneDNS)(nil), (*DOControlPlaneDNS)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOControlPlaneDNS_To_v1alpha4_DOControlPlaneDNS(a.(*v1beta1.DOControlPlaneDNS), b.(*DOControlPlaneDNS), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOLoadBalancer)(nil), (*v1beta1.DOLoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOLoadBalancer_To_v1beta1_DOLoadBalancer(a.(*DOLoadBalancer), b.(*v1beta1.DOLoadBalancer), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOLoadBalancer)(nil), (*DOLoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOLoadBalancer_To_v1alpha4_DOLoadBalancer(a.(*v1beta1.DOLoadBalancer), b.(*DOLoadBalancer), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOLoadBalancerHealthCheck)(nil), (*v1beta1.DOLoadBalancerHealthCheck)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck(a.(*DOLoadBalancerHealthCheck), b.(*v1beta1.DOLoadBalancerHealthCheck), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOLoadBalancerHealthCheck)(nil), (*DOLoadBalancerHealthCheck)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck(a.(*v1beta1.DOLoadBalancerHealthCheck), b.(*DOLoadBalancerHealthCheck), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOMachine)(nil), (*v1beta1.DOMachine)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOMachine_To_v1beta1_DOMachine(a.(*DOMachine), b.(*v1beta1.DOMachine), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachine)(nil), (*DOMachine)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachine_To_v1alpha4_DOMachine(a.(*v1beta1.DOMachine), b.(*DOMachine), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOMachineList)(nil), (*v1beta1.DOMachineList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOMachineList_To_v1beta1_DOMachineList(a.(*DOMachineList), b.(*v1beta1.DOMachineList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineList)(nil), (*DOMachineList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineList_To_v1alpha4_DOMachineList(a.(*v1beta1.DOMachineList), b.(*DOMachineList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOMachineSpec)(nil), (*v1beta1.DOMachineSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOMachineSpec_To_v1beta1_DOMachineSpec(a.(*DOMachineSpec), b.(*v1beta1.DOMachineSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineSpec)(nil), (*DOMachineSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineSpec_To_v1alpha4_DOMachineSpec(a.(*v1beta1.DOMachineSpec), b.(*DOMachineSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOMachineStatus)(nil), (*v1beta1.DOMachineStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOMachineStatus_To_v1beta1_DOMachineStatus(a.(*DOMachineStatus), b.(*v1beta1.DOMachineStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineStatus)(nil), (*DOMachineStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineStatus_To_v1alpha4_DOMachineStatus(a.(*v1beta1.DOMachineStatus), b.(*DOMachineStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOMachineTemplate)(nil), (*v1beta1.DOMachineTemplate)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOMachineTemplate_To_v1beta1_DOMachineTemplate(a.(*DOMachineTemplate), b.(*v1beta1.DOMachineTemplate), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineTemplate)(nil), (*DOMachineTemplate)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineTemplate_To_v1alpha4_DOMachineTemplate(a.(*v1beta1.DOMachineTemplate), b.(*DOMachineTemplate), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOMachineTemplateList)(nil), (*v1beta1.DOMachineTemplateList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList(a.(*DOMachineTemplateList), b.(*v1beta1.DOMachineTemplateList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineTemplateList)(nil), (*DOMachineTemplateList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList(a.(*v1beta1.DOMachineTemplateList), b.(*DOMachineTemplateList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOMachineTemplateResource)(nil), (*v1beta1.DOMachineTemplateResource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource(a.(*DOMachineTemplateResource), b.(*v1beta1.DOMachineTemplateResource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineTemplateResource)(nil), (*DOMachineTemplateResource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource(a.(*v1beta1.DOMachineTemplateResource), b.(*DOMachineTemplateResource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOMachineTemplateSpec)(nil), (*v1beta1.DOMachineTemplateSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec(a.(*DOMachineTemplateSpec), b.(*v1beta1.DOMachineTemplateSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOMachineTemplateSpec)(nil), (*DOMachineTemplateSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec(a.(*v1beta1.DOMachineTemplateSpec), b.(*DOMachineTemplateSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DONetwork)(nil), (*v1beta1.DONetwork)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DONetwork_To_v1beta1_DONetwork(a.(*DONetwork), b.(*v1beta1.DONetwork), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DONetwork)(nil), (*DONetwork)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DONetwork_To_v1alpha4_DONetwork(a.(*v1beta1.DONetwork), b.(*DONetwork), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DONetworkResource)(nil), (*v1beta1.DONetworkResource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DONetworkResource_To_v1beta1_DONetworkResource(a.(*DONetworkResource), b.(*v1beta1.DONetworkResource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DONetworkResource)(nil), (*DONetworkResource)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DONetworkResource_To_v1alpha4_DONetworkResource(a.(*v1beta1.DONetworkResource), b.(*DONetworkResource), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOResourceReference)(nil), (*v1beta1.DOResourceReference)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOResourceReference_To_v1beta1_DOResourceReference(a.(*DOResourceReference), b.(*v1beta1.DOResourceReference), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOResourceReference)(nil), (*DOResourceReference)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOResourceReference_To_v1alpha4_DOResourceReference(a.(*v1beta1.DOResourceReference), b.(*DOResourceReference), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DOVPC)(nil), (*v1beta1.DOVPC)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DOVPC_To_v1beta1_DOVPC(a.(*DOVPC), b.(*v1beta1.DOVPC), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DOVPC)(nil), (*DOVPC)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DOVPC_To_v1alpha4_DOVPC(a.(*v1beta1.DOVPC), b.(*DOVPC), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*DataDisk)(nil), (*v1beta1.DataDisk)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_DataDisk_To_v1beta1_DataDisk(a.(*DataDisk), b.(*v1beta1.DataDisk), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1beta1.DataDisk)(nil), (*DataDisk)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_DataDisk_To_v1alpha4_DataDisk(a.(*v1beta1.DataDisk), b.(*DataDisk), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1alpha4_BuildTagParams_To_v1beta1_BuildTagParams(in *BuildTagParams, out *v1beta1.BuildTagParams, s conversion.Scope) error { + out.ClusterName = in.ClusterName + out.ClusterUID = in.ClusterUID + out.Name = in.Name + out.Role = in.Role + out.Additional = *(*v1beta1.Tags)(unsafe.Pointer(&in.Additional)) + return nil +} + +// Convert_v1alpha4_BuildTagParams_To_v1beta1_BuildTagParams is an autogenerated conversion function. +func Convert_v1alpha4_BuildTagParams_To_v1beta1_BuildTagParams(in *BuildTagParams, out *v1beta1.BuildTagParams, s conversion.Scope) error { + return autoConvert_v1alpha4_BuildTagParams_To_v1beta1_BuildTagParams(in, out, s) +} + +func autoConvert_v1beta1_BuildTagParams_To_v1alpha4_BuildTagParams(in *v1beta1.BuildTagParams, out *BuildTagParams, s conversion.Scope) error { + out.ClusterName = in.ClusterName + out.ClusterUID = in.ClusterUID + out.Name = in.Name + out.Role = in.Role + out.Additional = *(*Tags)(unsafe.Pointer(&in.Additional)) + return nil +} + +// Convert_v1beta1_BuildTagParams_To_v1alpha4_BuildTagParams is an autogenerated conversion function. +func Convert_v1beta1_BuildTagParams_To_v1alpha4_BuildTagParams(in *v1beta1.BuildTagParams, out *BuildTagParams, s conversion.Scope) error { + return autoConvert_v1beta1_BuildTagParams_To_v1alpha4_BuildTagParams(in, out, s) +} + +func autoConvert_v1alpha4_DOCluster_To_v1beta1_DOCluster(in *DOCluster, out *v1beta1.DOCluster, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1alpha4_DOClusterSpec_To_v1beta1_DOClusterSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1alpha4_DOClusterStatus_To_v1beta1_DOClusterStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha4_DOCluster_To_v1beta1_DOCluster is an autogenerated conversion function. +func Convert_v1alpha4_DOCluster_To_v1beta1_DOCluster(in *DOCluster, out *v1beta1.DOCluster, s conversion.Scope) error { + return autoConvert_v1alpha4_DOCluster_To_v1beta1_DOCluster(in, out, s) +} + +func autoConvert_v1beta1_DOCluster_To_v1alpha4_DOCluster(in *v1beta1.DOCluster, out *DOCluster, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_DOClusterSpec_To_v1alpha4_DOClusterSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1beta1_DOClusterStatus_To_v1alpha4_DOClusterStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_DOCluster_To_v1alpha4_DOCluster is an autogenerated conversion function. +func Convert_v1beta1_DOCluster_To_v1alpha4_DOCluster(in *v1beta1.DOCluster, out *DOCluster, s conversion.Scope) error { + return autoConvert_v1beta1_DOCluster_To_v1alpha4_DOCluster(in, out, s) +} + +func autoConvert_v1alpha4_DOClusterList_To_v1beta1_DOClusterList(in *DOClusterList, out *v1beta1.DOClusterList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1beta1.DOCluster)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1alpha4_DOClusterList_To_v1beta1_DOClusterList is an autogenerated conversion function. +func Convert_v1alpha4_DOClusterList_To_v1beta1_DOClusterList(in *DOClusterList, out *v1beta1.DOClusterList, s conversion.Scope) error { + return autoConvert_v1alpha4_DOClusterList_To_v1beta1_DOClusterList(in, out, s) +} + +func autoConvert_v1beta1_DOClusterList_To_v1alpha4_DOClusterList(in *v1beta1.DOClusterList, out *DOClusterList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]DOCluster)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1beta1_DOClusterList_To_v1alpha4_DOClusterList is an autogenerated conversion function. +func Convert_v1beta1_DOClusterList_To_v1alpha4_DOClusterList(in *v1beta1.DOClusterList, out *DOClusterList, s conversion.Scope) error { + return autoConvert_v1beta1_DOClusterList_To_v1alpha4_DOClusterList(in, out, s) +} + +func autoConvert_v1alpha4_DOClusterSpec_To_v1beta1_DOClusterSpec(in *DOClusterSpec, out *v1beta1.DOClusterSpec, s conversion.Scope) error { + out.Region = in.Region + if err := Convert_v1alpha4_DONetwork_To_v1beta1_DONetwork(&in.Network, &out.Network, s); err != nil { + return err + } + out.ControlPlaneEndpoint = in.ControlPlaneEndpoint + out.ControlPlaneDNS = (*v1beta1.DOControlPlaneDNS)(unsafe.Pointer(in.ControlPlaneDNS)) + return nil +} + +// Convert_v1alpha4_DOClusterSpec_To_v1beta1_DOClusterSpec is an autogenerated conversion function. +func Convert_v1alpha4_DOClusterSpec_To_v1beta1_DOClusterSpec(in *DOClusterSpec, out *v1beta1.DOClusterSpec, s conversion.Scope) error { + return autoConvert_v1alpha4_DOClusterSpec_To_v1beta1_DOClusterSpec(in, out, s) +} + +func autoConvert_v1beta1_DOClusterSpec_To_v1alpha4_DOClusterSpec(in *v1beta1.DOClusterSpec, out *DOClusterSpec, s conversion.Scope) error { + out.Region = in.Region + if err := Convert_v1beta1_DONetwork_To_v1alpha4_DONetwork(&in.Network, &out.Network, s); err != nil { + return err + } + out.ControlPlaneEndpoint = in.ControlPlaneEndpoint + out.ControlPlaneDNS = (*DOControlPlaneDNS)(unsafe.Pointer(in.ControlPlaneDNS)) + return nil +} + +// Convert_v1beta1_DOClusterSpec_To_v1alpha4_DOClusterSpec is an autogenerated conversion function. +func Convert_v1beta1_DOClusterSpec_To_v1alpha4_DOClusterSpec(in *v1beta1.DOClusterSpec, out *DOClusterSpec, s conversion.Scope) error { + return autoConvert_v1beta1_DOClusterSpec_To_v1alpha4_DOClusterSpec(in, out, s) +} + +func autoConvert_v1alpha4_DOClusterStatus_To_v1beta1_DOClusterStatus(in *DOClusterStatus, out *v1beta1.DOClusterStatus, s conversion.Scope) error { + out.Ready = in.Ready + out.ControlPlaneDNSRecordReady = in.ControlPlaneDNSRecordReady + if err := Convert_v1alpha4_DONetworkResource_To_v1beta1_DONetworkResource(&in.Network, &out.Network, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha4_DOClusterStatus_To_v1beta1_DOClusterStatus is an autogenerated conversion function. +func Convert_v1alpha4_DOClusterStatus_To_v1beta1_DOClusterStatus(in *DOClusterStatus, out *v1beta1.DOClusterStatus, s conversion.Scope) error { + return autoConvert_v1alpha4_DOClusterStatus_To_v1beta1_DOClusterStatus(in, out, s) +} + +func autoConvert_v1beta1_DOClusterStatus_To_v1alpha4_DOClusterStatus(in *v1beta1.DOClusterStatus, out *DOClusterStatus, s conversion.Scope) error { + out.Ready = in.Ready + out.ControlPlaneDNSRecordReady = in.ControlPlaneDNSRecordReady + if err := Convert_v1beta1_DONetworkResource_To_v1alpha4_DONetworkResource(&in.Network, &out.Network, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_DOClusterStatus_To_v1alpha4_DOClusterStatus is an autogenerated conversion function. +func Convert_v1beta1_DOClusterStatus_To_v1alpha4_DOClusterStatus(in *v1beta1.DOClusterStatus, out *DOClusterStatus, s conversion.Scope) error { + return autoConvert_v1beta1_DOClusterStatus_To_v1alpha4_DOClusterStatus(in, out, s) +} + +func autoConvert_v1alpha4_DOControlPlaneDNS_To_v1beta1_DOControlPlaneDNS(in *DOControlPlaneDNS, out *v1beta1.DOControlPlaneDNS, s conversion.Scope) error { + out.Domain = in.Domain + out.Name = in.Name + return nil +} + +// Convert_v1alpha4_DOControlPlaneDNS_To_v1beta1_DOControlPlaneDNS is an autogenerated conversion function. +func Convert_v1alpha4_DOControlPlaneDNS_To_v1beta1_DOControlPlaneDNS(in *DOControlPlaneDNS, out *v1beta1.DOControlPlaneDNS, s conversion.Scope) error { + return autoConvert_v1alpha4_DOControlPlaneDNS_To_v1beta1_DOControlPlaneDNS(in, out, s) +} + +func autoConvert_v1beta1_DOControlPlaneDNS_To_v1alpha4_DOControlPlaneDNS(in *v1beta1.DOControlPlaneDNS, out *DOControlPlaneDNS, s conversion.Scope) error { + out.Domain = in.Domain + out.Name = in.Name + return nil +} + +// Convert_v1beta1_DOControlPlaneDNS_To_v1alpha4_DOControlPlaneDNS is an autogenerated conversion function. +func Convert_v1beta1_DOControlPlaneDNS_To_v1alpha4_DOControlPlaneDNS(in *v1beta1.DOControlPlaneDNS, out *DOControlPlaneDNS, s conversion.Scope) error { + return autoConvert_v1beta1_DOControlPlaneDNS_To_v1alpha4_DOControlPlaneDNS(in, out, s) +} + +func autoConvert_v1alpha4_DOLoadBalancer_To_v1beta1_DOLoadBalancer(in *DOLoadBalancer, out *v1beta1.DOLoadBalancer, s conversion.Scope) error { + out.Port = in.Port + out.Algorithm = in.Algorithm + if err := Convert_v1alpha4_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck(&in.HealthCheck, &out.HealthCheck, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha4_DOLoadBalancer_To_v1beta1_DOLoadBalancer is an autogenerated conversion function. +func Convert_v1alpha4_DOLoadBalancer_To_v1beta1_DOLoadBalancer(in *DOLoadBalancer, out *v1beta1.DOLoadBalancer, s conversion.Scope) error { + return autoConvert_v1alpha4_DOLoadBalancer_To_v1beta1_DOLoadBalancer(in, out, s) +} + +func autoConvert_v1beta1_DOLoadBalancer_To_v1alpha4_DOLoadBalancer(in *v1beta1.DOLoadBalancer, out *DOLoadBalancer, s conversion.Scope) error { + out.Port = in.Port + out.Algorithm = in.Algorithm + if err := Convert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck(&in.HealthCheck, &out.HealthCheck, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_DOLoadBalancer_To_v1alpha4_DOLoadBalancer is an autogenerated conversion function. +func Convert_v1beta1_DOLoadBalancer_To_v1alpha4_DOLoadBalancer(in *v1beta1.DOLoadBalancer, out *DOLoadBalancer, s conversion.Scope) error { + return autoConvert_v1beta1_DOLoadBalancer_To_v1alpha4_DOLoadBalancer(in, out, s) +} + +func autoConvert_v1alpha4_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck(in *DOLoadBalancerHealthCheck, out *v1beta1.DOLoadBalancerHealthCheck, s conversion.Scope) error { + out.Interval = in.Interval + out.Timeout = in.Timeout + out.UnhealthyThreshold = in.UnhealthyThreshold + out.HealthyThreshold = in.HealthyThreshold + return nil +} + +// Convert_v1alpha4_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck is an autogenerated conversion function. +func Convert_v1alpha4_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck(in *DOLoadBalancerHealthCheck, out *v1beta1.DOLoadBalancerHealthCheck, s conversion.Scope) error { + return autoConvert_v1alpha4_DOLoadBalancerHealthCheck_To_v1beta1_DOLoadBalancerHealthCheck(in, out, s) +} + +func autoConvert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck(in *v1beta1.DOLoadBalancerHealthCheck, out *DOLoadBalancerHealthCheck, s conversion.Scope) error { + out.Interval = in.Interval + out.Timeout = in.Timeout + out.UnhealthyThreshold = in.UnhealthyThreshold + out.HealthyThreshold = in.HealthyThreshold + return nil +} + +// Convert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck is an autogenerated conversion function. +func Convert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck(in *v1beta1.DOLoadBalancerHealthCheck, out *DOLoadBalancerHealthCheck, s conversion.Scope) error { + return autoConvert_v1beta1_DOLoadBalancerHealthCheck_To_v1alpha4_DOLoadBalancerHealthCheck(in, out, s) +} + +func autoConvert_v1alpha4_DOMachine_To_v1beta1_DOMachine(in *DOMachine, out *v1beta1.DOMachine, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1alpha4_DOMachineSpec_To_v1beta1_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1alpha4_DOMachineStatus_To_v1beta1_DOMachineStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha4_DOMachine_To_v1beta1_DOMachine is an autogenerated conversion function. +func Convert_v1alpha4_DOMachine_To_v1beta1_DOMachine(in *DOMachine, out *v1beta1.DOMachine, s conversion.Scope) error { + return autoConvert_v1alpha4_DOMachine_To_v1beta1_DOMachine(in, out, s) +} + +func autoConvert_v1beta1_DOMachine_To_v1alpha4_DOMachine(in *v1beta1.DOMachine, out *DOMachine, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_DOMachineSpec_To_v1alpha4_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1beta1_DOMachineStatus_To_v1alpha4_DOMachineStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_DOMachine_To_v1alpha4_DOMachine is an autogenerated conversion function. +func Convert_v1beta1_DOMachine_To_v1alpha4_DOMachine(in *v1beta1.DOMachine, out *DOMachine, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachine_To_v1alpha4_DOMachine(in, out, s) +} + +func autoConvert_v1alpha4_DOMachineList_To_v1beta1_DOMachineList(in *DOMachineList, out *v1beta1.DOMachineList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1beta1.DOMachine)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1alpha4_DOMachineList_To_v1beta1_DOMachineList is an autogenerated conversion function. +func Convert_v1alpha4_DOMachineList_To_v1beta1_DOMachineList(in *DOMachineList, out *v1beta1.DOMachineList, s conversion.Scope) error { + return autoConvert_v1alpha4_DOMachineList_To_v1beta1_DOMachineList(in, out, s) +} + +func autoConvert_v1beta1_DOMachineList_To_v1alpha4_DOMachineList(in *v1beta1.DOMachineList, out *DOMachineList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]DOMachine)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1beta1_DOMachineList_To_v1alpha4_DOMachineList is an autogenerated conversion function. +func Convert_v1beta1_DOMachineList_To_v1alpha4_DOMachineList(in *v1beta1.DOMachineList, out *DOMachineList, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineList_To_v1alpha4_DOMachineList(in, out, s) +} + +func autoConvert_v1alpha4_DOMachineSpec_To_v1beta1_DOMachineSpec(in *DOMachineSpec, out *v1beta1.DOMachineSpec, s conversion.Scope) error { + out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) + out.Size = in.Size + out.Image = in.Image + out.DataDisks = *(*[]v1beta1.DataDisk)(unsafe.Pointer(&in.DataDisks)) + out.SSHKeys = *(*[]intstr.IntOrString)(unsafe.Pointer(&in.SSHKeys)) + out.AdditionalTags = *(*v1beta1.Tags)(unsafe.Pointer(&in.AdditionalTags)) + return nil +} + +// Convert_v1alpha4_DOMachineSpec_To_v1beta1_DOMachineSpec is an autogenerated conversion function. +func Convert_v1alpha4_DOMachineSpec_To_v1beta1_DOMachineSpec(in *DOMachineSpec, out *v1beta1.DOMachineSpec, s conversion.Scope) error { + return autoConvert_v1alpha4_DOMachineSpec_To_v1beta1_DOMachineSpec(in, out, s) +} + +func autoConvert_v1beta1_DOMachineSpec_To_v1alpha4_DOMachineSpec(in *v1beta1.DOMachineSpec, out *DOMachineSpec, s conversion.Scope) error { + out.ProviderID = (*string)(unsafe.Pointer(in.ProviderID)) + out.Size = in.Size + out.Image = in.Image + out.DataDisks = *(*[]DataDisk)(unsafe.Pointer(&in.DataDisks)) + out.SSHKeys = *(*[]intstr.IntOrString)(unsafe.Pointer(&in.SSHKeys)) + out.AdditionalTags = *(*Tags)(unsafe.Pointer(&in.AdditionalTags)) + return nil +} + +// Convert_v1beta1_DOMachineSpec_To_v1alpha4_DOMachineSpec is an autogenerated conversion function. +func Convert_v1beta1_DOMachineSpec_To_v1alpha4_DOMachineSpec(in *v1beta1.DOMachineSpec, out *DOMachineSpec, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineSpec_To_v1alpha4_DOMachineSpec(in, out, s) +} + +func autoConvert_v1alpha4_DOMachineStatus_To_v1beta1_DOMachineStatus(in *DOMachineStatus, out *v1beta1.DOMachineStatus, s conversion.Scope) error { + out.Ready = in.Ready + out.Addresses = *(*[]v1.NodeAddress)(unsafe.Pointer(&in.Addresses)) + out.InstanceStatus = (*v1beta1.DOResourceStatus)(unsafe.Pointer(in.InstanceStatus)) + out.FailureReason = (*errors.MachineStatusError)(unsafe.Pointer(in.FailureReason)) + out.FailureMessage = (*string)(unsafe.Pointer(in.FailureMessage)) + return nil +} + +// Convert_v1alpha4_DOMachineStatus_To_v1beta1_DOMachineStatus is an autogenerated conversion function. +func Convert_v1alpha4_DOMachineStatus_To_v1beta1_DOMachineStatus(in *DOMachineStatus, out *v1beta1.DOMachineStatus, s conversion.Scope) error { + return autoConvert_v1alpha4_DOMachineStatus_To_v1beta1_DOMachineStatus(in, out, s) +} + +func autoConvert_v1beta1_DOMachineStatus_To_v1alpha4_DOMachineStatus(in *v1beta1.DOMachineStatus, out *DOMachineStatus, s conversion.Scope) error { + out.Ready = in.Ready + out.Addresses = *(*[]v1.NodeAddress)(unsafe.Pointer(&in.Addresses)) + out.InstanceStatus = (*DOResourceStatus)(unsafe.Pointer(in.InstanceStatus)) + out.FailureReason = (*errors.MachineStatusError)(unsafe.Pointer(in.FailureReason)) + out.FailureMessage = (*string)(unsafe.Pointer(in.FailureMessage)) + return nil +} + +// Convert_v1beta1_DOMachineStatus_To_v1alpha4_DOMachineStatus is an autogenerated conversion function. +func Convert_v1beta1_DOMachineStatus_To_v1alpha4_DOMachineStatus(in *v1beta1.DOMachineStatus, out *DOMachineStatus, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineStatus_To_v1alpha4_DOMachineStatus(in, out, s) +} + +func autoConvert_v1alpha4_DOMachineTemplate_To_v1beta1_DOMachineTemplate(in *DOMachineTemplate, out *v1beta1.DOMachineTemplate, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1alpha4_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha4_DOMachineTemplate_To_v1beta1_DOMachineTemplate is an autogenerated conversion function. +func Convert_v1alpha4_DOMachineTemplate_To_v1beta1_DOMachineTemplate(in *DOMachineTemplate, out *v1beta1.DOMachineTemplate, s conversion.Scope) error { + return autoConvert_v1alpha4_DOMachineTemplate_To_v1beta1_DOMachineTemplate(in, out, s) +} + +func autoConvert_v1beta1_DOMachineTemplate_To_v1alpha4_DOMachineTemplate(in *v1beta1.DOMachineTemplate, out *DOMachineTemplate, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_DOMachineTemplate_To_v1alpha4_DOMachineTemplate is an autogenerated conversion function. +func Convert_v1beta1_DOMachineTemplate_To_v1alpha4_DOMachineTemplate(in *v1beta1.DOMachineTemplate, out *DOMachineTemplate, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineTemplate_To_v1alpha4_DOMachineTemplate(in, out, s) +} + +func autoConvert_v1alpha4_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList(in *DOMachineTemplateList, out *v1beta1.DOMachineTemplateList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1beta1.DOMachineTemplate)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1alpha4_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList is an autogenerated conversion function. +func Convert_v1alpha4_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList(in *DOMachineTemplateList, out *v1beta1.DOMachineTemplateList, s conversion.Scope) error { + return autoConvert_v1alpha4_DOMachineTemplateList_To_v1beta1_DOMachineTemplateList(in, out, s) +} + +func autoConvert_v1beta1_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList(in *v1beta1.DOMachineTemplateList, out *DOMachineTemplateList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]DOMachineTemplate)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1beta1_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList is an autogenerated conversion function. +func Convert_v1beta1_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList(in *v1beta1.DOMachineTemplateList, out *DOMachineTemplateList, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineTemplateList_To_v1alpha4_DOMachineTemplateList(in, out, s) +} + +func autoConvert_v1alpha4_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource(in *DOMachineTemplateResource, out *v1beta1.DOMachineTemplateResource, s conversion.Scope) error { + if err := Convert_v1alpha4_DOMachineSpec_To_v1beta1_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha4_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource is an autogenerated conversion function. +func Convert_v1alpha4_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource(in *DOMachineTemplateResource, out *v1beta1.DOMachineTemplateResource, s conversion.Scope) error { + return autoConvert_v1alpha4_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource(in, out, s) +} + +func autoConvert_v1beta1_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource(in *v1beta1.DOMachineTemplateResource, out *DOMachineTemplateResource, s conversion.Scope) error { + if err := Convert_v1beta1_DOMachineSpec_To_v1alpha4_DOMachineSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource is an autogenerated conversion function. +func Convert_v1beta1_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource(in *v1beta1.DOMachineTemplateResource, out *DOMachineTemplateResource, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource(in, out, s) +} + +func autoConvert_v1alpha4_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec(in *DOMachineTemplateSpec, out *v1beta1.DOMachineTemplateSpec, s conversion.Scope) error { + if err := Convert_v1alpha4_DOMachineTemplateResource_To_v1beta1_DOMachineTemplateResource(&in.Template, &out.Template, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha4_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec is an autogenerated conversion function. +func Convert_v1alpha4_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec(in *DOMachineTemplateSpec, out *v1beta1.DOMachineTemplateSpec, s conversion.Scope) error { + return autoConvert_v1alpha4_DOMachineTemplateSpec_To_v1beta1_DOMachineTemplateSpec(in, out, s) +} + +func autoConvert_v1beta1_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec(in *v1beta1.DOMachineTemplateSpec, out *DOMachineTemplateSpec, s conversion.Scope) error { + if err := Convert_v1beta1_DOMachineTemplateResource_To_v1alpha4_DOMachineTemplateResource(&in.Template, &out.Template, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec is an autogenerated conversion function. +func Convert_v1beta1_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec(in *v1beta1.DOMachineTemplateSpec, out *DOMachineTemplateSpec, s conversion.Scope) error { + return autoConvert_v1beta1_DOMachineTemplateSpec_To_v1alpha4_DOMachineTemplateSpec(in, out, s) +} + +func autoConvert_v1alpha4_DONetwork_To_v1beta1_DONetwork(in *DONetwork, out *v1beta1.DONetwork, s conversion.Scope) error { + if err := Convert_v1alpha4_DOLoadBalancer_To_v1beta1_DOLoadBalancer(&in.APIServerLoadbalancers, &out.APIServerLoadbalancers, s); err != nil { + return err + } + if err := Convert_v1alpha4_DOVPC_To_v1beta1_DOVPC(&in.VPC, &out.VPC, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha4_DONetwork_To_v1beta1_DONetwork is an autogenerated conversion function. +func Convert_v1alpha4_DONetwork_To_v1beta1_DONetwork(in *DONetwork, out *v1beta1.DONetwork, s conversion.Scope) error { + return autoConvert_v1alpha4_DONetwork_To_v1beta1_DONetwork(in, out, s) +} + +func autoConvert_v1beta1_DONetwork_To_v1alpha4_DONetwork(in *v1beta1.DONetwork, out *DONetwork, s conversion.Scope) error { + if err := Convert_v1beta1_DOLoadBalancer_To_v1alpha4_DOLoadBalancer(&in.APIServerLoadbalancers, &out.APIServerLoadbalancers, s); err != nil { + return err + } + if err := Convert_v1beta1_DOVPC_To_v1alpha4_DOVPC(&in.VPC, &out.VPC, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_DONetwork_To_v1alpha4_DONetwork is an autogenerated conversion function. +func Convert_v1beta1_DONetwork_To_v1alpha4_DONetwork(in *v1beta1.DONetwork, out *DONetwork, s conversion.Scope) error { + return autoConvert_v1beta1_DONetwork_To_v1alpha4_DONetwork(in, out, s) +} + +func autoConvert_v1alpha4_DONetworkResource_To_v1beta1_DONetworkResource(in *DONetworkResource, out *v1beta1.DONetworkResource, s conversion.Scope) error { + if err := Convert_v1alpha4_DOResourceReference_To_v1beta1_DOResourceReference(&in.APIServerLoadbalancersRef, &out.APIServerLoadbalancersRef, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha4_DONetworkResource_To_v1beta1_DONetworkResource is an autogenerated conversion function. +func Convert_v1alpha4_DONetworkResource_To_v1beta1_DONetworkResource(in *DONetworkResource, out *v1beta1.DONetworkResource, s conversion.Scope) error { + return autoConvert_v1alpha4_DONetworkResource_To_v1beta1_DONetworkResource(in, out, s) +} + +func autoConvert_v1beta1_DONetworkResource_To_v1alpha4_DONetworkResource(in *v1beta1.DONetworkResource, out *DONetworkResource, s conversion.Scope) error { + if err := Convert_v1beta1_DOResourceReference_To_v1alpha4_DOResourceReference(&in.APIServerLoadbalancersRef, &out.APIServerLoadbalancersRef, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_DONetworkResource_To_v1alpha4_DONetworkResource is an autogenerated conversion function. +func Convert_v1beta1_DONetworkResource_To_v1alpha4_DONetworkResource(in *v1beta1.DONetworkResource, out *DONetworkResource, s conversion.Scope) error { + return autoConvert_v1beta1_DONetworkResource_To_v1alpha4_DONetworkResource(in, out, s) +} + +func autoConvert_v1alpha4_DOResourceReference_To_v1beta1_DOResourceReference(in *DOResourceReference, out *v1beta1.DOResourceReference, s conversion.Scope) error { + out.ResourceID = in.ResourceID + out.ResourceStatus = v1beta1.DOResourceStatus(in.ResourceStatus) + return nil +} + +// Convert_v1alpha4_DOResourceReference_To_v1beta1_DOResourceReference is an autogenerated conversion function. +func Convert_v1alpha4_DOResourceReference_To_v1beta1_DOResourceReference(in *DOResourceReference, out *v1beta1.DOResourceReference, s conversion.Scope) error { + return autoConvert_v1alpha4_DOResourceReference_To_v1beta1_DOResourceReference(in, out, s) +} + +func autoConvert_v1beta1_DOResourceReference_To_v1alpha4_DOResourceReference(in *v1beta1.DOResourceReference, out *DOResourceReference, s conversion.Scope) error { + out.ResourceID = in.ResourceID + out.ResourceStatus = DOResourceStatus(in.ResourceStatus) + return nil +} + +// Convert_v1beta1_DOResourceReference_To_v1alpha4_DOResourceReference is an autogenerated conversion function. +func Convert_v1beta1_DOResourceReference_To_v1alpha4_DOResourceReference(in *v1beta1.DOResourceReference, out *DOResourceReference, s conversion.Scope) error { + return autoConvert_v1beta1_DOResourceReference_To_v1alpha4_DOResourceReference(in, out, s) +} + +func autoConvert_v1alpha4_DOVPC_To_v1beta1_DOVPC(in *DOVPC, out *v1beta1.DOVPC, s conversion.Scope) error { + out.VPCUUID = in.VPCUUID + return nil +} + +// Convert_v1alpha4_DOVPC_To_v1beta1_DOVPC is an autogenerated conversion function. +func Convert_v1alpha4_DOVPC_To_v1beta1_DOVPC(in *DOVPC, out *v1beta1.DOVPC, s conversion.Scope) error { + return autoConvert_v1alpha4_DOVPC_To_v1beta1_DOVPC(in, out, s) +} + +func autoConvert_v1beta1_DOVPC_To_v1alpha4_DOVPC(in *v1beta1.DOVPC, out *DOVPC, s conversion.Scope) error { + out.VPCUUID = in.VPCUUID + return nil +} + +// Convert_v1beta1_DOVPC_To_v1alpha4_DOVPC is an autogenerated conversion function. +func Convert_v1beta1_DOVPC_To_v1alpha4_DOVPC(in *v1beta1.DOVPC, out *DOVPC, s conversion.Scope) error { + return autoConvert_v1beta1_DOVPC_To_v1alpha4_DOVPC(in, out, s) +} + +func autoConvert_v1alpha4_DataDisk_To_v1beta1_DataDisk(in *DataDisk, out *v1beta1.DataDisk, s conversion.Scope) error { + out.NameSuffix = in.NameSuffix + out.DiskSizeGB = in.DiskSizeGB + out.FilesystemType = in.FilesystemType + out.FilesystemLabel = in.FilesystemLabel + return nil +} + +// Convert_v1alpha4_DataDisk_To_v1beta1_DataDisk is an autogenerated conversion function. +func Convert_v1alpha4_DataDisk_To_v1beta1_DataDisk(in *DataDisk, out *v1beta1.DataDisk, s conversion.Scope) error { + return autoConvert_v1alpha4_DataDisk_To_v1beta1_DataDisk(in, out, s) +} + +func autoConvert_v1beta1_DataDisk_To_v1alpha4_DataDisk(in *v1beta1.DataDisk, out *DataDisk, s conversion.Scope) error { + out.NameSuffix = in.NameSuffix + out.DiskSizeGB = in.DiskSizeGB + out.FilesystemType = in.FilesystemType + out.FilesystemLabel = in.FilesystemLabel + return nil +} + +// Convert_v1beta1_DataDisk_To_v1alpha4_DataDisk is an autogenerated conversion function. +func Convert_v1beta1_DataDisk_To_v1alpha4_DataDisk(in *v1beta1.DataDisk, out *DataDisk, s conversion.Scope) error { + return autoConvert_v1beta1_DataDisk_To_v1alpha4_DataDisk(in, out, s) +} diff --git a/api/v1beta1/doc.go b/api/v1beta1/doc.go new file mode 100644 index 000000000..d55ab5609 --- /dev/null +++ b/api/v1beta1/doc.go @@ -0,0 +1,17 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 diff --git a/api/v1beta1/docluster_conversion.go b/api/v1beta1/docluster_conversion.go new file mode 100644 index 000000000..bc7e83c37 --- /dev/null +++ b/api/v1beta1/docluster_conversion.go @@ -0,0 +1,23 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +// Hub marks DOCluster as a conversion hub. +func (*DOCluster) Hub() {} + +// Hub marks DOClusterList as a conversion hub. +func (*DOClusterList) Hub() {} diff --git a/api/v1beta1/docluster_types.go b/api/v1beta1/docluster_types.go new file mode 100644 index 000000000..ff71f2d4e --- /dev/null +++ b/api/v1beta1/docluster_types.go @@ -0,0 +1,92 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" +) + +const ( + // ClusterFinalizer allows ReconcileDOCluster to clean up DigitalOcean resources associated with DOCluster before + // removing it from the apiserver. + ClusterFinalizer = "docluster.infrastructure.cluster.x-k8s.io" +) + +// DOClusterSpec defines the desired state of DOCluster. +type DOClusterSpec struct { + // The DigitalOcean Region the cluster lives in. It must be one of available + // region on DigitalOcean. See + // https://developers.digitalocean.com/documentation/v2/#list-all-regions + Region string `json:"region"` + // Network configurations + // +optional + Network DONetwork `json:"network,omitempty"` + // ControlPlaneEndpoint represents the endpoint used to communicate with the + // control plane. If ControlPlaneDNS is unset, the DO load-balancer IP + // of the Kubernetes API Server is used. + // +optional + ControlPlaneEndpoint clusterv1.APIEndpoint `json:"controlPlaneEndpoint"` + // ControlPlaneDNS is a managed DNS name that points to the load-balancer + // IP used for the ControlPlaneEndpoint. + // +optional + ControlPlaneDNS *DOControlPlaneDNS `json:"controlPlaneDNS,omitempty"` +} + +// DOClusterStatus defines the observed state of DOCluster. +type DOClusterStatus struct { + // Ready denotes that the cluster (infrastructure) is ready. + // +optional + Ready bool `json:"ready"` + // ControlPlaneDNSRecordReady denotes that the DNS record is ready and + // propagated to the DO DNS servers. + // +optional + ControlPlaneDNSRecordReady bool `json:"controlPlaneDNSRecordReady,omitempty"` + // Network encapsulates all things related to DigitalOcean network. + // +optional + Network DONetworkResource `json:"network,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:resource:path=doclusters,scope=Namespaced,categories=cluster-api +// +kubebuilder:storageversion +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name="Cluster",type="string",JSONPath=".metadata.labels.cluster\\.x-k8s\\.io/cluster-name",description="Cluster to which this DOCluster belongs" +// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.ready",description="Cluster infrastructure is ready for DigitalOcean droplet instances" +// +kubebuilder:printcolumn:name="Endpoint",type="string",JSONPath=".spec.ControlPlaneEndpoint",description="API Endpoint",priority=1 + +// DOCluster is the Schema for the DOClusters API. +type DOCluster struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec DOClusterSpec `json:"spec,omitempty"` + Status DOClusterStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// DOClusterList contains a list of DOCluster. +type DOClusterList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []DOCluster `json:"items"` +} + +func init() { + SchemeBuilder.Register(&DOCluster{}, &DOClusterList{}) +} diff --git a/api/v1alpha4/docluster_webhook.go b/api/v1beta1/docluster_webhook.go similarity index 80% rename from api/v1alpha4/docluster_webhook.go rename to api/v1beta1/docluster_webhook.go index 04c330fba..df3b1dab8 100644 --- a/api/v1alpha4/docluster_webhook.go +++ b/api/v1beta1/docluster_webhook.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha4 +package v1beta1 import ( "fmt" @@ -24,7 +24,7 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation/field" - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook" @@ -33,8 +33,8 @@ import ( // log is for logging in this package. var _ = logf.Log.WithName("docluster-resource") -// +kubebuilder:webhook:verbs=create;update,path=/validate-infrastructure-cluster-x-k8s-io-v1alpha4-docluster,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=doclusters,versions=v1alpha4,name=validation.docluster.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 -// +kubebuilder:webhook:verbs=create;update,path=/mutate-infrastructure-cluster-x-k8s-io-v1alpha4-docluster,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=doclusters,versions=v1alpha4,name=default.docluster.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 +// +kubebuilder:webhook:verbs=create;update,path=/validate-infrastructure-cluster-x-k8s-io-v1beta1-docluster,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=doclusters,versions=v1beta1,name=validation.docluster.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 +// +kubebuilder:webhook:verbs=create;update,path=/mutate-infrastructure-cluster-x-k8s-io-v1beta1-docluster,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=doclusters,versions=v1beta1,name=default.docluster.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 var ( _ webhook.Defaulter = &DOCluster{} diff --git a/api/v1beta1/doclustertemplate_types.go b/api/v1beta1/doclustertemplate_types.go new file mode 100644 index 000000000..d0fdc7354 --- /dev/null +++ b/api/v1beta1/doclustertemplate_types.go @@ -0,0 +1,56 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// DOClusterTemplateSpec defines the desired state of DOClusterTemplate. +type DOClusterTemplateSpec struct { + Template DOClusterTemplateResource `json:"template"` +} + +// DOClusterTemplateResource contains spec for DOClusterSpec. +type DOClusterTemplateResource struct { + Spec DOClusterSpec `json:"spec"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:resource:path=doclustertemplates,scope=Namespaced,categories=cluster-api,shortName=doct +// +kubebuilder:storageversion + +// DOClusterTemplate is the Schema for the DOclustertemplates API. +type DOClusterTemplate struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec DOClusterTemplateSpec `json:"spec,omitempty"` +} + +//+kubebuilder:object:root=true + +// DOClusterTemplateList contains a list of DOClusterTemplate. +type DOClusterTemplateList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []DOClusterTemplate `json:"items"` +} + +func init() { + SchemeBuilder.Register(&DOClusterTemplate{}, &DOClusterTemplateList{}) +} diff --git a/api/v1beta1/doclustertemplate_webhook.go b/api/v1beta1/doclustertemplate_webhook.go new file mode 100644 index 000000000..f84e8a2e9 --- /dev/null +++ b/api/v1beta1/doclustertemplate_webhook.go @@ -0,0 +1,75 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +import ( + "fmt" + "reflect" + + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime" + ctrl "sigs.k8s.io/controller-runtime" + logf "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/webhook" +) + +// log is for logging in this package. +var doclustertemplatelog = logf.Log.WithName("doclustertemplate-resource") + +func (r *DOClusterTemplate) SetupWebhookWithManager(mgr ctrl.Manager) error { + return ctrl.NewWebhookManagedBy(mgr). + For(r). + Complete() +} + +//+kubebuilder:webhook:verbs=create;update,path=/mutate-infrastructure-cluster-x-k8s-io-v1beta1-doclustertemplate,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=doclustertemplates,versions=v1beta1,name=default.doclustertemplate.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 +//+kubebuilder:webhook:verbs=create;update,path=/validate-infrastructure-cluster-x-k8s-io-v1beta1-doclustertemplate,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=doclustertemplates,versions=v1beta1,name=validation.doclustertemplate.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 + +var _ webhook.Defaulter = &DOClusterTemplate{} + +// Default implements webhook.Defaulter so a webhook will be registered for the type. +func (r *DOClusterTemplate) Default() { + doclustertemplatelog.Info("default", "name", r.Name) +} + +var _ webhook.Validator = &DOClusterTemplate{} + +// ValidateCreate implements webhook.Validator so a webhook will be registered for the type. +func (r *DOClusterTemplate) ValidateCreate() error { + doclustertemplatelog.Info("validate create", "name", r.Name) + + return nil +} + +// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. +func (r *DOClusterTemplate) ValidateUpdate(oldRaw runtime.Object) error { + old, ok := oldRaw.(*DOClusterTemplate) + if !ok { + return apierrors.NewBadRequest(fmt.Sprintf("expected an DOClusterTemplate but got a %T", oldRaw)) + } + + if !reflect.DeepEqual(r.Spec, old.Spec) { + return apierrors.NewBadRequest("DOClusterTemplate.Spec is immutable") + } + return nil +} + +// ValidateDelete implements webhook.Validator so a webhook will be registered for the type. +func (r *DOClusterTemplate) ValidateDelete() error { + doclustertemplatelog.Info("validate delete", "name", r.Name) + return nil +} diff --git a/api/v1beta1/domachine_conversion.go b/api/v1beta1/domachine_conversion.go new file mode 100644 index 000000000..313f5310b --- /dev/null +++ b/api/v1beta1/domachine_conversion.go @@ -0,0 +1,23 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +// Hub marks DOMachine as a conversion hub. +func (*DOMachine) Hub() {} + +// Hub marks DOMachineList as a conversion hub. +func (*DOMachineList) Hub() {} diff --git a/api/v1beta1/domachine_types.go b/api/v1beta1/domachine_types.go new file mode 100644 index 000000000..e44a50ac2 --- /dev/null +++ b/api/v1beta1/domachine_types.go @@ -0,0 +1,133 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" + "sigs.k8s.io/cluster-api/errors" +) + +const ( + // MachineFinalizer allows ReconcileDOMachine to clean up DigitalOcean resources associated with DOMachine before + // removing it from the apiserver. + MachineFinalizer = "domachine.infrastructure.cluster.x-k8s.io" +) + +// DOMachineSpec defines the desired state of DOMachine. +type DOMachineSpec struct { + // ProviderID is the unique identifier as specified by the cloud provider. + // +optional + ProviderID *string `json:"providerID,omitempty"` + // Droplet size. It must be known DigitalOcean droplet size. See https://developers.digitalocean.com/documentation/v2/#list-all-sizes + Size string `json:"size"` + // Droplet image can be image id or slug. See https://developers.digitalocean.com/documentation/v2/#list-all-images + Image intstr.IntOrString `json:"image"` + // DataDisks specifies the parameters that are used to add one or more data disks to the machine + DataDisks []DataDisk `json:"dataDisks,omitempty"` + // SSHKeys is the ssh key id or fingerprint to attach in DigitalOcean droplet. + // It must be available on DigitalOcean account. See https://developers.digitalocean.com/documentation/v2/#list-all-keys + SSHKeys []intstr.IntOrString `json:"sshKeys"` + // AdditionalTags is an optional set of tags to add to DigitalOcean resources managed by the DigitalOcean provider. + // +optional + AdditionalTags Tags `json:"additionalTags,omitempty"` +} + +// DOMachineStatus defines the observed state of DOMachine. +type DOMachineStatus struct { + // Ready is true when the provider resource is ready. + // +optional + Ready bool `json:"ready"` + + // Addresses contains the DigitalOcean droplet associated addresses. + Addresses []corev1.NodeAddress `json:"addresses,omitempty"` + + // InstanceStatus is the status of the DigitalOcean droplet instance for this machine. + // +optional + InstanceStatus *DOResourceStatus `json:"instanceStatus,omitempty"` + + // FailureReason will be set in the event that there is a terminal problem + // reconciling the Machine and will contain a succinct value suitable + // for machine interpretation. + // + // This field should not be set for transitive errors that a controller + // faces that are expected to be fixed automatically over + // time (like service outages), but instead indicate that something is + // fundamentally wrong with the Machine's spec or the configuration of + // the controller, and that manual intervention is required. Examples + // of terminal errors would be invalid combinations of settings in the + // spec, values that are unsupported by the controller, or the + // responsible controller itself being critically misconfigured. + // + // Any transient errors that occur during the reconciliation of Machines + // can be added as events to the Machine object and/or logged in the + // controller's output. + // +optional + FailureReason *errors.MachineStatusError `json:"failureReason,omitempty"` + + // FailureMessage will be set in the event that there is a terminal problem + // reconciling the Machine and will contain a more verbose string suitable + // for logging and human consumption. + // + // This field should not be set for transitive errors that a controller + // faces that are expected to be fixed automatically over + // time (like service outages), but instead indicate that something is + // fundamentally wrong with the Machine's spec or the configuration of + // the controller, and that manual intervention is required. Examples + // of terminal errors would be invalid combinations of settings in the + // spec, values that are unsupported by the controller, or the + // responsible controller itself being critically misconfigured. + // + // Any transient errors that occur during the reconciliation of Machines + // can be added as events to the Machine object and/or logged in the + // controller's output. + // +optional + FailureMessage *string `json:"failureMessage,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:resource:path=domachines,scope=Namespaced,categories=cluster-api +// +kubebuilder:storageversion +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name="Cluster",type="string",JSONPath=".metadata.labels.cluster\\.x-k8s\\.io/cluster-name",description="Cluster to which this DOMachine belongs" +// +kubebuilder:printcolumn:name="State",type="string",JSONPath=".status.instanceStatus",description="DigitalOcean droplet instance state" +// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.ready",description="Machine ready status" +// +kubebuilder:printcolumn:name="InstanceID",type="string",JSONPath=".spec.providerID",description="DigitalOcean droplet instance ID" +// +kubebuilder:printcolumn:name="Machine",type="string",JSONPath=".metadata.ownerReferences[?(@.kind==\"Machine\")].name",description="Machine object which owns with this DOMachine" + +// DOMachine is the Schema for the domachines API. +type DOMachine struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec DOMachineSpec `json:"spec,omitempty"` + Status DOMachineStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// DOMachineList contains a list of DOMachine. +type DOMachineList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []DOMachine `json:"items"` +} + +func init() { + SchemeBuilder.Register(&DOMachine{}, &DOMachineList{}) +} diff --git a/api/v1alpha4/domachine_webhook.go b/api/v1beta1/domachine_webhook.go similarity index 83% rename from api/v1alpha4/domachine_webhook.go rename to api/v1beta1/domachine_webhook.go index d16e43f9e..0d32c7fcb 100644 --- a/api/v1alpha4/domachine_webhook.go +++ b/api/v1beta1/domachine_webhook.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha4 +package v1beta1 import ( "reflect" @@ -33,8 +33,8 @@ import ( // log is for logging in this package. var _ = logf.Log.WithName("domachine-resource") -// +kubebuilder:webhook:verbs=create;update,path=/validate-infrastructure-cluster-x-k8s-io-v1alpha4-domachine,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=domachines,versions=v1alpha4,name=validation.domachine.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 -// +kubebuilder:webhook:verbs=create;update,path=/mutate-infrastructure-cluster-x-k8s-io-v1alpha4-domachine,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=domachines,versions=v1alpha4,name=default.domachine.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 +// +kubebuilder:webhook:verbs=create;update,path=/validate-infrastructure-cluster-x-k8s-io-v1beta1-domachine,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=domachines,versions=v1beta1,name=validation.domachine.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 +// +kubebuilder:webhook:verbs=create;update,path=/mutate-infrastructure-cluster-x-k8s-io-v1beta1-domachine,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=domachines,versions=v1beta1,name=default.domachine.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 var ( _ webhook.Defaulter = &DOMachine{} diff --git a/api/v1beta1/domachinetemplate_conversion.go b/api/v1beta1/domachinetemplate_conversion.go new file mode 100644 index 000000000..df7e614a7 --- /dev/null +++ b/api/v1beta1/domachinetemplate_conversion.go @@ -0,0 +1,23 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +// Hub marks DOMachineTemplate as a conversion hub. +func (*DOMachineTemplate) Hub() {} + +// Hub marks DOMachineTemplateList as a conversion hub. +func (*DOMachineTemplateList) Hub() {} diff --git a/api/v1beta1/domachinetemplate_types.go b/api/v1beta1/domachinetemplate_types.go new file mode 100644 index 000000000..54fd06ade --- /dev/null +++ b/api/v1beta1/domachinetemplate_types.go @@ -0,0 +1,51 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// DOMachineTemplateSpec defines the desired state of DOMachineTemplate. +type DOMachineTemplateSpec struct { + Template DOMachineTemplateResource `json:"template"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:resource:path=domachinetemplates,scope=Namespaced,categories=cluster-api +// +kubebuilder:storageversion + +// DOMachineTemplate is the Schema for the domachinetemplates API. +type DOMachineTemplate struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec DOMachineTemplateSpec `json:"spec,omitempty"` +} + +// +kubebuilder:object:root=true + +// DOMachineTemplateList contains a list of DOMachineTemplate. +type DOMachineTemplateList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []DOMachineTemplate `json:"items"` +} + +func init() { + SchemeBuilder.Register(&DOMachineTemplate{}, &DOMachineTemplateList{}) +} diff --git a/api/v1alpha4/domachinetemplate_webhook.go b/api/v1beta1/domachinetemplate_webhook.go similarity index 73% rename from api/v1alpha4/domachinetemplate_webhook.go rename to api/v1beta1/domachinetemplate_webhook.go index d67d6a79e..da6d499b4 100644 --- a/api/v1alpha4/domachinetemplate_webhook.go +++ b/api/v1beta1/domachinetemplate_webhook.go @@ -14,35 +14,33 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha4 +package v1beta1 import ( "reflect" apierrors "k8s.io/apimachinery/pkg/api/errors" - runtime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation/field" - ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook" ) +// +kubebuilder:webhook:verbs=create;update,path=/validate-infrastructure-cluster-x-k8s-io-v1beta1-domachinetemplate,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=domachinetemplates,versions=v1beta1,name=validation.domachinetemplate.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 +// +kubebuilder:webhook:verbs=create;update,path=/mutate-infrastructure-cluster-x-k8s-io-v1beta1-domachinetemplate,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=domachinetemplates,versions=v1beta1,name=default.domachinetemplate.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 + // log is for logging in this package. var _ = logf.Log.WithName("domachinetemplate-resource") -// +kubebuilder:webhook:verbs=create;update,path=/validate-infrastructure-cluster-x-k8s-io-v1alpha4-domachinetemplate,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=infrastructure.cluster.x-k8s.io,resources=domachinetemplates,versions=v1alpha4,name=validation.domachinetemplate.infrastructure.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1 - -var ( - _ webhook.Validator = &DOMachineTemplate{} -) - func (r *DOMachineTemplate) SetupWebhookWithManager(mgr ctrl.Manager) error { return ctrl.NewWebhookManagedBy(mgr). For(r). Complete() } +var _ webhook.Validator = &DOMachineTemplate{} + // ValidateCreate implements webhook.Validator so a webhook will be registered for the type. func (r *DOMachineTemplate) ValidateCreate() error { var allErrs field.ErrorList @@ -78,3 +76,6 @@ func (r *DOMachineTemplate) ValidateUpdate(old runtime.Object) error { func (r *DOMachineTemplate) ValidateDelete() error { return nil } + +// Default implements webhookutil.defaulter so a webhook will be registered for the type. +func (r *DOMachineTemplate) Default() {} diff --git a/api/v1beta1/gcpclustertemplate_webhook_test b/api/v1beta1/gcpclustertemplate_webhook_test new file mode 100644 index 000000000..7d974f670 --- /dev/null +++ b/api/v1beta1/gcpclustertemplate_webhook_test @@ -0,0 +1,86 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +import ( + "testing" + + . "github.com/onsi/gomega" +) + +func TestGCPClusterTemplate_ValidateUpdate(t *testing.T) { + g := NewWithT(t) + + tests := []struct { + name string + newTemplate *GCPClusterTemplate + oldTemplate *GCPClusterTemplate + wantErr bool + }{ + { + name: "GCPClusterTemplated with immutable spec", + newTemplate: &GCPClusterTemplate{ + Spec: GCPClusterTemplateSpec{ + Template: GCPClusterTemplateResource{GCPClusterSpec{ + Project: "test-gcp-cluster", + Region: "ap-south-1", + }}, + }, + }, + oldTemplate: &GCPClusterTemplate{ + Spec: GCPClusterTemplateSpec{ + Template: GCPClusterTemplateResource{GCPClusterSpec{ + Project: "test-gcp-cluster", + Region: "ap-south-1", + }}, + }, + }, + wantErr: false, + }, + { + name: "GCPClusterTemplated with mutable spec", + newTemplate: &GCPClusterTemplate{ + Spec: GCPClusterTemplateSpec{ + Template: GCPClusterTemplateResource{GCPClusterSpec{ + Project: "test-gcp-cluster", + Region: "ap-south-1", + }}, + }, + }, + oldTemplate: &GCPClusterTemplate{ + Spec: GCPClusterTemplateSpec{ + Template: GCPClusterTemplateResource{GCPClusterSpec{ + Project: "test-gcp-cluster", + Region: "ap-east-1", + }}, + }, + }, + wantErr: true, + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + t.Parallel() + err := test.newTemplate.ValidateUpdate(test.oldTemplate) + if test.wantErr { + g.Expect(err).To(HaveOccurred()) + } else { + g.Expect(err).NotTo(HaveOccurred()) + } + }) + } +} diff --git a/api/v1beta1/groupversion_info.go b/api/v1beta1/groupversion_info.go new file mode 100644 index 000000000..3715bbfa5 --- /dev/null +++ b/api/v1beta1/groupversion_info.go @@ -0,0 +1,36 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 contains API Schema definitions for the infrastructure v1beta1 API group +// +kubebuilder:object:generate=true +// +groupName=infrastructure.cluster.x-k8s.io +package v1beta1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +var ( + // GroupVersion is group version used to register these objects. + GroupVersion = schema.GroupVersion{Group: "infrastructure.cluster.x-k8s.io", Version: "v1beta1"} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme. + SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) diff --git a/api/v1beta1/tags.go b/api/v1beta1/tags.go new file mode 100644 index 000000000..6dbb8b69e --- /dev/null +++ b/api/v1beta1/tags.go @@ -0,0 +1,84 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +import ( + "fmt" +) + +// Tags defines a slice of tags. +type Tags []string + +const ( + // NameDigitalOceanProviderPrefix is the tag prefix for + // cluster-api-provider-digitalocean owned components. + NameDigitalOceanProviderPrefix = "sigs-k8s-io:capdo" + // APIServerRoleTagValue describes the value for the apiserver role. + APIServerRoleTagValue = "apiserver" + // NodeRoleTagValue describes the value for the node role. + NodeRoleTagValue = "node" +) + +// ClusterNameTag generates the tag with prefix `NameDigitalOceanProviderPrefix` +// for resources associated with a cluster. It will generated tag like `sigs-k8s-io:capdo:{clusterName}`. +func ClusterNameTag(clusterName string) string { + return fmt.Sprintf("%s:%s", NameDigitalOceanProviderPrefix, clusterName) +} + +// ClusterNameRoleTag generates the tag with prefix `NameDigitalOceanProviderPrefix` and `RoleValue` as suffix +// It will generated tag like `sigs-k8s-io:capdo:{clusterName}:{role}`. +func ClusterNameRoleTag(clusterName, role string) string { + return fmt.Sprintf("%s:%s:%s", NameDigitalOceanProviderPrefix, clusterName, role) +} + +// ClusterNameUIDRoleTag generates the tag with prefix `NameDigitalOceanProviderPrefix` and `RoleValue` as suffix +// It will generated tag like `sigs-k8s-io:capdo:{clusterName}:{UID}:{role}`. +func ClusterNameUIDRoleTag(clusterName, clusterUID, role string) string { + return fmt.Sprintf("%s:%s:%s:%s", NameDigitalOceanProviderPrefix, clusterName, clusterUID, role) +} + +// NameTagFromName returns DigitalOcean safe name tag from name. +func NameTagFromName(name string) string { + return fmt.Sprintf("name:%s", DOSafeName(name)) +} + +// BuildTagParams is used to build tags around an DigitalOcean resource. +type BuildTagParams struct { + // ClusterName is the cluster associated with the resource. + ClusterName string + // ClusterUID is the cluster uid from clusters.cluster.x-k8s.io uid + ClusterUID string + // Name is the name of the resource, it's applied as the tag "name" on DigitalOcean. + Name string + // Role is the role associated to the resource. + Role string + // Any additional tags to be added to the resource. + // +optional + Additional Tags +} + +// BuildTags builds tags including the cluster tag and returns them in map form. +func BuildTags(params BuildTagParams) Tags { + var tags Tags + tags = append(tags, ClusterNameTag(params.ClusterName)) + tags = append(tags, ClusterNameRoleTag(params.ClusterName, params.Role)) + tags = append(tags, ClusterNameUIDRoleTag(params.ClusterName, params.ClusterUID, params.Role)) + tags = append(tags, NameTagFromName(params.Name)) + + tags = append(tags, params.Additional...) + return tags +} diff --git a/api/v1beta1/tags_test.go b/api/v1beta1/tags_test.go new file mode 100644 index 000000000..2112074e2 --- /dev/null +++ b/api/v1beta1/tags_test.go @@ -0,0 +1,58 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +import ( + "reflect" + "testing" +) + +func TestBuildTags(t *testing.T) { + type args struct { + params BuildTagParams + } + tests := []struct { + name string + args args + want Tags + }{ + { + name: "test tags", + args: args{ + params: BuildTagParams{ + ClusterName: "foo", + ClusterUID: "155bd6ca-c6a9-45a8-8c9c-05e09b36bc42", + Name: "bar", + Role: APIServerRoleTagValue, + }, + }, + want: Tags{ + ClusterNameTag("foo"), + ClusterNameRoleTag("foo", APIServerRoleTagValue), + ClusterNameUIDRoleTag("foo", "155bd6ca-c6a9-45a8-8c9c-05e09b36bc42", APIServerRoleTagValue), + NameTagFromName("bar"), + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := BuildTags(tt.args.params); !reflect.DeepEqual(got, tt.want) { + t.Errorf("BuildTags() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/api/v1beta1/types.go b/api/v1beta1/types.go new file mode 100644 index 000000000..9222863cd --- /dev/null +++ b/api/v1beta1/types.go @@ -0,0 +1,202 @@ +/* +Copyright 2021 The Kubernetes Authors. + +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 v1beta1 + +import ( + "fmt" + "strings" +) + +// DOSafeName returns DigitalOcean safe name with replacing '.' and '/' to '-' +// since DigitalOcean doesn't support naming with those character. +func DOSafeName(name string) string { + r := strings.NewReplacer(".", "-", "/", "-") + return r.Replace(name) +} + +// DOControlPlaneDNS ... +type DOControlPlaneDNS struct { + // Domain is the DO domain that this record should live in. It must be pre-existing in your DO account. + // The format must be a string that conforms to the definition of a subdomain in DNS (RFC 1123) + // +kubebuilder:validation:Pattern:=^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + Domain string `json:"domain"` + // Name is the DNS short name of the record (non-FQDN) + // The format must consist of alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character + // +kubebuilder:validation:Pattern:=^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$ + Name string `json:"name"` +} + +// DOResourceStatus describes the status of a DigitalOcean resource. +type DOResourceStatus string + +var ( + // DOResourceStatusNew is the string representing a DigitalOcean resource just created and in a provisioning state. + DOResourceStatusNew = DOResourceStatus("new") + // DOResourceStatusRunning is the string representing a DigitalOcean resource already provisioned and in a active state. + DOResourceStatusRunning = DOResourceStatus("active") + // DOResourceStatusErrored is the string representing a DigitalOcean resource in a errored state. + DOResourceStatusErrored = DOResourceStatus("errored") + // DOResourceStatusOff is the string representing a DigitalOcean resource in off state. + DOResourceStatusOff = DOResourceStatus("off") + // DOResourceStatusArchive is the string representing a DigitalOcean resource in archive state. + DOResourceStatusArchive = DOResourceStatus("archive") +) + +// DOResourceReference is a reference to a DigitalOcean resource. +type DOResourceReference struct { + // ID of DigitalOcean resource + // +optional + ResourceID string `json:"resourceId,omitempty"` + // Status of DigitalOcean resource + // +optional + ResourceStatus DOResourceStatus `json:"resourceStatus,omitempty"` +} + +// DONetworkResource encapsulates DigitalOcean networking resources. +type DONetworkResource struct { + // APIServerLoadbalancersRef is the id of apiserver loadbalancers. + // +optional + APIServerLoadbalancersRef DOResourceReference `json:"apiServerLoadbalancersRef,omitempty"` +} + +// DOMachineTemplateResource describes the data needed to create am DOMachine from a template. +type DOMachineTemplateResource struct { + // Spec is the specification of the desired behavior of the machine. + Spec DOMachineSpec `json:"spec"` +} + +// DataDiskName is the volume name used for a data disk of a droplet. +// It's in the form of -. +func DataDiskName(m *DOMachine, suffix string) string { + return DOSafeName(fmt.Sprintf("%s-%s", m.Name, suffix)) +} + +// DataDisk specifies the parameters that are used to add a data disk to the machine. +type DataDisk struct { + // NameSuffix is the suffix to be appended to the machine name to generate the disk name. + // Each disk name will be in format -. + NameSuffix string `json:"nameSuffix"` + // DiskSizeGB is the size in GB to assign to the data disk. + DiskSizeGB int64 `json:"diskSizeGB"` + // FilesystemType to be used on the volume. When provided the volume will + // be automatically formatted. + FilesystemType string `json:"filesystemType,omitempty"` + // FilesystemLabel is the label that is applied to the created filesystem. + // Character limits apply: 16 for ext4; 12 for xfs. + // May only be used in conjunction with filesystemType. + FilesystemLabel string `json:"filesystemLabel,omitempty"` +} + +// DONetwork encapsulates DigitalOcean networking configuration. +type DONetwork struct { + // Configures an API Server loadbalancers + // +optional + APIServerLoadbalancers DOLoadBalancer `json:"apiServerLoadbalancers,omitempty"` + // VPC defines the VPC configuration. + // +optional + VPC DOVPC `json:"vpc,omitempty"` +} + +// DOLoadBalancer define the DigitalOcean loadbalancers configurations. +type DOLoadBalancer struct { + // API Server port. It must be valid ports range (1-65535). If omitted, default value is 6443. + // +optional + // +kubebuilder:validation:Minimum=1 + // +kubebuilder:validation:Maximum=65535 + Port int `json:"port,omitempty"` + // The API Server load balancing algorithm used to determine which backend Droplet will be selected by a client. + // It must be either "round_robin" or "least_connections". The default value is "round_robin". + // +optional + // +kubebuilder:validation:Enum=round_robin;least_connections + Algorithm string `json:"algorithm,omitempty"` + // An object specifying health check settings for the Load Balancer. If omitted, default values will be provided. + // +optional + HealthCheck DOLoadBalancerHealthCheck `json:"healthCheck,omitempty"` +} + +// DOVPC define the DigitalOcean VPC configuration. +type DOVPC struct { + // VPCUUID defines the VPC UUID to use. An empty value implies using the + // default VPC. + // +optional + VPCUUID string `json:"vpc_uuid,omitempty"` +} + +var ( + // DefaultLBPort default LoadBalancer port. + DefaultLBPort = 6443 + // DefaultLBAlgorithm default LoadBalancer algorithm. + DefaultLBAlgorithm = "round_robin" + // DefaultLBHealthCheckInterval default LoadBalancer health check interval. + DefaultLBHealthCheckInterval = 10 + // DefaultLBHealthCheckTimeout default LoadBalancer health check timeout. + DefaultLBHealthCheckTimeout = 5 + // DefaultLBHealthCheckUnhealthyThreshold default LoadBalancer unhealthy threshold. + DefaultLBHealthCheckUnhealthyThreshold = 3 + // DefaultLBHealthCheckHealthyThreshold default LoadBalancer healthy threshold. + DefaultLBHealthCheckHealthyThreshold = 5 +) + +// ApplyDefault give APIServerLoadbalancers default values. +func (in *DOLoadBalancer) ApplyDefault() { + if in.Port == 0 { + in.Port = DefaultLBPort + } + if in.Algorithm == "" { + in.Algorithm = DefaultLBAlgorithm + } + if in.HealthCheck.Interval == 0 { + in.HealthCheck.Interval = DefaultLBHealthCheckInterval + } + if in.HealthCheck.Timeout == 0 { + in.HealthCheck.Timeout = DefaultLBHealthCheckTimeout + } + if in.HealthCheck.UnhealthyThreshold == 0 { + in.HealthCheck.UnhealthyThreshold = DefaultLBHealthCheckUnhealthyThreshold + } + if in.HealthCheck.HealthyThreshold == 0 { + in.HealthCheck.HealthyThreshold = DefaultLBHealthCheckHealthyThreshold + } +} + +// DOLoadBalancerHealthCheck define the DigitalOcean loadbalancers health check configurations. +type DOLoadBalancerHealthCheck struct { + // The number of seconds between between two consecutive health checks. The value must be between 3 and 300. + // If not specified, the default value is 10. + // +optional + // +kubebuilder:validation:Minimum=3 + // +kubebuilder:validation:Maximum=300 + Interval int `json:"interval,omitempty"` + // The number of seconds the Load Balancer instance will wait for a response until marking a health check as failed. + // The value must be between 3 and 300. If not specified, the default value is 5. + // +optional + // +kubebuilder:validation:Minimum=3 + // +kubebuilder:validation:Maximum=300 + Timeout int `json:"timeout,omitempty"` + // The number of times a health check must fail for a backend Droplet to be marked "unhealthy" and be removed from the pool. + // The vaule must be between 2 and 10. If not specified, the default value is 3. + // +optional + // +kubebuilder:validation:Minimum=2 + // +kubebuilder:validation:Maximum=10 + UnhealthyThreshold int `json:"unhealthyThreshold,omitempty"` + // The number of times a health check must pass for a backend Droplet to be marked "healthy" and be re-added to the pool. + // The vaule must be between 2 and 10. If not specified, the default value is 5. + // +optional + // +kubebuilder:validation:Minimum=2 + // +kubebuilder:validation:Maximum=10 + HealthyThreshold int `json:"healthyThreshold,omitempty"` +} diff --git a/api/v1beta1/zz_generated.deepcopy.go b/api/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 000000000..ff616e18c --- /dev/null +++ b/api/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,598 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by controller-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/intstr" + "sigs.k8s.io/cluster-api/errors" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildTagParams) DeepCopyInto(out *BuildTagParams) { + *out = *in + if in.Additional != nil { + in, out := &in.Additional, &out.Additional + *out = make(Tags, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildTagParams. +func (in *BuildTagParams) DeepCopy() *BuildTagParams { + if in == nil { + return nil + } + out := new(BuildTagParams) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOCluster) DeepCopyInto(out *DOCluster) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOCluster. +func (in *DOCluster) DeepCopy() *DOCluster { + if in == nil { + return nil + } + out := new(DOCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DOCluster) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOClusterList) DeepCopyInto(out *DOClusterList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DOCluster, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOClusterList. +func (in *DOClusterList) DeepCopy() *DOClusterList { + if in == nil { + return nil + } + out := new(DOClusterList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DOClusterList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOClusterSpec) DeepCopyInto(out *DOClusterSpec) { + *out = *in + out.Network = in.Network + out.ControlPlaneEndpoint = in.ControlPlaneEndpoint + if in.ControlPlaneDNS != nil { + in, out := &in.ControlPlaneDNS, &out.ControlPlaneDNS + *out = new(DOControlPlaneDNS) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOClusterSpec. +func (in *DOClusterSpec) DeepCopy() *DOClusterSpec { + if in == nil { + return nil + } + out := new(DOClusterSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOClusterStatus) DeepCopyInto(out *DOClusterStatus) { + *out = *in + out.Network = in.Network +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOClusterStatus. +func (in *DOClusterStatus) DeepCopy() *DOClusterStatus { + if in == nil { + return nil + } + out := new(DOClusterStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOClusterTemplate) DeepCopyInto(out *DOClusterTemplate) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOClusterTemplate. +func (in *DOClusterTemplate) DeepCopy() *DOClusterTemplate { + if in == nil { + return nil + } + out := new(DOClusterTemplate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DOClusterTemplate) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOClusterTemplateList) DeepCopyInto(out *DOClusterTemplateList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DOClusterTemplate, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOClusterTemplateList. +func (in *DOClusterTemplateList) DeepCopy() *DOClusterTemplateList { + if in == nil { + return nil + } + out := new(DOClusterTemplateList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DOClusterTemplateList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOClusterTemplateResource) DeepCopyInto(out *DOClusterTemplateResource) { + *out = *in + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOClusterTemplateResource. +func (in *DOClusterTemplateResource) DeepCopy() *DOClusterTemplateResource { + if in == nil { + return nil + } + out := new(DOClusterTemplateResource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOClusterTemplateSpec) DeepCopyInto(out *DOClusterTemplateSpec) { + *out = *in + in.Template.DeepCopyInto(&out.Template) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOClusterTemplateSpec. +func (in *DOClusterTemplateSpec) DeepCopy() *DOClusterTemplateSpec { + if in == nil { + return nil + } + out := new(DOClusterTemplateSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOControlPlaneDNS) DeepCopyInto(out *DOControlPlaneDNS) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOControlPlaneDNS. +func (in *DOControlPlaneDNS) DeepCopy() *DOControlPlaneDNS { + if in == nil { + return nil + } + out := new(DOControlPlaneDNS) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOLoadBalancer) DeepCopyInto(out *DOLoadBalancer) { + *out = *in + out.HealthCheck = in.HealthCheck +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOLoadBalancer. +func (in *DOLoadBalancer) DeepCopy() *DOLoadBalancer { + if in == nil { + return nil + } + out := new(DOLoadBalancer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOLoadBalancerHealthCheck) DeepCopyInto(out *DOLoadBalancerHealthCheck) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOLoadBalancerHealthCheck. +func (in *DOLoadBalancerHealthCheck) DeepCopy() *DOLoadBalancerHealthCheck { + if in == nil { + return nil + } + out := new(DOLoadBalancerHealthCheck) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOMachine) DeepCopyInto(out *DOMachine) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOMachine. +func (in *DOMachine) DeepCopy() *DOMachine { + if in == nil { + return nil + } + out := new(DOMachine) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DOMachine) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOMachineList) DeepCopyInto(out *DOMachineList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DOMachine, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOMachineList. +func (in *DOMachineList) DeepCopy() *DOMachineList { + if in == nil { + return nil + } + out := new(DOMachineList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DOMachineList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOMachineSpec) DeepCopyInto(out *DOMachineSpec) { + *out = *in + if in.ProviderID != nil { + in, out := &in.ProviderID, &out.ProviderID + *out = new(string) + **out = **in + } + out.Image = in.Image + if in.DataDisks != nil { + in, out := &in.DataDisks, &out.DataDisks + *out = make([]DataDisk, len(*in)) + copy(*out, *in) + } + if in.SSHKeys != nil { + in, out := &in.SSHKeys, &out.SSHKeys + *out = make([]intstr.IntOrString, len(*in)) + copy(*out, *in) + } + if in.AdditionalTags != nil { + in, out := &in.AdditionalTags, &out.AdditionalTags + *out = make(Tags, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOMachineSpec. +func (in *DOMachineSpec) DeepCopy() *DOMachineSpec { + if in == nil { + return nil + } + out := new(DOMachineSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOMachineStatus) DeepCopyInto(out *DOMachineStatus) { + *out = *in + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]v1.NodeAddress, len(*in)) + copy(*out, *in) + } + if in.InstanceStatus != nil { + in, out := &in.InstanceStatus, &out.InstanceStatus + *out = new(DOResourceStatus) + **out = **in + } + if in.FailureReason != nil { + in, out := &in.FailureReason, &out.FailureReason + *out = new(errors.MachineStatusError) + **out = **in + } + if in.FailureMessage != nil { + in, out := &in.FailureMessage, &out.FailureMessage + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOMachineStatus. +func (in *DOMachineStatus) DeepCopy() *DOMachineStatus { + if in == nil { + return nil + } + out := new(DOMachineStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOMachineTemplate) DeepCopyInto(out *DOMachineTemplate) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOMachineTemplate. +func (in *DOMachineTemplate) DeepCopy() *DOMachineTemplate { + if in == nil { + return nil + } + out := new(DOMachineTemplate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DOMachineTemplate) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOMachineTemplateList) DeepCopyInto(out *DOMachineTemplateList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DOMachineTemplate, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOMachineTemplateList. +func (in *DOMachineTemplateList) DeepCopy() *DOMachineTemplateList { + if in == nil { + return nil + } + out := new(DOMachineTemplateList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DOMachineTemplateList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOMachineTemplateResource) DeepCopyInto(out *DOMachineTemplateResource) { + *out = *in + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOMachineTemplateResource. +func (in *DOMachineTemplateResource) DeepCopy() *DOMachineTemplateResource { + if in == nil { + return nil + } + out := new(DOMachineTemplateResource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOMachineTemplateSpec) DeepCopyInto(out *DOMachineTemplateSpec) { + *out = *in + in.Template.DeepCopyInto(&out.Template) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOMachineTemplateSpec. +func (in *DOMachineTemplateSpec) DeepCopy() *DOMachineTemplateSpec { + if in == nil { + return nil + } + out := new(DOMachineTemplateSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DONetwork) DeepCopyInto(out *DONetwork) { + *out = *in + out.APIServerLoadbalancers = in.APIServerLoadbalancers + out.VPC = in.VPC +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DONetwork. +func (in *DONetwork) DeepCopy() *DONetwork { + if in == nil { + return nil + } + out := new(DONetwork) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DONetworkResource) DeepCopyInto(out *DONetworkResource) { + *out = *in + out.APIServerLoadbalancersRef = in.APIServerLoadbalancersRef +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DONetworkResource. +func (in *DONetworkResource) DeepCopy() *DONetworkResource { + if in == nil { + return nil + } + out := new(DONetworkResource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOResourceReference) DeepCopyInto(out *DOResourceReference) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOResourceReference. +func (in *DOResourceReference) DeepCopy() *DOResourceReference { + if in == nil { + return nil + } + out := new(DOResourceReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DOVPC) DeepCopyInto(out *DOVPC) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DOVPC. +func (in *DOVPC) DeepCopy() *DOVPC { + if in == nil { + return nil + } + out := new(DOVPC) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DataDisk) DeepCopyInto(out *DataDisk) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataDisk. +func (in *DataDisk) DeepCopy() *DataDisk { + if in == nil { + return nil + } + out := new(DataDisk) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in Tags) DeepCopyInto(out *Tags) { + { + in := &in + *out = make(Tags, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Tags. +func (in Tags) DeepCopy() Tags { + if in == nil { + return nil + } + out := new(Tags) + in.DeepCopyInto(out) + return *out +} diff --git a/cloud/scope/cluster.go b/cloud/scope/cluster.go index 4c75e5386..38fac1b45 100644 --- a/cloud/scope/cluster.go +++ b/cloud/scope/cluster.go @@ -22,13 +22,12 @@ import ( "github.com/go-logr/logr" "github.com/pkg/errors" - infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" - "k8s.io/klog/v2/klogr" - - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" "sigs.k8s.io/cluster-api/util/patch" "sigs.k8s.io/controller-runtime/pkg/client" + + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" ) // ClusterScopeParams defines the input parameters used to create a new Scope. diff --git a/cloud/scope/machine.go b/cloud/scope/machine.go index 07f4ea393..ac7fbaf31 100644 --- a/cloud/scope/machine.go +++ b/cloud/scope/machine.go @@ -24,19 +24,19 @@ import ( "github.com/go-logr/logr" "github.com/pkg/errors" - infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/klog/v2/klogr" "k8s.io/utils/pointer" - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" "sigs.k8s.io/cluster-api/controllers/noderefutil" capierrors "sigs.k8s.io/cluster-api/errors" "sigs.k8s.io/cluster-api/util" "sigs.k8s.io/cluster-api/util/patch" "sigs.k8s.io/controller-runtime/pkg/client" + + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" ) // MachineScopeParams defines the input parameters used to create a new MachineScope. diff --git a/cloud/services/computes/droplets.go b/cloud/services/computes/droplets.go index 6c096404c..aeb046d9d 100644 --- a/cloud/services/computes/droplets.go +++ b/cloud/services/computes/droplets.go @@ -24,10 +24,10 @@ import ( "github.com/digitalocean/godo" "github.com/pkg/errors" - infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" - "sigs.k8s.io/cluster-api-provider-digitalocean/cloud/scope" - corev1 "k8s.io/api/core/v1" + + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" + "sigs.k8s.io/cluster-api-provider-digitalocean/cloud/scope" ) // GetDroplet get a droplet instance. diff --git a/cloud/services/computes/volumes.go b/cloud/services/computes/volumes.go index c9a83c235..474ffc56c 100644 --- a/cloud/services/computes/volumes.go +++ b/cloud/services/computes/volumes.go @@ -22,7 +22,7 @@ import ( "github.com/digitalocean/godo" "github.com/pkg/errors" - infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" ) // GetVolumeByName takes a volume name and returns a Volume if found. diff --git a/cloud/services/networking/loadbalancers.go b/cloud/services/networking/loadbalancers.go index b65129b1c..a7b1f978f 100644 --- a/cloud/services/networking/loadbalancers.go +++ b/cloud/services/networking/loadbalancers.go @@ -21,7 +21,7 @@ import ( "github.com/digitalocean/godo" - infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" ) // GetLoadBalancer get a LB by LB ID. diff --git a/clusterctl-settings.json b/clusterctl-settings.json index 149035eb0..692afe5a6 100644 --- a/clusterctl-settings.json +++ b/clusterctl-settings.json @@ -2,6 +2,6 @@ "name": "infrastructure-digitalocean", "config": { "componentsFile": "infrastructure-components.yaml", - "nextVersion": "v0.4.0" + "nextVersion": "v1.0.0" } } \ No newline at end of file diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_doclusters.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_doclusters.yaml index 492812fc0..059ecb080 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_doclusters.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_doclusters.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.5.0 + controller-gen.kubebuilder.io/version: v0.7.0 creationTimestamp: null name: doclusters.infrastructure.cluster.x-k8s.io spec: @@ -38,10 +38,14 @@ spec: description: DOCluster is the Schema for the DOClusters API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -49,14 +53,20 @@ spec: description: DOClusterSpec defines the desired state of DOCluster. properties: controlPlaneDNS: - description: ControlPlaneDNS is a managed DNS name that points to the load-balancer IP used for the ControlPlaneEndpoint. + description: ControlPlaneDNS is a managed DNS name that points to + the load-balancer IP used for the ControlPlaneEndpoint. properties: domain: - description: Domain is the DO domain that this record should live in. It must be pre-existing in your DO account. The format must be a string that conforms to the definition of a subdomain in DNS (RFC 1123) + description: Domain is the DO domain that this record should live + in. It must be pre-existing in your DO account. The format must + be a string that conforms to the definition of a subdomain in + DNS (RFC 1123) pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ type: string name: - description: Name is the DNS short name of the record (non-FQDN) The format must consist of alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character + description: Name is the DNS short name of the record (non-FQDN) + The format must consist of alphanumeric characters, '-' or '.', + and must start and end with an alphanumeric character pattern: ^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$ type: string required: @@ -64,7 +74,9 @@ spec: - name type: object controlPlaneEndpoint: - description: ControlPlaneEndpoint represents the endpoint used to communicate with the control plane. If ControlPlaneDNS is unset, the DO load-balancer IP of the Kubernetes API Server is used. + description: ControlPlaneEndpoint represents the endpoint used to + communicate with the control plane. If ControlPlaneDNS is unset, + the DO load-balancer IP of the Kubernetes API Server is used. properties: host: description: The hostname on which the API server is serving. @@ -84,37 +96,53 @@ spec: description: Configures an API Server loadbalancers properties: algorithm: - description: The API Server load balancing algorithm used to determine which backend Droplet will be selected by a client. It must be either "round_robin" or "least_connections". The default value is "round_robin". + description: The API Server load balancing algorithm used + to determine which backend Droplet will be selected by a + client. It must be either "round_robin" or "least_connections". + The default value is "round_robin". enum: - round_robin - least_connections type: string healthCheck: - description: An object specifying health check settings for the Load Balancer. If omitted, default values will be provided. + description: An object specifying health check settings for + the Load Balancer. If omitted, default values will be provided. properties: healthyThreshold: - description: The number of times a health check must pass for a backend Droplet to be marked "healthy" and be re-added to the pool. The vaule must be between 2 and 10. If not specified, the default value is 5. + description: The number of times a health check must pass + for a backend Droplet to be marked "healthy" and be + re-added to the pool. The vaule must be between 2 and + 10. If not specified, the default value is 5. maximum: 10 minimum: 2 type: integer interval: - description: The number of seconds between between two consecutive health checks. The value must be between 3 and 300. If not specified, the default value is 10. + description: The number of seconds between between two + consecutive health checks. The value must be between + 3 and 300. If not specified, the default value is 10. maximum: 300 minimum: 3 type: integer timeout: - description: The number of seconds the Load Balancer instance will wait for a response until marking a health check as failed. The value must be between 3 and 300. If not specified, the default value is 5. + description: The number of seconds the Load Balancer instance + will wait for a response until marking a health check + as failed. The value must be between 3 and 300. If not + specified, the default value is 5. maximum: 300 minimum: 3 type: integer unhealthyThreshold: - description: The number of times a health check must fail for a backend Droplet to be marked "unhealthy" and be removed from the pool. The vaule must be between 2 and 10. If not specified, the default value is 3. + description: The number of times a health check must fail + for a backend Droplet to be marked "unhealthy" and be + removed from the pool. The vaule must be between 2 and + 10. If not specified, the default value is 3. maximum: 10 minimum: 2 type: integer type: object port: - description: API Server port. It must be valid ports range (1-65535). If omitted, default value is 6443. + description: API Server port. It must be valid ports range + (1-65535). If omitted, default value is 6443. maximum: 65535 minimum: 1 type: integer @@ -123,12 +151,14 @@ spec: description: VPC defines the VPC configuration. properties: vpc_uuid: - description: VPCUUID defines the VPC UUID to use. An empty value implies using the default VPC. + description: VPCUUID defines the VPC UUID to use. An empty + value implies using the default VPC. type: string type: object type: object region: - description: The DigitalOcean Region the cluster lives in. It must be one of available region on DigitalOcean. See https://developers.digitalocean.com/documentation/v2/#list-all-regions + description: The DigitalOcean Region the cluster lives in. It must + be one of available region on DigitalOcean. See https://developers.digitalocean.com/documentation/v2/#list-all-regions type: string required: - region @@ -137,13 +167,16 @@ spec: description: DOClusterStatus defines the observed state of DOCluster. properties: controlPlaneDNSRecordReady: - description: ControlPlaneDNSRecordReady denotes that the DNS record is ready and propagated to the DO DNS servers. + description: ControlPlaneDNSRecordReady denotes that the DNS record + is ready and propagated to the DO DNS servers. type: boolean network: - description: Network encapsulates all things related to DigitalOcean network. + description: Network encapsulates all things related to DigitalOcean + network. properties: apiServerLoadbalancersRef: - description: APIServerLoadbalancersRef is the id of apiserver loadbalancers. + description: APIServerLoadbalancersRef is the id of apiserver + loadbalancers. properties: resourceId: description: ID of DigitalOcean resource @@ -182,10 +215,14 @@ spec: description: DOCluster is the Schema for the DOClusters API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -193,14 +230,20 @@ spec: description: DOClusterSpec defines the desired state of DOCluster. properties: controlPlaneDNS: - description: ControlPlaneDNS is a managed DNS name that points to the load-balancer IP used for the ControlPlaneEndpoint. + description: ControlPlaneDNS is a managed DNS name that points to + the load-balancer IP used for the ControlPlaneEndpoint. properties: domain: - description: Domain is the DO domain that this record should live in. It must be pre-existing in your DO account. The format must be a string that conforms to the definition of a subdomain in DNS (RFC 1123) + description: Domain is the DO domain that this record should live + in. It must be pre-existing in your DO account. The format must + be a string that conforms to the definition of a subdomain in + DNS (RFC 1123) pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ type: string name: - description: Name is the DNS short name of the record (non-FQDN) The format must consist of alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character + description: Name is the DNS short name of the record (non-FQDN) + The format must consist of alphanumeric characters, '-' or '.', + and must start and end with an alphanumeric character pattern: ^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$ type: string required: @@ -208,7 +251,9 @@ spec: - name type: object controlPlaneEndpoint: - description: ControlPlaneEndpoint represents the endpoint used to communicate with the control plane. If ControlPlaneDNS is unset, the DO load-balancer IP of the Kubernetes API Server is used. + description: ControlPlaneEndpoint represents the endpoint used to + communicate with the control plane. If ControlPlaneDNS is unset, + the DO load-balancer IP of the Kubernetes API Server is used. properties: host: description: The hostname on which the API server is serving. @@ -228,37 +273,53 @@ spec: description: Configures an API Server loadbalancers properties: algorithm: - description: The API Server load balancing algorithm used to determine which backend Droplet will be selected by a client. It must be either "round_robin" or "least_connections". The default value is "round_robin". + description: The API Server load balancing algorithm used + to determine which backend Droplet will be selected by a + client. It must be either "round_robin" or "least_connections". + The default value is "round_robin". enum: - round_robin - least_connections type: string healthCheck: - description: An object specifying health check settings for the Load Balancer. If omitted, default values will be provided. + description: An object specifying health check settings for + the Load Balancer. If omitted, default values will be provided. properties: healthyThreshold: - description: The number of times a health check must pass for a backend Droplet to be marked "healthy" and be re-added to the pool. The vaule must be between 2 and 10. If not specified, the default value is 5. + description: The number of times a health check must pass + for a backend Droplet to be marked "healthy" and be + re-added to the pool. The vaule must be between 2 and + 10. If not specified, the default value is 5. maximum: 10 minimum: 2 type: integer interval: - description: The number of seconds between between two consecutive health checks. The value must be between 3 and 300. If not specified, the default value is 10. + description: The number of seconds between between two + consecutive health checks. The value must be between + 3 and 300. If not specified, the default value is 10. maximum: 300 minimum: 3 type: integer timeout: - description: The number of seconds the Load Balancer instance will wait for a response until marking a health check as failed. The value must be between 3 and 300. If not specified, the default value is 5. + description: The number of seconds the Load Balancer instance + will wait for a response until marking a health check + as failed. The value must be between 3 and 300. If not + specified, the default value is 5. maximum: 300 minimum: 3 type: integer unhealthyThreshold: - description: The number of times a health check must fail for a backend Droplet to be marked "unhealthy" and be removed from the pool. The vaule must be between 2 and 10. If not specified, the default value is 3. + description: The number of times a health check must fail + for a backend Droplet to be marked "unhealthy" and be + removed from the pool. The vaule must be between 2 and + 10. If not specified, the default value is 3. maximum: 10 minimum: 2 type: integer type: object port: - description: API Server port. It must be valid ports range (1-65535). If omitted, default value is 6443. + description: API Server port. It must be valid ports range + (1-65535). If omitted, default value is 6443. maximum: 65535 minimum: 1 type: integer @@ -267,12 +328,14 @@ spec: description: VPC defines the VPC configuration. properties: vpc_uuid: - description: VPCUUID defines the VPC UUID to use. An empty value implies using the default VPC. + description: VPCUUID defines the VPC UUID to use. An empty + value implies using the default VPC. type: string type: object type: object region: - description: The DigitalOcean Region the cluster lives in. It must be one of available region on DigitalOcean. See https://developers.digitalocean.com/documentation/v2/#list-all-regions + description: The DigitalOcean Region the cluster lives in. It must + be one of available region on DigitalOcean. See https://developers.digitalocean.com/documentation/v2/#list-all-regions type: string required: - region @@ -281,13 +344,193 @@ spec: description: DOClusterStatus defines the observed state of DOCluster. properties: controlPlaneDNSRecordReady: - description: ControlPlaneDNSRecordReady denotes that the DNS record is ready and propagated to the DO DNS servers. + description: ControlPlaneDNSRecordReady denotes that the DNS record + is ready and propagated to the DO DNS servers. type: boolean network: - description: Network encapsulates all things related to DigitalOcean network. + description: Network encapsulates all things related to DigitalOcean + network. properties: apiServerLoadbalancersRef: - description: APIServerLoadbalancersRef is the id of apiserver loadbalancers. + description: APIServerLoadbalancersRef is the id of apiserver + loadbalancers. + properties: + resourceId: + description: ID of DigitalOcean resource + type: string + resourceStatus: + description: Status of DigitalOcean resource + type: string + type: object + type: object + ready: + description: Ready denotes that the cluster (infrastructure) is ready. + type: boolean + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - description: Cluster to which this DOCluster belongs + jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name + name: Cluster + type: string + - description: Cluster infrastructure is ready for DigitalOcean droplet instances + jsonPath: .status.ready + name: Ready + type: string + - description: API Endpoint + jsonPath: .spec.ControlPlaneEndpoint + name: Endpoint + priority: 1 + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: DOCluster is the Schema for the DOClusters API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DOClusterSpec defines the desired state of DOCluster. + properties: + controlPlaneDNS: + description: ControlPlaneDNS is a managed DNS name that points to + the load-balancer IP used for the ControlPlaneEndpoint. + properties: + domain: + description: Domain is the DO domain that this record should live + in. It must be pre-existing in your DO account. The format must + be a string that conforms to the definition of a subdomain in + DNS (RFC 1123) + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + name: + description: Name is the DNS short name of the record (non-FQDN) + The format must consist of alphanumeric characters, '-' or '.', + and must start and end with an alphanumeric character + pattern: ^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$ + type: string + required: + - domain + - name + type: object + controlPlaneEndpoint: + description: ControlPlaneEndpoint represents the endpoint used to + communicate with the control plane. If ControlPlaneDNS is unset, + the DO load-balancer IP of the Kubernetes API Server is used. + properties: + host: + description: The hostname on which the API server is serving. + type: string + port: + description: The port on which the API server is serving. + format: int32 + type: integer + required: + - host + - port + type: object + network: + description: Network configurations + properties: + apiServerLoadbalancers: + description: Configures an API Server loadbalancers + properties: + algorithm: + description: The API Server load balancing algorithm used + to determine which backend Droplet will be selected by a + client. It must be either "round_robin" or "least_connections". + The default value is "round_robin". + enum: + - round_robin + - least_connections + type: string + healthCheck: + description: An object specifying health check settings for + the Load Balancer. If omitted, default values will be provided. + properties: + healthyThreshold: + description: The number of times a health check must pass + for a backend Droplet to be marked "healthy" and be + re-added to the pool. The vaule must be between 2 and + 10. If not specified, the default value is 5. + maximum: 10 + minimum: 2 + type: integer + interval: + description: The number of seconds between between two + consecutive health checks. The value must be between + 3 and 300. If not specified, the default value is 10. + maximum: 300 + minimum: 3 + type: integer + timeout: + description: The number of seconds the Load Balancer instance + will wait for a response until marking a health check + as failed. The value must be between 3 and 300. If not + specified, the default value is 5. + maximum: 300 + minimum: 3 + type: integer + unhealthyThreshold: + description: The number of times a health check must fail + for a backend Droplet to be marked "unhealthy" and be + removed from the pool. The vaule must be between 2 and + 10. If not specified, the default value is 3. + maximum: 10 + minimum: 2 + type: integer + type: object + port: + description: API Server port. It must be valid ports range + (1-65535). If omitted, default value is 6443. + maximum: 65535 + minimum: 1 + type: integer + type: object + vpc: + description: VPC defines the VPC configuration. + properties: + vpc_uuid: + description: VPCUUID defines the VPC UUID to use. An empty + value implies using the default VPC. + type: string + type: object + type: object + region: + description: The DigitalOcean Region the cluster lives in. It must + be one of available region on DigitalOcean. See https://developers.digitalocean.com/documentation/v2/#list-all-regions + type: string + required: + - region + type: object + status: + description: DOClusterStatus defines the observed state of DOCluster. + properties: + controlPlaneDNSRecordReady: + description: ControlPlaneDNSRecordReady denotes that the DNS record + is ready and propagated to the DO DNS servers. + type: boolean + network: + description: Network encapsulates all things related to DigitalOcean + network. + properties: + apiServerLoadbalancersRef: + description: APIServerLoadbalancersRef is the id of apiserver + loadbalancers. properties: resourceId: description: ID of DigitalOcean resource diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_doclustertemplates.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_doclustertemplates.yaml new file mode 100644 index 000000000..b347989f5 --- /dev/null +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_doclustertemplates.yaml @@ -0,0 +1,182 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.7.0 + creationTimestamp: null + name: doclustertemplates.infrastructure.cluster.x-k8s.io +spec: + group: infrastructure.cluster.x-k8s.io + names: + categories: + - cluster-api + kind: DOClusterTemplate + listKind: DOClusterTemplateList + plural: doclustertemplates + shortNames: + - doct + singular: doclustertemplate + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + description: DOClusterTemplate is the Schema for the DOclustertemplates API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DOClusterTemplateSpec defines the desired state of DOClusterTemplate. + properties: + template: + description: DOClusterTemplateResource contains spec for DOClusterSpec. + properties: + spec: + description: DOClusterSpec defines the desired state of DOCluster. + properties: + controlPlaneDNS: + description: ControlPlaneDNS is a managed DNS name that points + to the load-balancer IP used for the ControlPlaneEndpoint. + properties: + domain: + description: Domain is the DO domain that this record + should live in. It must be pre-existing in your DO account. + The format must be a string that conforms to the definition + of a subdomain in DNS (RFC 1123) + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + name: + description: Name is the DNS short name of the record + (non-FQDN) The format must consist of alphanumeric characters, + '-' or '.', and must start and end with an alphanumeric + character + pattern: ^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$ + type: string + required: + - domain + - name + type: object + controlPlaneEndpoint: + description: ControlPlaneEndpoint represents the endpoint + used to communicate with the control plane. If ControlPlaneDNS + is unset, the DO load-balancer IP of the Kubernetes API + Server is used. + properties: + host: + description: The hostname on which the API server is serving. + type: string + port: + description: The port on which the API server is serving. + format: int32 + type: integer + required: + - host + - port + type: object + network: + description: Network configurations + properties: + apiServerLoadbalancers: + description: Configures an API Server loadbalancers + properties: + algorithm: + description: The API Server load balancing algorithm + used to determine which backend Droplet will be + selected by a client. It must be either "round_robin" + or "least_connections". The default value is "round_robin". + enum: + - round_robin + - least_connections + type: string + healthCheck: + description: An object specifying health check settings + for the Load Balancer. If omitted, default values + will be provided. + properties: + healthyThreshold: + description: The number of times a health check + must pass for a backend Droplet to be marked + "healthy" and be re-added to the pool. The vaule + must be between 2 and 10. If not specified, + the default value is 5. + maximum: 10 + minimum: 2 + type: integer + interval: + description: The number of seconds between between + two consecutive health checks. The value must + be between 3 and 300. If not specified, the + default value is 10. + maximum: 300 + minimum: 3 + type: integer + timeout: + description: The number of seconds the Load Balancer + instance will wait for a response until marking + a health check as failed. The value must be + between 3 and 300. If not specified, the default + value is 5. + maximum: 300 + minimum: 3 + type: integer + unhealthyThreshold: + description: The number of times a health check + must fail for a backend Droplet to be marked + "unhealthy" and be removed from the pool. The + vaule must be between 2 and 10. If not specified, + the default value is 3. + maximum: 10 + minimum: 2 + type: integer + type: object + port: + description: API Server port. It must be valid ports + range (1-65535). If omitted, default value is 6443. + maximum: 65535 + minimum: 1 + type: integer + type: object + vpc: + description: VPC defines the VPC configuration. + properties: + vpc_uuid: + description: VPCUUID defines the VPC UUID to use. + An empty value implies using the default VPC. + type: string + type: object + type: object + region: + description: The DigitalOcean Region the cluster lives in. + It must be one of available region on DigitalOcean. See + https://developers.digitalocean.com/documentation/v2/#list-all-regions + type: string + required: + - region + type: object + required: + - spec + type: object + required: + - template + type: object + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_domachines.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_domachines.yaml index 4d70487d8..58c033923 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_domachines.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_domachines.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.5.0 + controller-gen.kubebuilder.io/version: v0.7.0 creationTimestamp: null name: domachines.infrastructure.cluster.x-k8s.io spec: @@ -45,10 +45,14 @@ spec: description: DOMachine is the Schema for the domachines API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -56,27 +60,36 @@ spec: description: DOMachineSpec defines the desired state of DOMachine. properties: additionalTags: - description: AdditionalTags is an optional set of tags to add to DigitalOcean resources managed by the DigitalOcean provider. + description: AdditionalTags is an optional set of tags to add to DigitalOcean + resources managed by the DigitalOcean provider. items: type: string type: array dataDisks: - description: DataDisks specifies the parameters that are used to add one or more data disks to the machine + description: DataDisks specifies the parameters that are used to add + one or more data disks to the machine items: - description: DataDisk specifies the parameters that are used to add a data disk to the machine. + description: DataDisk specifies the parameters that are used to + add a data disk to the machine. properties: diskSizeGB: - description: DiskSizeGB is the size in GB to assign to the data disk. + description: DiskSizeGB is the size in GB to assign to the data + disk. format: int64 type: integer filesystemLabel: - description: 'FilesystemLabel is the label that is applied to the created filesystem. Character limits apply: 16 for ext4; 12 for xfs. May only be used in conjunction with filesystemType.' + description: 'FilesystemLabel is the label that is applied to + the created filesystem. Character limits apply: 16 for ext4; + 12 for xfs. May only be used in conjunction with filesystemType.' type: string filesystemType: - description: FilesystemType to be used on the volume. When provided the volume will be automatically formatted. + description: FilesystemType to be used on the volume. When provided + the volume will be automatically formatted. type: string nameSuffix: - description: NameSuffix is the suffix to be appended to the machine name to generate the disk name. Each disk name will be in format -. + description: NameSuffix is the suffix to be appended to the + machine name to generate the disk name. Each disk name will + be in format -. type: string required: - diskSizeGB @@ -90,13 +103,17 @@ spec: description: Droplet image can be image id or slug. See https://developers.digitalocean.com/documentation/v2/#list-all-images x-kubernetes-int-or-string: true providerID: - description: ProviderID is the unique identifier as specified by the cloud provider. + description: ProviderID is the unique identifier as specified by the + cloud provider. type: string size: - description: Droplet size. It must be known DigitalOcean droplet size. See https://developers.digitalocean.com/documentation/v2/#list-all-sizes + description: Droplet size. It must be known DigitalOcean droplet size. + See https://developers.digitalocean.com/documentation/v2/#list-all-sizes type: string sshKeys: - description: SSHKeys is the ssh key id or fingerprint to attach in DigitalOcean droplet. It must be available on DigitalOcean account. See https://developers.digitalocean.com/documentation/v2/#list-all-keys + description: SSHKeys is the ssh key id or fingerprint to attach in + DigitalOcean droplet. It must be available on DigitalOcean account. + See https://developers.digitalocean.com/documentation/v2/#list-all-keys items: anyOf: - type: integer @@ -112,7 +129,8 @@ spec: description: DOMachineStatus defines the observed state of DOMachine. properties: addresses: - description: Addresses contains the DigitalOcean droplet associated addresses. + description: Addresses contains the DigitalOcean droplet associated + addresses. items: description: NodeAddress contains information for the node's address. properties: @@ -120,7 +138,8 @@ spec: description: The node address. type: string type: - description: Node address type, one of Hostname, ExternalIP or InternalIP. + description: Node address type, one of Hostname, ExternalIP + or InternalIP. type: string required: - address @@ -128,13 +147,38 @@ spec: type: object type: array failureMessage: - description: "FailureMessage will be set in the event that there is a terminal problem reconciling the Machine and will contain a more verbose string suitable for logging and human consumption. \n This field should not be set for transitive errors that a controller faces that are expected to be fixed automatically over time (like service outages), but instead indicate that something is fundamentally wrong with the Machine's spec or the configuration of the controller, and that manual intervention is required. Examples of terminal errors would be invalid combinations of settings in the spec, values that are unsupported by the controller, or the responsible controller itself being critically misconfigured. \n Any transient errors that occur during the reconciliation of Machines can be added as events to the Machine object and/or logged in the controller's output." + description: "FailureMessage will be set in the event that there is + a terminal problem reconciling the Machine and will contain a more + verbose string suitable for logging and human consumption. \n This + field should not be set for transitive errors that a controller + faces that are expected to be fixed automatically over time (like + service outages), but instead indicate that something is fundamentally + wrong with the Machine's spec or the configuration of the controller, + and that manual intervention is required. Examples of terminal errors + would be invalid combinations of settings in the spec, values that + are unsupported by the controller, or the responsible controller + itself being critically misconfigured. \n Any transient errors that + occur during the reconciliation of Machines can be added as events + to the Machine object and/or logged in the controller's output." type: string failureReason: - description: "FailureReason will be set in the event that there is a terminal problem reconciling the Machine and will contain a succinct value suitable for machine interpretation. \n This field should not be set for transitive errors that a controller faces that are expected to be fixed automatically over time (like service outages), but instead indicate that something is fundamentally wrong with the Machine's spec or the configuration of the controller, and that manual intervention is required. Examples of terminal errors would be invalid combinations of settings in the spec, values that are unsupported by the controller, or the responsible controller itself being critically misconfigured. \n Any transient errors that occur during the reconciliation of Machines can be added as events to the Machine object and/or logged in the controller's output." + description: "FailureReason will be set in the event that there is + a terminal problem reconciling the Machine and will contain a succinct + value suitable for machine interpretation. \n This field should + not be set for transitive errors that a controller faces that are + expected to be fixed automatically over time (like service outages), + but instead indicate that something is fundamentally wrong with + the Machine's spec or the configuration of the controller, and that + manual intervention is required. Examples of terminal errors would + be invalid combinations of settings in the spec, values that are + unsupported by the controller, or the responsible controller itself + being critically misconfigured. \n Any transient errors that occur + during the reconciliation of Machines can be added as events to + the Machine object and/or logged in the controller's output." type: string instanceStatus: - description: InstanceStatus is the status of the DigitalOcean droplet instance for this machine. + description: InstanceStatus is the status of the DigitalOcean droplet + instance for this machine. type: string ready: description: Ready is true when the provider resource is ready. @@ -172,10 +216,14 @@ spec: description: DOMachine is the Schema for the domachines API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -183,27 +231,36 @@ spec: description: DOMachineSpec defines the desired state of DOMachine. properties: additionalTags: - description: AdditionalTags is an optional set of tags to add to DigitalOcean resources managed by the DigitalOcean provider. + description: AdditionalTags is an optional set of tags to add to DigitalOcean + resources managed by the DigitalOcean provider. items: type: string type: array dataDisks: - description: DataDisks specifies the parameters that are used to add one or more data disks to the machine + description: DataDisks specifies the parameters that are used to add + one or more data disks to the machine items: - description: DataDisk specifies the parameters that are used to add a data disk to the machine. + description: DataDisk specifies the parameters that are used to + add a data disk to the machine. properties: diskSizeGB: - description: DiskSizeGB is the size in GB to assign to the data disk. + description: DiskSizeGB is the size in GB to assign to the data + disk. format: int64 type: integer filesystemLabel: - description: 'FilesystemLabel is the label that is applied to the created filesystem. Character limits apply: 16 for ext4; 12 for xfs. May only be used in conjunction with filesystemType.' + description: 'FilesystemLabel is the label that is applied to + the created filesystem. Character limits apply: 16 for ext4; + 12 for xfs. May only be used in conjunction with filesystemType.' type: string filesystemType: - description: FilesystemType to be used on the volume. When provided the volume will be automatically formatted. + description: FilesystemType to be used on the volume. When provided + the volume will be automatically formatted. type: string nameSuffix: - description: NameSuffix is the suffix to be appended to the machine name to generate the disk name. Each disk name will be in format -. + description: NameSuffix is the suffix to be appended to the + machine name to generate the disk name. Each disk name will + be in format -. type: string required: - diskSizeGB @@ -217,13 +274,17 @@ spec: description: Droplet image can be image id or slug. See https://developers.digitalocean.com/documentation/v2/#list-all-images x-kubernetes-int-or-string: true providerID: - description: ProviderID is the unique identifier as specified by the cloud provider. + description: ProviderID is the unique identifier as specified by the + cloud provider. type: string size: - description: Droplet size. It must be known DigitalOcean droplet size. See https://developers.digitalocean.com/documentation/v2/#list-all-sizes + description: Droplet size. It must be known DigitalOcean droplet size. + See https://developers.digitalocean.com/documentation/v2/#list-all-sizes type: string sshKeys: - description: SSHKeys is the ssh key id or fingerprint to attach in DigitalOcean droplet. It must be available on DigitalOcean account. See https://developers.digitalocean.com/documentation/v2/#list-all-keys + description: SSHKeys is the ssh key id or fingerprint to attach in + DigitalOcean droplet. It must be available on DigitalOcean account. + See https://developers.digitalocean.com/documentation/v2/#list-all-keys items: anyOf: - type: integer @@ -239,7 +300,8 @@ spec: description: DOMachineStatus defines the observed state of DOMachine. properties: addresses: - description: Addresses contains the DigitalOcean droplet associated addresses. + description: Addresses contains the DigitalOcean droplet associated + addresses. items: description: NodeAddress contains information for the node's address. properties: @@ -247,7 +309,8 @@ spec: description: The node address. type: string type: - description: Node address type, one of Hostname, ExternalIP or InternalIP. + description: Node address type, one of Hostname, ExternalIP + or InternalIP. type: string required: - address @@ -255,13 +318,209 @@ spec: type: object type: array failureMessage: - description: "FailureMessage will be set in the event that there is a terminal problem reconciling the Machine and will contain a more verbose string suitable for logging and human consumption. \n This field should not be set for transitive errors that a controller faces that are expected to be fixed automatically over time (like service outages), but instead indicate that something is fundamentally wrong with the Machine's spec or the configuration of the controller, and that manual intervention is required. Examples of terminal errors would be invalid combinations of settings in the spec, values that are unsupported by the controller, or the responsible controller itself being critically misconfigured. \n Any transient errors that occur during the reconciliation of Machines can be added as events to the Machine object and/or logged in the controller's output." + description: "FailureMessage will be set in the event that there is + a terminal problem reconciling the Machine and will contain a more + verbose string suitable for logging and human consumption. \n This + field should not be set for transitive errors that a controller + faces that are expected to be fixed automatically over time (like + service outages), but instead indicate that something is fundamentally + wrong with the Machine's spec or the configuration of the controller, + and that manual intervention is required. Examples of terminal errors + would be invalid combinations of settings in the spec, values that + are unsupported by the controller, or the responsible controller + itself being critically misconfigured. \n Any transient errors that + occur during the reconciliation of Machines can be added as events + to the Machine object and/or logged in the controller's output." type: string failureReason: - description: "FailureReason will be set in the event that there is a terminal problem reconciling the Machine and will contain a succinct value suitable for machine interpretation. \n This field should not be set for transitive errors that a controller faces that are expected to be fixed automatically over time (like service outages), but instead indicate that something is fundamentally wrong with the Machine's spec or the configuration of the controller, and that manual intervention is required. Examples of terminal errors would be invalid combinations of settings in the spec, values that are unsupported by the controller, or the responsible controller itself being critically misconfigured. \n Any transient errors that occur during the reconciliation of Machines can be added as events to the Machine object and/or logged in the controller's output." + description: "FailureReason will be set in the event that there is + a terminal problem reconciling the Machine and will contain a succinct + value suitable for machine interpretation. \n This field should + not be set for transitive errors that a controller faces that are + expected to be fixed automatically over time (like service outages), + but instead indicate that something is fundamentally wrong with + the Machine's spec or the configuration of the controller, and that + manual intervention is required. Examples of terminal errors would + be invalid combinations of settings in the spec, values that are + unsupported by the controller, or the responsible controller itself + being critically misconfigured. \n Any transient errors that occur + during the reconciliation of Machines can be added as events to + the Machine object and/or logged in the controller's output." type: string instanceStatus: - description: InstanceStatus is the status of the DigitalOcean droplet instance for this machine. + description: InstanceStatus is the status of the DigitalOcean droplet + instance for this machine. + type: string + ready: + description: Ready is true when the provider resource is ready. + type: boolean + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - description: Cluster to which this DOMachine belongs + jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name + name: Cluster + type: string + - description: DigitalOcean droplet instance state + jsonPath: .status.instanceStatus + name: State + type: string + - description: Machine ready status + jsonPath: .status.ready + name: Ready + type: string + - description: DigitalOcean droplet instance ID + jsonPath: .spec.providerID + name: InstanceID + type: string + - description: Machine object which owns with this DOMachine + jsonPath: .metadata.ownerReferences[?(@.kind=="Machine")].name + name: Machine + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: DOMachine is the Schema for the domachines API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DOMachineSpec defines the desired state of DOMachine. + properties: + additionalTags: + description: AdditionalTags is an optional set of tags to add to DigitalOcean + resources managed by the DigitalOcean provider. + items: + type: string + type: array + dataDisks: + description: DataDisks specifies the parameters that are used to add + one or more data disks to the machine + items: + description: DataDisk specifies the parameters that are used to + add a data disk to the machine. + properties: + diskSizeGB: + description: DiskSizeGB is the size in GB to assign to the data + disk. + format: int64 + type: integer + filesystemLabel: + description: 'FilesystemLabel is the label that is applied to + the created filesystem. Character limits apply: 16 for ext4; + 12 for xfs. May only be used in conjunction with filesystemType.' + type: string + filesystemType: + description: FilesystemType to be used on the volume. When provided + the volume will be automatically formatted. + type: string + nameSuffix: + description: NameSuffix is the suffix to be appended to the + machine name to generate the disk name. Each disk name will + be in format -. + type: string + required: + - diskSizeGB + - nameSuffix + type: object + type: array + image: + anyOf: + - type: integer + - type: string + description: Droplet image can be image id or slug. See https://developers.digitalocean.com/documentation/v2/#list-all-images + x-kubernetes-int-or-string: true + providerID: + description: ProviderID is the unique identifier as specified by the + cloud provider. + type: string + size: + description: Droplet size. It must be known DigitalOcean droplet size. + See https://developers.digitalocean.com/documentation/v2/#list-all-sizes + type: string + sshKeys: + description: SSHKeys is the ssh key id or fingerprint to attach in + DigitalOcean droplet. It must be available on DigitalOcean account. + See https://developers.digitalocean.com/documentation/v2/#list-all-keys + items: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: array + required: + - image + - size + - sshKeys + type: object + status: + description: DOMachineStatus defines the observed state of DOMachine. + properties: + addresses: + description: Addresses contains the DigitalOcean droplet associated + addresses. + items: + description: NodeAddress contains information for the node's address. + properties: + address: + description: The node address. + type: string + type: + description: Node address type, one of Hostname, ExternalIP + or InternalIP. + type: string + required: + - address + - type + type: object + type: array + failureMessage: + description: "FailureMessage will be set in the event that there is + a terminal problem reconciling the Machine and will contain a more + verbose string suitable for logging and human consumption. \n This + field should not be set for transitive errors that a controller + faces that are expected to be fixed automatically over time (like + service outages), but instead indicate that something is fundamentally + wrong with the Machine's spec or the configuration of the controller, + and that manual intervention is required. Examples of terminal errors + would be invalid combinations of settings in the spec, values that + are unsupported by the controller, or the responsible controller + itself being critically misconfigured. \n Any transient errors that + occur during the reconciliation of Machines can be added as events + to the Machine object and/or logged in the controller's output." + type: string + failureReason: + description: "FailureReason will be set in the event that there is + a terminal problem reconciling the Machine and will contain a succinct + value suitable for machine interpretation. \n This field should + not be set for transitive errors that a controller faces that are + expected to be fixed automatically over time (like service outages), + but instead indicate that something is fundamentally wrong with + the Machine's spec or the configuration of the controller, and that + manual intervention is required. Examples of terminal errors would + be invalid combinations of settings in the spec, values that are + unsupported by the controller, or the responsible controller itself + being critically misconfigured. \n Any transient errors that occur + during the reconciliation of Machines can be added as events to + the Machine object and/or logged in the controller's output." + type: string + instanceStatus: + description: InstanceStatus is the status of the DigitalOcean droplet + instance for this machine. type: string ready: description: Ready is true when the provider resource is ready. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_domachinetemplates.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_domachinetemplates.yaml index 1f425c4bb..4d71031de 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_domachinetemplates.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_domachinetemplates.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.5.0 + controller-gen.kubebuilder.io/version: v0.7.0 creationTimestamp: null name: domachinetemplates.infrastructure.cluster.x-k8s.io spec: @@ -24,10 +24,14 @@ spec: description: DOMachineTemplate is the Schema for the domachinetemplates API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -35,33 +39,46 @@ spec: description: DOMachineTemplateSpec defines the desired state of DOMachineTemplate. properties: template: - description: DOMachineTemplateResource describes the data needed to create am DOMachine from a template. + description: DOMachineTemplateResource describes the data needed to + create am DOMachine from a template. properties: spec: - description: Spec is the specification of the desired behavior of the machine. + description: Spec is the specification of the desired behavior + of the machine. properties: additionalTags: - description: AdditionalTags is an optional set of tags to add to DigitalOcean resources managed by the DigitalOcean provider. + description: AdditionalTags is an optional set of tags to + add to DigitalOcean resources managed by the DigitalOcean + provider. items: type: string type: array dataDisks: - description: DataDisks specifies the parameters that are used to add one or more data disks to the machine + description: DataDisks specifies the parameters that are used + to add one or more data disks to the machine items: - description: DataDisk specifies the parameters that are used to add a data disk to the machine. + description: DataDisk specifies the parameters that are + used to add a data disk to the machine. properties: diskSizeGB: - description: DiskSizeGB is the size in GB to assign to the data disk. + description: DiskSizeGB is the size in GB to assign + to the data disk. format: int64 type: integer filesystemLabel: - description: 'FilesystemLabel is the label that is applied to the created filesystem. Character limits apply: 16 for ext4; 12 for xfs. May only be used in conjunction with filesystemType.' + description: 'FilesystemLabel is the label that is applied + to the created filesystem. Character limits apply: + 16 for ext4; 12 for xfs. May only be used in conjunction + with filesystemType.' type: string filesystemType: - description: FilesystemType to be used on the volume. When provided the volume will be automatically formatted. + description: FilesystemType to be used on the volume. + When provided the volume will be automatically formatted. type: string nameSuffix: - description: NameSuffix is the suffix to be appended to the machine name to generate the disk name. Each disk name will be in format -. + description: NameSuffix is the suffix to be appended + to the machine name to generate the disk name. Each + disk name will be in format -. type: string required: - diskSizeGB @@ -75,13 +92,17 @@ spec: description: Droplet image can be image id or slug. See https://developers.digitalocean.com/documentation/v2/#list-all-images x-kubernetes-int-or-string: true providerID: - description: ProviderID is the unique identifier as specified by the cloud provider. + description: ProviderID is the unique identifier as specified + by the cloud provider. type: string size: - description: Droplet size. It must be known DigitalOcean droplet size. See https://developers.digitalocean.com/documentation/v2/#list-all-sizes + description: Droplet size. It must be known DigitalOcean droplet + size. See https://developers.digitalocean.com/documentation/v2/#list-all-sizes type: string sshKeys: - description: SSHKeys is the ssh key id or fingerprint to attach in DigitalOcean droplet. It must be available on DigitalOcean account. See https://developers.digitalocean.com/documentation/v2/#list-all-keys + description: SSHKeys is the ssh key id or fingerprint to attach + in DigitalOcean droplet. It must be available on DigitalOcean + account. See https://developers.digitalocean.com/documentation/v2/#list-all-keys items: anyOf: - type: integer @@ -108,10 +129,14 @@ spec: description: DOMachineTemplate is the Schema for the domachinetemplates API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object @@ -119,33 +144,46 @@ spec: description: DOMachineTemplateSpec defines the desired state of DOMachineTemplate. properties: template: - description: DOMachineTemplateResource describes the data needed to create am DOMachine from a template. + description: DOMachineTemplateResource describes the data needed to + create am DOMachine from a template. properties: spec: - description: Spec is the specification of the desired behavior of the machine. + description: Spec is the specification of the desired behavior + of the machine. properties: additionalTags: - description: AdditionalTags is an optional set of tags to add to DigitalOcean resources managed by the DigitalOcean provider. + description: AdditionalTags is an optional set of tags to + add to DigitalOcean resources managed by the DigitalOcean + provider. items: type: string type: array dataDisks: - description: DataDisks specifies the parameters that are used to add one or more data disks to the machine + description: DataDisks specifies the parameters that are used + to add one or more data disks to the machine items: - description: DataDisk specifies the parameters that are used to add a data disk to the machine. + description: DataDisk specifies the parameters that are + used to add a data disk to the machine. properties: diskSizeGB: - description: DiskSizeGB is the size in GB to assign to the data disk. + description: DiskSizeGB is the size in GB to assign + to the data disk. format: int64 type: integer filesystemLabel: - description: 'FilesystemLabel is the label that is applied to the created filesystem. Character limits apply: 16 for ext4; 12 for xfs. May only be used in conjunction with filesystemType.' + description: 'FilesystemLabel is the label that is applied + to the created filesystem. Character limits apply: + 16 for ext4; 12 for xfs. May only be used in conjunction + with filesystemType.' type: string filesystemType: - description: FilesystemType to be used on the volume. When provided the volume will be automatically formatted. + description: FilesystemType to be used on the volume. + When provided the volume will be automatically formatted. type: string nameSuffix: - description: NameSuffix is the suffix to be appended to the machine name to generate the disk name. Each disk name will be in format -. + description: NameSuffix is the suffix to be appended + to the machine name to generate the disk name. Each + disk name will be in format -. type: string required: - diskSizeGB @@ -159,13 +197,122 @@ spec: description: Droplet image can be image id or slug. See https://developers.digitalocean.com/documentation/v2/#list-all-images x-kubernetes-int-or-string: true providerID: - description: ProviderID is the unique identifier as specified by the cloud provider. + description: ProviderID is the unique identifier as specified + by the cloud provider. type: string size: - description: Droplet size. It must be known DigitalOcean droplet size. See https://developers.digitalocean.com/documentation/v2/#list-all-sizes + description: Droplet size. It must be known DigitalOcean droplet + size. See https://developers.digitalocean.com/documentation/v2/#list-all-sizes type: string sshKeys: - description: SSHKeys is the ssh key id or fingerprint to attach in DigitalOcean droplet. It must be available on DigitalOcean account. See https://developers.digitalocean.com/documentation/v2/#list-all-keys + description: SSHKeys is the ssh key id or fingerprint to attach + in DigitalOcean droplet. It must be available on DigitalOcean + account. See https://developers.digitalocean.com/documentation/v2/#list-all-keys + items: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: array + required: + - image + - size + - sshKeys + type: object + required: + - spec + type: object + required: + - template + type: object + type: object + served: true + storage: false + - name: v1beta1 + schema: + openAPIV3Schema: + description: DOMachineTemplate is the Schema for the domachinetemplates API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DOMachineTemplateSpec defines the desired state of DOMachineTemplate. + properties: + template: + description: DOMachineTemplateResource describes the data needed to + create am DOMachine from a template. + properties: + spec: + description: Spec is the specification of the desired behavior + of the machine. + properties: + additionalTags: + description: AdditionalTags is an optional set of tags to + add to DigitalOcean resources managed by the DigitalOcean + provider. + items: + type: string + type: array + dataDisks: + description: DataDisks specifies the parameters that are used + to add one or more data disks to the machine + items: + description: DataDisk specifies the parameters that are + used to add a data disk to the machine. + properties: + diskSizeGB: + description: DiskSizeGB is the size in GB to assign + to the data disk. + format: int64 + type: integer + filesystemLabel: + description: 'FilesystemLabel is the label that is applied + to the created filesystem. Character limits apply: + 16 for ext4; 12 for xfs. May only be used in conjunction + with filesystemType.' + type: string + filesystemType: + description: FilesystemType to be used on the volume. + When provided the volume will be automatically formatted. + type: string + nameSuffix: + description: NameSuffix is the suffix to be appended + to the machine name to generate the disk name. Each + disk name will be in format -. + type: string + required: + - diskSizeGB + - nameSuffix + type: object + type: array + image: + anyOf: + - type: integer + - type: string + description: Droplet image can be image id or slug. See https://developers.digitalocean.com/documentation/v2/#list-all-images + x-kubernetes-int-or-string: true + providerID: + description: ProviderID is the unique identifier as specified + by the cloud provider. + type: string + size: + description: Droplet size. It must be known DigitalOcean droplet + size. See https://developers.digitalocean.com/documentation/v2/#list-all-sizes + type: string + sshKeys: + description: SSHKeys is the ssh key id or fingerprint to attach + in DigitalOcean droplet. It must be available on DigitalOcean + account. See https://developers.digitalocean.com/documentation/v2/#list-all-keys items: anyOf: - type: integer diff --git a/config/crd/kustomization.yaml b/config/crd/kustomization.yaml index 828e9216a..da976af12 100644 --- a/config/crd/kustomization.yaml +++ b/config/crd/kustomization.yaml @@ -1,5 +1,5 @@ commonLabels: - cluster.x-k8s.io/v1alpha4: v1alpha4 + cluster.x-k8s.io/v1beta1: v1beta1 # This kustomization.yaml is not intended to be run by itself, # since it depends on service name and namespace that are out of this kustomize package. @@ -8,6 +8,7 @@ resources: - bases/infrastructure.cluster.x-k8s.io_doclusters.yaml - bases/infrastructure.cluster.x-k8s.io_domachines.yaml - bases/infrastructure.cluster.x-k8s.io_domachinetemplates.yaml +- bases/infrastructure.cluster.x-k8s.io_doclustertemplates.yaml # +kubebuilder:scaffold:crdkustomizeresource patchesStrategicMerge: @@ -16,6 +17,7 @@ patchesStrategicMerge: - patches/webhook_in_doclusters.yaml - patches/webhook_in_domachines.yaml - patches/webhook_in_domachinetemplates.yaml +- patches/webhook_in_doclustertemplates.yaml # +kubebuilder:scaffold:crdkustomizewebhookpatch # [CERTMANAGER] To enable webhook, uncomment all the sections with [CERTMANAGER] prefix. @@ -23,6 +25,7 @@ patchesStrategicMerge: - patches/cainjection_in_doclusters.yaml - patches/cainjection_in_domachines.yaml - patches/cainjection_in_domachinetemplates.yaml +- patches/cainjection_in_doclustertemplates.yaml # +kubebuilder:scaffold:crdkustomizecainjectionpatch # the following config is for teaching kustomize how to do kustomization for CRDs. diff --git a/config/crd/patches/cainjection_in_doclustertemplates.yaml b/config/crd/patches/cainjection_in_doclustertemplates.yaml new file mode 100644 index 000000000..a1a35767b --- /dev/null +++ b/config/crd/patches/cainjection_in_doclustertemplates.yaml @@ -0,0 +1,8 @@ +# The following patch adds a directive for certmanager to inject CA into the CRD +# CRD conversion requires k8s 1.13 or later. +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) + name: doclustertemplates.infrastructure.cluster.x-k8s.io diff --git a/config/crd/patches/webhook_in_doclustertemplates.yaml b/config/crd/patches/webhook_in_doclustertemplates.yaml new file mode 100644 index 000000000..53709fb3e --- /dev/null +++ b/config/crd/patches/webhook_in_doclustertemplates.yaml @@ -0,0 +1,19 @@ +# The following patch enables a conversion webhook for the CRD +# CRD conversion requires k8s 1.13 or later. +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: doclustertemplates.infrastructure.cluster.x-k8s.io +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + # this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank, + # but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager) + caBundle: Cg== + service: + namespace: system + name: webhook-service + path: /convert + conversionReviewVersions: ["v1", "v1beta1"] diff --git a/config/default/manager_image_patch.yaml b/config/default/manager_image_patch.yaml index 51e5dcbc6..fb3463ff9 100644 --- a/config/default/manager_image_patch.yaml +++ b/config/default/manager_image_patch.yaml @@ -8,5 +8,5 @@ spec: spec: containers: # Change the value of image field below to your controller image URL - - image: gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:master + - image: gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:dev name: manager diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml index 9a218161e..7c0d141e3 100644 --- a/config/manager/manager.yaml +++ b/config/manager/manager.yaml @@ -15,6 +15,8 @@ spec: metadata: labels: control-plane: capdo-controller-manager + annotations: + kubectl.kubernetes.io/default-container: manager spec: serviceAccountName: manager containers: diff --git a/config/webhook/manifests.yaml b/config/webhook/manifests.yaml index d19cd2723..8a44dd89d 100644 --- a/config/webhook/manifests.yaml +++ b/config/webhook/manifests.yaml @@ -12,7 +12,7 @@ webhooks: service: name: webhook-service namespace: system - path: /mutate-infrastructure-cluster-x-k8s-io-v1alpha4-docluster + path: /mutate-infrastructure-cluster-x-k8s-io-v1beta1-docluster failurePolicy: Fail matchPolicy: Equivalent name: default.docluster.infrastructure.cluster.x-k8s.io @@ -20,7 +20,7 @@ webhooks: - apiGroups: - infrastructure.cluster.x-k8s.io apiVersions: - - v1alpha4 + - v1beta1 operations: - CREATE - UPDATE @@ -33,7 +33,28 @@ webhooks: service: name: webhook-service namespace: system - path: /mutate-infrastructure-cluster-x-k8s-io-v1alpha4-domachine + path: /mutate-infrastructure-cluster-x-k8s-io-v1beta1-doclustertemplate + failurePolicy: Fail + matchPolicy: Equivalent + name: default.doclustertemplate.infrastructure.cluster.x-k8s.io + rules: + - apiGroups: + - infrastructure.cluster.x-k8s.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - doclustertemplates + sideEffects: None +- admissionReviewVersions: + - v1beta1 + clientConfig: + service: + name: webhook-service + namespace: system + path: /mutate-infrastructure-cluster-x-k8s-io-v1beta1-domachine failurePolicy: Fail matchPolicy: Equivalent name: default.domachine.infrastructure.cluster.x-k8s.io @@ -41,13 +62,34 @@ webhooks: - apiGroups: - infrastructure.cluster.x-k8s.io apiVersions: - - v1alpha4 + - v1beta1 operations: - CREATE - UPDATE resources: - domachines sideEffects: None +- admissionReviewVersions: + - v1beta1 + clientConfig: + service: + name: webhook-service + namespace: system + path: /mutate-infrastructure-cluster-x-k8s-io-v1beta1-domachinetemplate + failurePolicy: Fail + matchPolicy: Equivalent + name: default.domachinetemplate.infrastructure.cluster.x-k8s.io + rules: + - apiGroups: + - infrastructure.cluster.x-k8s.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - domachinetemplates + sideEffects: None --- apiVersion: admissionregistration.k8s.io/v1 @@ -62,7 +104,7 @@ webhooks: service: name: webhook-service namespace: system - path: /validate-infrastructure-cluster-x-k8s-io-v1alpha4-docluster + path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-docluster failurePolicy: Fail matchPolicy: Equivalent name: validation.docluster.infrastructure.cluster.x-k8s.io @@ -70,7 +112,7 @@ webhooks: - apiGroups: - infrastructure.cluster.x-k8s.io apiVersions: - - v1alpha4 + - v1beta1 operations: - CREATE - UPDATE @@ -83,7 +125,28 @@ webhooks: service: name: webhook-service namespace: system - path: /validate-infrastructure-cluster-x-k8s-io-v1alpha4-domachine + path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-doclustertemplate + failurePolicy: Fail + matchPolicy: Equivalent + name: validation.doclustertemplate.infrastructure.cluster.x-k8s.io + rules: + - apiGroups: + - infrastructure.cluster.x-k8s.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - doclustertemplates + sideEffects: None +- admissionReviewVersions: + - v1beta1 + clientConfig: + service: + name: webhook-service + namespace: system + path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-domachine failurePolicy: Fail matchPolicy: Equivalent name: validation.domachine.infrastructure.cluster.x-k8s.io @@ -91,7 +154,7 @@ webhooks: - apiGroups: - infrastructure.cluster.x-k8s.io apiVersions: - - v1alpha4 + - v1beta1 operations: - CREATE - UPDATE @@ -104,15 +167,15 @@ webhooks: service: name: webhook-service namespace: system - path: /validate-infrastructure-cluster-x-k8s-io-v1alpha4-domachinetemplate + path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-domachinetemplate failurePolicy: Fail matchPolicy: Equivalent - name: validation.domachinetemplate.infrastructure.x-k8s.io + name: validation.domachinetemplate.infrastructure.cluster.x-k8s.io rules: - apiGroups: - infrastructure.cluster.x-k8s.io apiVersions: - - v1alpha4 + - v1beta1 operations: - CREATE - UPDATE diff --git a/controllers/docluster_controller.go b/controllers/docluster_controller.go index e04bf8536..ab4b64f59 100644 --- a/controllers/docluster_controller.go +++ b/controllers/docluster_controller.go @@ -23,16 +23,11 @@ import ( "github.com/pkg/errors" - infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" - "sigs.k8s.io/cluster-api-provider-digitalocean/cloud/scope" - "sigs.k8s.io/cluster-api-provider-digitalocean/cloud/services/networking" - dnsutil "sigs.k8s.io/cluster-api-provider-digitalocean/util/dns" - corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/client-go/tools/record" - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" "sigs.k8s.io/cluster-api/util" "sigs.k8s.io/cluster-api/util/predicates" ctrl "sigs.k8s.io/controller-runtime" @@ -42,6 +37,11 @@ import ( "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/source" + + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" + "sigs.k8s.io/cluster-api-provider-digitalocean/cloud/scope" + "sigs.k8s.io/cluster-api-provider-digitalocean/cloud/services/networking" + dnsutil "sigs.k8s.io/cluster-api-provider-digitalocean/util/dns" ) // DOClusterReconciler reconciles a DOCluster object. diff --git a/controllers/domachine_controller.go b/controllers/domachine_controller.go index 2b7d1e16c..f3001d041 100644 --- a/controllers/domachine_controller.go +++ b/controllers/domachine_controller.go @@ -25,15 +25,11 @@ import ( "github.com/pkg/errors" - infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" - "sigs.k8s.io/cluster-api-provider-digitalocean/cloud/scope" - "sigs.k8s.io/cluster-api-provider-digitalocean/cloud/services/computes" - corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/client-go/tools/record" - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" capierrors "sigs.k8s.io/cluster-api/errors" "sigs.k8s.io/cluster-api/util" "sigs.k8s.io/cluster-api/util/predicates" @@ -44,6 +40,10 @@ import ( "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/source" + + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" + "sigs.k8s.io/cluster-api-provider-digitalocean/cloud/scope" + "sigs.k8s.io/cluster-api-provider-digitalocean/cloud/services/computes" ) // DOMachineReconciler reconciles a DOMachine object. diff --git a/controllers/domachine_controller_unit_test.go b/controllers/domachine_controller_unit_test.go index 8d4df4012..a341d02f3 100644 --- a/controllers/domachine_controller_unit_test.go +++ b/controllers/domachine_controller_unit_test.go @@ -21,18 +21,18 @@ import ( . "github.com/onsi/gomega" - infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/tools/record" - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" + + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" ) var ( diff --git a/controllers/suite_test.go b/controllers/suite_test.go index b1a5aea14..8b237840c 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -23,19 +23,19 @@ import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" - // +kubebuilder:scaffold:imports - infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" - "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" "k8s.io/klog/v2" "k8s.io/klog/v2/klogr" - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest" "sigs.k8s.io/controller-runtime/pkg/envtest/printer" logf "sigs.k8s.io/controller-runtime/pkg/log" + + // +kubebuilder:scaffold:imports + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" ) // These tests use Ginkgo (BDD-style Go testing framework). Refer to diff --git a/go.mod b/go.mod index f00c593aa..f9c1df70d 100644 --- a/go.mod +++ b/go.mod @@ -5,20 +5,20 @@ go 1.16 require ( github.com/digitalocean/godo v1.65.0 github.com/go-logr/logr v0.4.0 - github.com/miekg/dns v1.1.3 + github.com/miekg/dns v1.1.26 github.com/onsi/ginkgo v1.16.4 - github.com/onsi/gomega v1.15.0 + github.com/onsi/gomega v1.16.0 github.com/pkg/errors v0.9.1 github.com/spf13/pflag v1.0.5 - golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - k8s.io/api v0.21.4 - k8s.io/apimachinery v0.21.4 - k8s.io/client-go v0.21.4 + golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f + k8s.io/api v0.22.3 + k8s.io/apimachinery v0.22.3 + k8s.io/client-go v0.22.3 k8s.io/klog/v2 v2.9.0 - k8s.io/utils v0.0.0-20210802155522-efc7438f0176 - sigs.k8s.io/cluster-api v0.4.4 - sigs.k8s.io/cluster-api/test v0.4.4 - sigs.k8s.io/controller-runtime v0.9.7 + k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b + sigs.k8s.io/cluster-api v1.0.0 + sigs.k8s.io/cluster-api/test v1.0.0 + sigs.k8s.io/controller-runtime v0.10.2 ) -replace sigs.k8s.io/cluster-api => sigs.k8s.io/cluster-api v0.4.4 +replace sigs.k8s.io/cluster-api => sigs.k8s.io/cluster-api v1.0.0 diff --git a/go.sum b/go.sum index 400351a33..349461616 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,13 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3 h1:wPBktZFzYBcCZVARvwVKqH1uEj+aLXofJEtrb4oOsio= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -29,6 +34,7 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7 cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -40,18 +46,22 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= +github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= +github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -81,11 +91,9 @@ github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:m github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -94,15 +102,15 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5 github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -123,6 +131,8 @@ github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8n github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= @@ -142,6 +152,9 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= +github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= @@ -226,8 +239,8 @@ github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgU github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= github.com/coredns/caddy v1.1.0 h1:ezvsPrT/tA/7pYDBZxu0cT0VmWk75AfIaf6GSYCNMf0= github.com/coredns/caddy v1.1.0/go.mod h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4= -github.com/coredns/corefile-migration v1.0.12 h1:TJGATo0YLQJVIKJZLajXE1IrhRFtYTR1cYsGIT1YNEk= -github.com/coredns/corefile-migration v1.0.12/go.mod h1:NJOI8ceUF/NTgEwtjD+TUq3/BnH/GF7WAM3RzCa3hBo= +github.com/coredns/corefile-migration v1.0.13 h1:ld5RswmH1xjqBUEukw4QxC1PakLNNoVlsZEV8FGwoV8= +github.com/coredns/corefile-migration v1.0.13/go.mod h1:XnhgULOEouimnzgn0t4WPuFDN2/PJQcTxdWKC5eXNGE= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -277,7 +290,6 @@ github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6Uezg github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= @@ -299,7 +311,6 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.11.0+incompatible h1:glyUF9yIYtMHzn8xaKw5rMhdWcwsYV8dZHIq5567/xs= github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -308,21 +319,23 @@ github.com/evanphx/json-patch/v5 v5.2.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2Vvl github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -340,52 +353,20 @@ github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/zapr v0.4.0 h1:uc1uML3hRYL9/ZZPdgHS/n8Nzo+eaYL/Efxkkamf7OM= github.com/go-logr/zapr v0.4.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= -github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobuffalo/flect v0.2.3 h1:f/ZukRnSNA/DUpSNDadko7Qc0PhGvsew35p/2tu+CRY= github.com/gobuffalo/flect v0.2.3/go.mod h1:vmkQwuZYhN5Pc4ljYQZzP+1sq+NEkK+lh20jmEmX3jc= -github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= @@ -416,6 +397,7 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -434,9 +416,11 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -461,6 +445,7 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -472,6 +457,9 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -481,10 +469,11 @@ github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.7.2 h1:zoNxOV7WjqXptQOVngLmcSQgXmgk4NMz1HibBchjl/I= @@ -496,20 +485,26 @@ github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -517,14 +512,15 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -541,6 +537,8 @@ github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJS github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -549,7 +547,6 @@ github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMW github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= @@ -578,19 +575,23 @@ github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= @@ -599,11 +600,12 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5 github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.3 h1:1g0r1IvskvgL8rR+AcHzUA+oFmGcQlaIm4IqakufeMM= -github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= @@ -612,8 +614,9 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= @@ -621,8 +624,8 @@ github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2J github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= +github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 h1:yH0SvLzcbZxcJXho2yh7CqdENGMQe73Cw3woZBpPli0= +github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -654,6 +657,7 @@ github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= @@ -662,8 +666,9 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/onsi/gomega v1.15.0 h1:WjP/FQ/sk43MRmnEcT+MlDw2TFvkrXlprrPST/IudjU= github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= +github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c= +github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -686,12 +691,13 @@ github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.m github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= -github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -702,6 +708,7 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -746,10 +753,10 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= @@ -758,26 +765,28 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= +github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -791,8 +800,9 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.9.0 h1:yR6EXjTp0y0cLN8OZg1CRZmOBdI88UcGkhgyJhu6nZk= +github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -813,15 +823,14 @@ github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= @@ -847,14 +856,15 @@ github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= +go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= +go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -863,6 +873,17 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= +go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= +go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= +go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= +go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= +go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= +go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -883,20 +904,20 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -930,14 +951,12 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -946,7 +965,6 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -959,6 +977,7 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -979,15 +998,17 @@ golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210520170846-37e1c6afe023 h1:ADo5wSpq2gqaCGQWzk7S5vd//0iyyLeAratkEoG5dLE= +golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1000,8 +1021,11 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1022,8 +1046,8 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1041,9 +1065,12 @@ golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1067,6 +1094,7 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1079,6 +1107,7 @@ golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1097,11 +1126,17 @@ golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2 h1:c8PlLMqBbOHoqtjteWm5/kbe6rNY2pbRfbIMVnepueo= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE= @@ -1127,7 +1162,6 @@ golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1138,11 +1172,11 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1182,8 +1216,12 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2 h1:kRBLX7v7Af8W7Gdbbc908OJcdgtK8bOz9Uaj8/F1ACA= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1214,6 +1252,12 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1246,6 +1290,7 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1267,8 +1312,19 @@ google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 h1:z+ErRPu0+KS02Td3fOAgdX+lnPDh/VyaABEJPD4JRQs= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1292,9 +1348,14 @@ google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA5 google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI= google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1306,8 +1367,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1323,8 +1385,9 @@ gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKW gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.63.2 h1:tGK/CyBg7SMzb60vP1M03vNZ3VDu3wGQJwn7Sxi9r3c= +gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1338,7 +1401,6 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1362,36 +1424,39 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.21.4 h1:WtDkzTAuI31WZKDPeIYpEUA+WeUfXAmA7gwj6nzFfbc= -k8s.io/api v0.21.4/go.mod h1:fTVGP+M4D8+00FN2cMnJqk/eb/GH53bvmNs2SVTmpFk= -k8s.io/apiextensions-apiserver v0.21.4 h1:HkajN/vmT/9HnFmUxvpXfSGkTCvH/ax4e3+j6mqWUDU= -k8s.io/apiextensions-apiserver v0.21.4/go.mod h1:OoC8LhI9LnV+wKjZkXIBbLUwtnOGJiTRE33qctH5CIk= +k8s.io/api v0.22.2/go.mod h1:y3ydYpLJAaDI+BbSe2xmGcqxiWHmWjkEeIbiwHvnPR8= +k8s.io/api v0.22.3 h1:wOoES2GoSkUsdped2RB4zYypPqWtvprGoKCENTOOjP4= +k8s.io/api v0.22.3/go.mod h1:azgiXFiXqiWyLCfI62/eYBOu19rj2LKmIhFPP4+33fs= +k8s.io/apiextensions-apiserver v0.22.2 h1:zK7qI8Ery7j2CaN23UCFaC1hj7dMiI87n01+nKuewd4= +k8s.io/apiextensions-apiserver v0.22.2/go.mod h1:2E0Ve/isxNl7tWLSUDgi6+cmwHi5fQRdwGVCxbC+KFA= k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.21.4 h1:KDq0lWZVslHkuE5I7iGAQHwpK0aDTlar1E7IWEc4CNw= -k8s.io/apimachinery v0.21.4/go.mod h1:H/IM+5vH9kZRNJ4l3x/fXP/5bOPJaVP/guptnZPeCFI= +k8s.io/apimachinery v0.22.2/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= +k8s.io/apimachinery v0.22.3 h1:mrvBG5CZnEfwgpVqWcrRKvdsYECTrhAR6cApAgdsflk= +k8s.io/apimachinery v0.22.3/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/apiserver v0.21.4 h1:egJgdhW0ueq5iJSY0c5YedPvRM2Ft/D3dcXOgwvs9jY= -k8s.io/apiserver v0.21.4/go.mod h1:SErUuFBBPZUcD2nsUU8hItxoYheqyYr2o/pCINEPW8g= -k8s.io/cli-runtime v0.21.4/go.mod h1:eRbLHYkdVWzvG87yrkgGd8CqX6/+fAG9DTdAqTXmlRY= +k8s.io/apiserver v0.22.2 h1:TdIfZJc6YNhu2WxeAOWq1TvukHF0Sfx0+ln4XK9qnL4= +k8s.io/apiserver v0.22.2/go.mod h1:vrpMmbyjWrgdyOvZTSpsusQq5iigKNWv9o9KlDAbBHI= +k8s.io/cli-runtime v0.22.2/go.mod h1:tkm2YeORFpbgQHEK/igqttvPTRIHFRz5kATlw53zlMI= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.21.4 h1:tcwj167If+v+pIGrCjaPG7hFo6SqFPFCCgMJy+Vm8Jc= -k8s.io/client-go v0.21.4/go.mod h1:t0/eMKyUAq/DoQ7vW8NVVA00/nomlwC+eInsS8PxSew= -k8s.io/cluster-bootstrap v0.21.4 h1:dnCOcVJdCAMz8+nvqodrFv/yd/3Ae9Jn14cChpQjps8= -k8s.io/cluster-bootstrap v0.21.4/go.mod h1:GtXGuiEtdV4XQJcscR6qQCm/vtQWkhUi3qnl9KL9jzw= -k8s.io/code-generator v0.21.4/go.mod h1:K3y0Bv9Cz2cOW2vXUrNZlFbflhuPvuadW6JdnN6gGKo= +k8s.io/client-go v0.22.2/go.mod h1:sAlhrkVDf50ZHx6z4K0S40wISNTarf1r800F+RlCF6U= +k8s.io/client-go v0.22.3 h1:6onkOSc+YNdwq5zXE0wFXicq64rrym+mXwHu/CPVGO4= +k8s.io/client-go v0.22.3/go.mod h1:ElDjYf8gvZsKDYexmsmnMQ0DYO8W9RwBjfQ1PI53yow= +k8s.io/cluster-bootstrap v0.22.2 h1:jP6Nkp3CdSfr50cAn/7WGsNS52zrwMhvr0V+E3Vkh/w= +k8s.io/cluster-bootstrap v0.22.2/go.mod h1:ZkmQKprEqvrUccMnbRHISsMscA1dsQ8SffM9nHq6CgE= +k8s.io/code-generator v0.22.2/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.21.4 h1:Bc0AttSyhJFVXEIHz+VX+D11j/5z7SPPhl6whiXaRzs= -k8s.io/component-base v0.21.4/go.mod h1:ZKG0eHVX+tUDcaoIGpU3Vtk4TIjMddN9uhEWDmW6Nyg= -k8s.io/component-helpers v0.21.4/go.mod h1:/5TBNWmxaAymZweO1JWv3Pt5rcYJV1LbWWY0x1rDdVU= +k8s.io/component-base v0.22.2 h1:vNIvE0AIrLhjX8drH0BgCNJcR4QZxMXcJzBsDplDx9M= +k8s.io/component-base v0.22.2/go.mod h1:5Br2QhI9OTe79p+TzPe9JKNQYvEKbq9rTJDWllunGug= +k8s.io/component-helpers v0.22.2/go.mod h1:+N61JAR9aKYSWbnLA88YcFr9K/6ISYvRNybX7QW7Rs8= k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= @@ -1401,40 +1466,41 @@ k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAE k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.9.0 h1:D7HV+n1V57XeZ0m6tdRkfknthUaM06VFbWldOFh8kzM= k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0= -k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= -k8s.io/kubectl v0.21.4/go.mod h1:rRYB5HeScoGQKxZDQmus17pTSVIuqfm0D31ApET/qSM= +k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e h1:KLHHjkdQFomZy8+06csTWZ0m1343QqxZhR2LJ1OxCYM= +k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kubectl v0.22.2/go.mod h1:BApg2j0edxLArCOfO0ievI27EeTQqBDMNU9VQH734iQ= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/metrics v0.21.4/go.mod h1:uhWoVuVumUMSeCa1B1p2tm4Y4XuZIg0n24QEtB54wuA= +k8s.io/metrics v0.22.2/go.mod h1:GUcsBtpsqQD1tKFS/2wCKu4ZBowwRncLOJH1rgWs3uw= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176 h1:Mx0aa+SUAcNRQbs5jUzV8lkDlGFU8laZsY9jrcVX5SY= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/cluster-api v0.4.4 h1:gTSjXQEfSwphgYMelKEZZPXvok06GCF5tsCC550A5zA= -sigs.k8s.io/cluster-api v0.4.4/go.mod h1:KKycu4yJEm1sxKG5UaHX9ZnYxRiBzJsFjJVmvMQUP2k= -sigs.k8s.io/cluster-api/test v0.4.4 h1:Xt9PX7JVAWmAOL8H4MkRTYhxBIuhuqP1D4sA+S+CuUE= -sigs.k8s.io/cluster-api/test v0.4.4/go.mod h1:QSthG8w6jaeNE9hwDxntAspluG8xPJFzi1ptSGoNNbw= -sigs.k8s.io/controller-runtime v0.9.7 h1:DlHMlAyLpgEITVvNsuZqMbf8/sJl9HirmCZIeR5H9mQ= -sigs.k8s.io/controller-runtime v0.9.7/go.mod h1:nExcHcQ2zvLMeoO9K7rOesGCmgu32srN5SENvpAEbGA= +sigs.k8s.io/cluster-api v1.0.0 h1:GcVA2ObQTXo/+jzSLWPy4Bd3NeiwJyAB8n19kyJIotA= +sigs.k8s.io/cluster-api v1.0.0/go.mod h1:V230kMSaYENTUcx1QRkoRCklb3vfphQGV3/z4ODNGWo= +sigs.k8s.io/cluster-api/test v1.0.0 h1:PeWOLXtDGYMmzXwGX+NtH7Xxx6BtS83DT7vKzITY5X0= +sigs.k8s.io/cluster-api/test v1.0.0/go.mod h1:8WQozDv62x2qHkCB1wTUeFjuwawuHKUTh8IMH5hePQs= +sigs.k8s.io/controller-runtime v0.10.2 h1:jW8qiY+yMnnPx6O9hu63tgcwaKzd1yLYui+mpvClOOc= +sigs.k8s.io/controller-runtime v0.10.2/go.mod h1:CQp8eyUQZ/Q7PJvnIrB6/hgfTC1kBkGylwsLgOQi1WY= sigs.k8s.io/kind v0.11.1 h1:pVzOkhUwMBrCB0Q/WllQDO3v14Y+o2V0tFgjTqIUjwA= sigs.k8s.io/kind v0.11.1/go.mod h1:fRpgVhtqAWrtLB9ED7zQahUimpUXuG/iHT88xYqEGIA= -sigs.k8s.io/kustomize/api v0.8.8/go.mod h1:He1zoK0nk43Pc6NlV085xDXDXTNprtcyKZVm3swsdNY= -sigs.k8s.io/kustomize/cmd/config v0.9.10/go.mod h1:Mrby0WnRH7hA6OwOYnYpfpiY0WJIMgYrEDfwOeFdMK0= -sigs.k8s.io/kustomize/kustomize/v4 v4.1.2/go.mod h1:PxBvo4WGYlCLeRPL+ziT64wBXqbgfcalOS/SXa/tcyo= -sigs.k8s.io/kustomize/kyaml v0.10.17/go.mod h1:mlQFagmkm1P+W4lZJbJ/yaxMd8PqMRSC4cPcfUVt5Hg= +sigs.k8s.io/kustomize/api v0.8.11/go.mod h1:a77Ls36JdfCWojpUqR6m60pdGY1AYFix4AH83nJtY1g= +sigs.k8s.io/kustomize/cmd/config v0.9.13/go.mod h1:7547FLF8W/lTaDf0BDqFTbZxM9zqwEJqCKN9sSR0xSs= +sigs.k8s.io/kustomize/kustomize/v4 v4.2.0/go.mod h1:MOkR6fmhwG7hEDRXBYELTi5GSFcLwfqwzTRHW3kv5go= +sigs.k8s.io/kustomize/kyaml v0.11.0/go.mod h1:GNMwjim4Ypgp/MueD3zXHLRJEjz7RvtPae0AwlvEMFM= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/hack/boilerplate/boilerplate.py b/hack/boilerplate/boilerplate.py index cabbaa71e..66863f64f 100755 --- a/hack/boilerplate/boilerplate.py +++ b/hack/boilerplate/boilerplate.py @@ -204,7 +204,8 @@ def get_regexs(): # company holder names can be anything regexs["date"] = re.compile(get_dates()) # strip // +build \n\n build constraints - regexs["go_build_constraints"] = re.compile(r"^(// \+build.*\n)+\n", re.MULTILINE) + regexs["go_build_constraints"] = re.compile(r"^(//( \+build|go:build).*\n)+\n", + re.MULTILINE) # strip #!.* from shell scripts regexs["shebang"] = re.compile(r"^(#!.*\n)\n*", re.MULTILINE) # Search for generated files diff --git a/hack/install-cert-manager.sh b/hack/install-cert-manager.sh new file mode 100755 index 000000000..bbb0501b7 --- /dev/null +++ b/hack/install-cert-manager.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +# Copyright 2021 The Kubernetes Authors. +# +# 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. + +set -o errexit +set -o nounset +set -o pipefail + +TEST_RESOURCE=$(cat <<-END +apiVersion: v1 +kind: Namespace +metadata: + name: cert-manager-test +--- +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: test-selfsigned + namespace: cert-manager-test +spec: + selfSigned: {} +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: selfsigned-cert + namespace: cert-manager-test +spec: + dnsNames: + - example.com + secretName: selfsigned-cert-tls + issuerRef: + name: test-selfsigned +END +) + +REPO_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +cd "${REPO_ROOT}" || exit 1 + +# Installation of kubectl +mkdir -p "${REPO_ROOT}/hack/tools/bin" +KUBECTL=$(realpath hack/tools/bin/kubectl) +make "${KUBECTL}" &>/dev/null + +## Install cert manager and wait for availability +"${KUBECTL}" apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.0/cert-manager.yaml +"${KUBECTL}" wait --for=condition=Available --timeout=5m -n cert-manager deployment/cert-manager +"${KUBECTL}" wait --for=condition=Available --timeout=5m -n cert-manager deployment/cert-manager-cainjector +"${KUBECTL}" wait --for=condition=Available --timeout=5m -n cert-manager deployment/cert-manager-webhook + +echo "$TEST_RESOURCE" | ${KUBECTL} apply -f - +sleep 5 + +"${KUBECTL}" wait --for=condition=Ready --timeout=300s -n cert-manager-test certificate/selfsigned-cert +echo "$TEST_RESOURCE" | "${KUBECTL}" delete -f - diff --git a/hack/kustomize-sub.sh b/hack/kustomize-sub.sh new file mode 100755 index 000000000..e4e1098a0 --- /dev/null +++ b/hack/kustomize-sub.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Copyright 2021 The Kubernetes Authors. +# +# 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. + +set -o errexit +set -o nounset +set -o pipefail + +root=$(dirname "${BASH_SOURCE[0]}") +$root/tools/bin/kustomize build $1 | $root/tools/bin/envsubst \ No newline at end of file diff --git a/main.go b/main.go index 4482eaf57..ebbe5e903 100644 --- a/main.go +++ b/main.go @@ -30,21 +30,21 @@ import ( "k8s.io/klog/v2" "k8s.io/klog/v2/klogr" - infrav1alpha3 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha3" - infrav1alpha4 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" - "sigs.k8s.io/cluster-api-provider-digitalocean/controllers" - dnsutil "sigs.k8s.io/cluster-api-provider-digitalocean/util/dns" - dnsresolver "sigs.k8s.io/cluster-api-provider-digitalocean/util/dns/resolver" - "k8s.io/apimachinery/pkg/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" "sigs.k8s.io/cluster-api/util/record" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/controller" - "sigs.k8s.io/controller-runtime/pkg/healthz" + + infrav1alpha3 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha3" + infrav1alpha4 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha4" + infrav1beta1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" + "sigs.k8s.io/cluster-api-provider-digitalocean/controllers" + dnsutil "sigs.k8s.io/cluster-api-provider-digitalocean/util/dns" + dnsresolver "sigs.k8s.io/cluster-api-provider-digitalocean/util/dns/resolver" ) var ( @@ -58,6 +58,7 @@ func init() { _ = clientgoscheme.AddToScheme(scheme) _ = infrav1alpha3.AddToScheme(scheme) _ = infrav1alpha4.AddToScheme(scheme) + _ = infrav1beta1.AddToScheme(scheme) _ = clusterv1.AddToScheme(scheme) // +kubebuilder:scaffold:scheme } @@ -145,27 +146,31 @@ func main() { os.Exit(1) } - if err := (&infrav1alpha4.DOCluster{}).SetupWebhookWithManager(mgr); err != nil { + if err := (&infrav1beta1.DOCluster{}).SetupWebhookWithManager(mgr); err != nil { setupLog.Error(err, "unable to create webhook", "webhook", "DOCluster") os.Exit(1) } - if err := (&infrav1alpha4.DOMachine{}).SetupWebhookWithManager(mgr); err != nil { + if err = (&infrav1beta1.DOClusterTemplate{}).SetupWebhookWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create webhook", "webhook", "DOClusterTemplate") + os.Exit(1) + } + if err := (&infrav1beta1.DOMachine{}).SetupWebhookWithManager(mgr); err != nil { setupLog.Error(err, "unable to create webhook", "webhook", "DOMachine") os.Exit(1) } - if err := (&infrav1alpha4.DOMachineTemplate{}).SetupWebhookWithManager(mgr); err != nil { + if err := (&infrav1beta1.DOMachineTemplate{}).SetupWebhookWithManager(mgr); err != nil { setupLog.Error(err, "unable to create webhook", "webhook", "DOMachineTemplate") os.Exit(1) } // +kubebuilder:scaffold:builder - if err := mgr.AddReadyzCheck("ping", healthz.Ping); err != nil { + if err := mgr.AddReadyzCheck("webhook", mgr.GetWebhookServer().StartedChecker()); err != nil { setupLog.Error(err, "unable to create ready check") os.Exit(1) } - if err := mgr.AddHealthzCheck("ping", healthz.Ping); err != nil { + if err := mgr.AddHealthzCheck("webhook", mgr.GetWebhookServer().StartedChecker()); err != nil { setupLog.Error(err, "unable to create health check") os.Exit(1) } diff --git a/metadata.yaml b/metadata.yaml index 9879d24f3..0ba7b0fb9 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -7,3 +7,6 @@ releaseSeries: - major: 0 minor: 5 contract: v1alpha4 +- major: 1 + minor: 0 + contract: v1beta1 diff --git a/scripts/kind-with-registry.sh b/scripts/kind-with-registry.sh index 58432ca48..228e7ea48 100755 --- a/scripts/kind-with-registry.sh +++ b/scripts/kind-with-registry.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2020 The Kubernetes Authors. +# Copyright 2021 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,8 +17,13 @@ set -o errexit set -o nounset set -o pipefail + +REPO_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +KUBECTL=$REPO_ROOT/hack/tools/bin/kubectl + # desired cluster name; default is "kind" KIND_CLUSTER_NAME="${KIND_CLUSTER_NAME:-capdo}" +export KIND_EXPERIMENTAL_DOCKER_NETWORK="bridge" if [[ "$(kind get clusters)" =~ .*"${KIND_CLUSTER_NAME}".* ]]; then echo "cluster already exists, moving on" @@ -26,8 +31,13 @@ if [[ "$(kind get clusters)" =~ .*"${KIND_CLUSTER_NAME}".* ]]; then fi # create registry container unless it already exists +kind_version=$(kind version) +kind_network='kind' reg_name='kind-registry' reg_port='5000' +kind_network='bridge' + +# create registry container unless it already exists running="$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" if [ "${running}" != 'true' ]; then docker run \ @@ -35,22 +45,58 @@ if [ "${running}" != 'true' ]; then registry:2 fi +reg_host="${reg_name}" +if [ "${kind_network}" = "bridge" ]; then + reg_host="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' "${reg_name}")" +fi +echo "Registry Host: ${reg_host}" + # create a cluster with the local registry enabled in containerd cat <> /etc/hosts" for node in $(kind get nodes --name "${KIND_CLUSTER_NAME}"); do - docker exec "${node}" sh -c "${cmd}" - kubectl annotate node "${node}" \ - tilt.dev/registry=localhost:${reg_port} \ - tilt.dev/registry-from-cluster=registry:${reg_port} + $KUBECTL annotate node "${node}" tilt.dev/registry=localhost:${reg_port}; done + +if [ "${kind_network}" != "bridge" ]; then + containers=$(docker network inspect ${kind_network} -f "{{range .Containers}}{{.Name}} {{end}}") + needs_connect="true" + for c in $containers; do + if [ "$c" = "${reg_name}" ]; then + needs_connect="false" + fi + done + if [ "${needs_connect}" = "true" ]; then + docker network connect "${kind_network}" "${reg_name}" || true + fi +fi + +# add ingress +$KUBECTL apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/kind/deploy.yaml +$KUBECTL wait node "${KIND_CLUSTER_NAME}-control-plane" --for=condition=ready --timeout=90s +$KUBECTL wait --namespace ingress-nginx \ + --for=condition=ready pod \ + --selector=app.kubernetes.io/component=controller \ + --timeout=120s diff --git a/templates/cluster-template-ext-etcd-storage.yaml b/templates/cluster-template-ext-etcd-storage.yaml index 734bdc679..c7a6fb6da 100644 --- a/templates/cluster-template-ext-etcd-storage.yaml +++ b/templates/cluster-template-ext-etcd-storage.yaml @@ -1,5 +1,5 @@ --- -apiVersion: cluster.x-k8s.io/v1alpha4 +apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: name: "${CLUSTER_NAME}" @@ -8,15 +8,15 @@ spec: pods: cidrBlocks: ["192.168.0.0/16"] infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOCluster name: "${CLUSTER_NAME}" controlPlaneRef: kind: KubeadmControlPlane - apiVersion: controlplane.cluster.x-k8s.io/v1alpha4 + apiVersion: controlplane.cluster.x-k8s.io/v1beta1 name: "${CLUSTER_NAME}-control-plane" --- -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOCluster metadata: name: "${CLUSTER_NAME}" @@ -24,7 +24,7 @@ spec: region: ${DO_REGION} --- kind: KubeadmControlPlane -apiVersion: controlplane.cluster.x-k8s.io/v1alpha4 +apiVersion: controlplane.cluster.x-k8s.io/v1beta1 metadata: name: "${CLUSTER_NAME}-control-plane" spec: @@ -32,7 +32,7 @@ spec: machineTemplate: infrastructureRef: kind: DOMachineTemplate - apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 name: "${CLUSTER_NAME}-control-plane" kubeadmConfigSpec: initConfiguration: @@ -57,7 +57,7 @@ spec: version: "${KUBERNETES_VERSION}" --- kind: DOMachineTemplate -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 metadata: name: "${CLUSTER_NAME}-control-plane" spec: @@ -73,7 +73,7 @@ spec: sshKeys: - ${DO_SSH_KEY_FINGERPRINT} --- -apiVersion: cluster.x-k8s.io/v1alpha4 +apiVersion: cluster.x-k8s.io/v1beta1 kind: MachineDeployment metadata: name: "${CLUSTER_NAME}-md-0" @@ -89,14 +89,14 @@ spec: bootstrap: configRef: name: "${CLUSTER_NAME}-md-0" - apiVersion: bootstrap.cluster.x-k8s.io/v1alpha4 + apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate infrastructureRef: name: "${CLUSTER_NAME}-md-0" - apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOMachineTemplate --- -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOMachineTemplate metadata: name: "${CLUSTER_NAME}-md-0" @@ -108,7 +108,7 @@ spec: sshKeys: - ${DO_SSH_KEY_FINGERPRINT} --- -apiVersion: bootstrap.cluster.x-k8s.io/v1alpha4 +apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate metadata: name: "${CLUSTER_NAME}-md-0" diff --git a/templates/cluster-template.yaml b/templates/cluster-template.yaml index a37f92234..80fd2a7f5 100644 --- a/templates/cluster-template.yaml +++ b/templates/cluster-template.yaml @@ -1,5 +1,5 @@ --- -apiVersion: cluster.x-k8s.io/v1alpha4 +apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: name: "${CLUSTER_NAME}" @@ -8,15 +8,15 @@ spec: pods: cidrBlocks: ["192.168.0.0/16"] infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOCluster name: "${CLUSTER_NAME}" controlPlaneRef: kind: KubeadmControlPlane - apiVersion: controlplane.cluster.x-k8s.io/v1alpha4 + apiVersion: controlplane.cluster.x-k8s.io/v1beta1 name: "${CLUSTER_NAME}-control-plane" --- -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOCluster metadata: name: "${CLUSTER_NAME}" @@ -24,7 +24,7 @@ spec: region: ${DO_REGION} --- kind: KubeadmControlPlane -apiVersion: controlplane.cluster.x-k8s.io/v1alpha4 +apiVersion: controlplane.cluster.x-k8s.io/v1beta1 metadata: name: "${CLUSTER_NAME}-control-plane" spec: @@ -32,7 +32,7 @@ spec: machineTemplate: infrastructureRef: kind: DOMachineTemplate - apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 name: "${CLUSTER_NAME}-control-plane" kubeadmConfigSpec: initConfiguration: @@ -49,7 +49,7 @@ spec: version: "${KUBERNETES_VERSION}" --- kind: DOMachineTemplate -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 metadata: name: "${CLUSTER_NAME}-control-plane" spec: @@ -60,7 +60,7 @@ spec: sshKeys: - ${DO_SSH_KEY_FINGERPRINT} --- -apiVersion: cluster.x-k8s.io/v1alpha4 +apiVersion: cluster.x-k8s.io/v1beta1 kind: MachineDeployment metadata: name: "${CLUSTER_NAME}-md-0" @@ -76,14 +76,14 @@ spec: bootstrap: configRef: name: "${CLUSTER_NAME}-md-0" - apiVersion: bootstrap.cluster.x-k8s.io/v1alpha4 + apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate infrastructureRef: name: "${CLUSTER_NAME}-md-0" - apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOMachineTemplate --- -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOMachineTemplate metadata: name: "${CLUSTER_NAME}-md-0" @@ -95,7 +95,7 @@ spec: sshKeys: - ${DO_SSH_KEY_FINGERPRINT} --- -apiVersion: bootstrap.cluster.x-k8s.io/v1alpha4 +apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate metadata: name: "${CLUSTER_NAME}-md-0" diff --git a/templates/kustomization.yaml b/templates/kustomization.yaml new file mode 100644 index 000000000..5e058e123 --- /dev/null +++ b/templates/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: default +resources: + - cluster-template.yaml diff --git a/templates/kustomizeversions.yaml b/templates/kustomizeversions.yaml new file mode 100644 index 000000000..db7061cf9 --- /dev/null +++ b/templates/kustomizeversions.yaml @@ -0,0 +1,33 @@ +apiVersion: controlplane.cluster.x-k8s.io/v1beta1 +kind: KubeadmControlPlane +metadata: + name: "${CLUSTER_NAME}-control-plane" +spec: + kubeadmConfigSpec: + useExperimentalRetryJoin: true + clusterConfiguration: + kubernetesVersion: "ci/${CI_VERSION}" +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: DOMachineTemplate +metadata: + name: "${CLUSTER_NAME}-control-plane" +spec: + template: + spec: + size: "${DO_NODE_MACHINE_TYPE}" + image: ${DO_NODE_MACHINE_IMAGE} + sshKeys: + - ${DO_SSH_KEY_FINGERPRINT} +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: DOMachineTemplate +metadata: + name: "${CLUSTER_NAME}-md-0" +spec: + template: + spec: + size: "${DO_NODE_MACHINE_TYPE}" + image: ${DO_NODE_MACHINE_IMAGE} + sshKeys: + - ${DO_SSH_KEY_FINGERPRINT} diff --git a/test/e2e/common.go b/test/e2e/common.go index 3fd6d726a..4b9e30ed8 100644 --- a/test/e2e/common.go +++ b/test/e2e/common.go @@ -1,3 +1,4 @@ +//go:build e2e // +build e2e /* @@ -27,7 +28,7 @@ import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" - clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha4" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" "sigs.k8s.io/cluster-api/test/framework" "sigs.k8s.io/cluster-api/util" ) diff --git a/test/e2e/config/digitalocean-ci.yaml b/test/e2e/config/digitalocean-ci.yaml index b24c2b167..6b6594442 100644 --- a/test/e2e/config/digitalocean-ci.yaml +++ b/test/e2e/config/digitalocean-ci.yaml @@ -1,14 +1,14 @@ --- images: - - name: gcr.io/k8s-staging-cluster-api/capdo-manager:e2e + - name: gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:e2e loadBehavior: mustLoad providers: - name: cluster-api type: CoreProvider versions: - - name: v0.4.4 - value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v0.4.4/core-components.yaml + - name: v1.0.0 + value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.0.0/core-components.yaml type: "url" files: - sourcePath: "${PWD}/test/e2e/data/metadata/cluster-api/metadata.yaml" @@ -20,8 +20,8 @@ providers: - name: kubeadm type: BootstrapProvider versions: - - name: v0.4.4 - value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v0.4.4/bootstrap-components.yaml + - name: v1.0.0 + value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.0.0/bootstrap-components.yaml type: "url" files: - sourcePath: "${PWD}/test/e2e/data/metadata/cluster-api/metadata.yaml" @@ -33,8 +33,8 @@ providers: - name: kubeadm type: ControlPlaneProvider versions: - - name: v0.4.4 - value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v0.4.4/control-plane-components.yaml + - name: v1.0.0 + value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.0.0/control-plane-components.yaml type: "url" files: - sourcePath: "${PWD}/test/e2e/data/metadata/cluster-api/metadata.yaml" @@ -46,19 +46,18 @@ providers: - name: digitalocean type: InfrastructureProvider versions: - - name: v0.5.0 - # Use manifest from source files + - name: v1.0.0 value: "${PWD}/config/default" - files: - - sourcePath: "${PWD}/test/e2e/data/metadata/cluster-api-provider-digitalocean/metadata.yaml" replacements: - - old: gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:master - new: gcr.io/k8s-staging-cluster-api/capdo-manager:e2e + - old: gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:dev + new: gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:e2e - old: "imagePullPolicy: Always" new: "imagePullPolicy: IfNotPresent" - files: - # Add a cluster template - - sourcePath: "${PWD}/test/e2e/data/infrastructure-digitalocean/cluster-template.yaml" + files: + - sourcePath: "${PWD}/metadata.yaml" + targetName: "metadata.yaml" + - sourcePath: "${PWD}/test/e2e/data/infrastructure-digitalocean/cluster-template.yaml" + targetName: "cluster-template.yaml" variables: REDACT_LOG_SCRIPT: "${PWD}/hack/log/redact.sh" diff --git a/test/e2e/config/digitalocean-dev.yaml b/test/e2e/config/digitalocean-dev.yaml index faf6d3899..df7c4be80 100644 --- a/test/e2e/config/digitalocean-dev.yaml +++ b/test/e2e/config/digitalocean-dev.yaml @@ -1,14 +1,14 @@ --- images: - - name: gcr.io/k8s-staging-cluster-api/capdo-manager:e2e + - name: gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:e2e loadBehavior: mustLoad providers: - name: cluster-api type: CoreProvider versions: - - name: v0.4.4 - value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v0.4.4/core-components.yaml + - name: v1.0.0 + value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.0.0/core-components.yaml type: "url" files: - sourcePath: "${PWD}/test/e2e/data/metadata/cluster-api/metadata.yaml" @@ -20,8 +20,8 @@ providers: - name: kubeadm type: BootstrapProvider versions: - - name: v0.4.4 - value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v0.4.4/bootstrap-components.yaml + - name: v1.0.0 + value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.0.0/bootstrap-components.yaml type: "url" files: - sourcePath: "${PWD}/test/e2e/data/metadata/cluster-api/metadata.yaml" @@ -33,8 +33,8 @@ providers: - name: kubeadm type: ControlPlaneProvider versions: - - name: v0.4.4 - value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v0.4.4/control-plane-components.yaml + - name: v1.0.0 + value: https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.0.0/control-plane-components.yaml type: "url" files: - sourcePath: "${PWD}/test/e2e/data/metadata/cluster-api/metadata.yaml" @@ -46,19 +46,19 @@ providers: - name: digitalocean type: InfrastructureProvider versions: - - name: v0.5.0 + - name: v1.0.0 # Use manifest from source files value: ${PWD}/config/default - files: - - sourcePath: "${PWD}/test/e2e/data/metadata/cluster-api-provider-digitalocean/metadata.yaml" replacements: - - old: gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:master - new: gcr.io/k8s-staging-cluster-api/capdo-manager:e2e + - old: gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:dev + new: gcr.io/k8s-staging-cluster-api-do/cluster-api-do-controller:e2e - old: "imagePullPolicy: Always" new: "imagePullPolicy: IfNotPresent" - files: - # Add a cluster template - - sourcePath: "${PWD}/test/e2e/data/infrastructure-digitalocean/cluster-template.yaml" + files: + - sourcePath: "${PWD}/test/e2e/data/metadata/cluster-api-provider-digitalocean/metadata.yaml" + targetName: "metadata.yaml" + - sourcePath: "${PWD}/test/e2e/data/infrastructure-digitalocean/cluster-template.yaml" + targetName: "cluster-template.yaml" variables: REDACT_LOG_SCRIPT: "${PWD}/hack/log/redact.sh" diff --git a/test/e2e/conformance_test.go b/test/e2e/conformance_test.go index 6a2d8115e..bf4bc02dc 100644 --- a/test/e2e/conformance_test.go +++ b/test/e2e/conformance_test.go @@ -1,3 +1,4 @@ +//go:build e2e // +build e2e /* @@ -27,6 +28,7 @@ import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" "k8s.io/utils/pointer" capi_e2e "sigs.k8s.io/cluster-api/test/e2e" diff --git a/test/e2e/data/infrastructure-digitalocean/cluster-template.yaml b/test/e2e/data/infrastructure-digitalocean/cluster-template.yaml index ce95f3e61..270e3acea 100644 --- a/test/e2e/data/infrastructure-digitalocean/cluster-template.yaml +++ b/test/e2e/data/infrastructure-digitalocean/cluster-template.yaml @@ -1,5 +1,5 @@ --- -apiVersion: cluster.x-k8s.io/v1alpha4 +apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: name: "${CLUSTER_NAME}" @@ -11,15 +11,15 @@ spec: pods: cidrBlocks: ["192.168.0.0/16"] infrastructureRef: - apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOCluster name: "${CLUSTER_NAME}" controlPlaneRef: kind: KubeadmControlPlane - apiVersion: controlplane.cluster.x-k8s.io/v1alpha4 + apiVersion: controlplane.cluster.x-k8s.io/v1beta1 name: "${CLUSTER_NAME}-control-plane" --- -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOCluster metadata: name: "${CLUSTER_NAME}" @@ -27,7 +27,7 @@ spec: region: ${DO_REGION} --- kind: KubeadmControlPlane -apiVersion: controlplane.cluster.x-k8s.io/v1alpha4 +apiVersion: controlplane.cluster.x-k8s.io/v1beta1 metadata: name: "${CLUSTER_NAME}-control-plane" spec: @@ -35,7 +35,7 @@ spec: machineTemplate: infrastructureRef: kind: DOMachineTemplate - apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 name: "${CLUSTER_NAME}-control-plane" kubeadmConfigSpec: initConfiguration: @@ -52,7 +52,7 @@ spec: version: "${KUBERNETES_VERSION}" --- kind: DOMachineTemplate -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 metadata: name: "${CLUSTER_NAME}-control-plane" spec: @@ -63,7 +63,7 @@ spec: sshKeys: - ${DO_SSH_KEY_FINGERPRINT} --- -apiVersion: cluster.x-k8s.io/v1alpha4 +apiVersion: cluster.x-k8s.io/v1beta1 kind: MachineDeployment metadata: name: "${CLUSTER_NAME}-md-0" @@ -79,14 +79,14 @@ spec: bootstrap: configRef: name: "${CLUSTER_NAME}-md-0" - apiVersion: bootstrap.cluster.x-k8s.io/v1alpha4 + apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate infrastructureRef: name: "${CLUSTER_NAME}-md-0" - apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOMachineTemplate --- -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4 +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 kind: DOMachineTemplate metadata: name: "${CLUSTER_NAME}-md-0" @@ -98,7 +98,7 @@ spec: sshKeys: - ${DO_SSH_KEY_FINGERPRINT} --- -apiVersion: bootstrap.cluster.x-k8s.io/v1alpha4 +apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 kind: KubeadmConfigTemplate metadata: name: "${CLUSTER_NAME}-md-0" @@ -117,7 +117,7 @@ metadata: name: "${CLUSTER_NAME}-crs-cni" data: ${CNI_RESOURCES} --- -apiVersion: addons.cluster.x-k8s.io/v1alpha4 +apiVersion: addons.cluster.x-k8s.io/v1beta1 kind: ClusterResourceSet metadata: name: "${CLUSTER_NAME}-crs-cni" @@ -136,7 +136,7 @@ metadata: name: "${CLUSTER_NAME}-crs-ccm" data: ${CCM_RESOURCES} --- -apiVersion: addons.cluster.x-k8s.io/v1alpha4 +apiVersion: addons.cluster.x-k8s.io/v1beta1 kind: ClusterResourceSet metadata: name: "${CLUSTER_NAME}-crs-ccm" diff --git a/test/e2e/data/metadata/cluster-api-provider-digitalocean/metadata.yaml b/test/e2e/data/metadata/cluster-api-provider-digitalocean/metadata.yaml index 9879d24f3..0ba7b0fb9 100644 --- a/test/e2e/data/metadata/cluster-api-provider-digitalocean/metadata.yaml +++ b/test/e2e/data/metadata/cluster-api-provider-digitalocean/metadata.yaml @@ -7,3 +7,6 @@ releaseSeries: - major: 0 minor: 5 contract: v1alpha4 +- major: 1 + minor: 0 + contract: v1beta1 diff --git a/test/e2e/data/metadata/cluster-api/metadata.yaml b/test/e2e/data/metadata/cluster-api/metadata.yaml index d94edfee9..ed76b528d 100644 --- a/test/e2e/data/metadata/cluster-api/metadata.yaml +++ b/test/e2e/data/metadata/cluster-api/metadata.yaml @@ -1,12 +1,12 @@ apiVersion: clusterctl.cluster.x-k8s.io/v1alpha3 kind: Metadata releaseSeries: -- major: 0 - minor: 4 - contract: v1alpha4 -- major: 0 - minor: 3 - contract: v1alpha3 -- major: 0 - minor: 2 - contract: v1alpha2 + - major: 1 + minor: 0 + contract: v1beta1 + - major: 0 + minor: 4 + contract: v1alpha4 + - major: 0 + minor: 3 + contract: v1alpha3 diff --git a/test/e2e/suite_test.go b/test/e2e/suite_test.go index 77fa3d26a..a3e3dd5c7 100644 --- a/test/e2e/suite_test.go +++ b/test/e2e/suite_test.go @@ -1,3 +1,4 @@ +//go:build e2e // +build e2e /* @@ -35,14 +36,13 @@ import ( "github.com/onsi/ginkgo/reporters" . "github.com/onsi/gomega" - "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1alpha3" - "k8s.io/apimachinery/pkg/runtime" - capi_e2e "sigs.k8s.io/cluster-api/test/e2e" "sigs.k8s.io/cluster-api/test/framework" "sigs.k8s.io/cluster-api/test/framework/bootstrap" "sigs.k8s.io/cluster-api/test/framework/clusterctl" + + infrav1 "sigs.k8s.io/cluster-api-provider-digitalocean/api/v1beta1" ) // Test suite flags. @@ -163,7 +163,7 @@ var _ = SynchronizedAfterSuite(func() { func initScheme() *runtime.Scheme { sc := runtime.NewScheme() framework.TryAddDefaultSchemes(sc) - _ = v1alpha3.AddToScheme(sc) + Expect(infrav1.AddToScheme(sc)).To(Succeed()) return sc } diff --git a/tilt_modules/cert_manager/README.md b/tilt_modules/cert_manager/README.md new file mode 100644 index 000000000..1d1feb766 --- /dev/null +++ b/tilt_modules/cert_manager/README.md @@ -0,0 +1,26 @@ +# Cert-manager + +This extension deploys cert-manager. + +## Usage + +Basic usage + +``` +load('ext://cert_manager', 'deploy_cert_manager') + +deploy_cert_manager() +``` + +This will deploy cert-manager to your cluster and check that it actually works. + +If working with Kind, it's possible to pass `load_to_kind=True` to `deploy_cert_manager` so +all the cert-manager images will be pre-pulled to your local environment and then loaded into Kind before installing. +This speeds up your workflow if you're repeatedly destroying and recreating your kind cluster, as it doesn't +have to pull the images over the network each time. + +The full list of parameters accepted by `deploy_cert_manager` includes: +- `registry` from which images should be pulled, defaults to `quay.io/jetstack` +- `version` of cert-manager to install, defaults to `v1.3.1` +- `load_to_kind` (see above), defaults to `False` +- `kind_cluster_name`, defaults to `kind` diff --git a/tilt_modules/cert_manager/Tiltfile b/tilt_modules/cert_manager/Tiltfile new file mode 100644 index 000000000..f5d23e413 --- /dev/null +++ b/tilt_modules/cert_manager/Tiltfile @@ -0,0 +1,65 @@ +cert_manager_test_resources = """ +apiVersion: v1 +kind: Namespace +metadata: + name: cert-manager-test +--- +apiVersion: cert-manager.io/{cert_manager_api_version} +kind: Issuer +metadata: + name: test-selfsigned + namespace: cert-manager-test +spec: + selfSigned: {{}} +--- +apiVersion: cert-manager.io/{cert_manager_api_version} +kind: Certificate +metadata: + name: selfsigned-cert + namespace: cert-manager-test +spec: + dnsNames: + - example.com + secretName: selfsigned-cert-tls + issuerRef: + name: test-selfsigned +""" + +# Deploys cert manager to your environment +def deploy_cert_manager(registry="quay.io/jetstack", version="v1.3.1", load_to_kind=False, kind_cluster_name="kind"): + silent=True + if version.startswith('v0'): + cert_manager_test_resources_versioned = cert_manager_test_resources.format(cert_manager_api_version='v1alpha2') + else: + cert_manager_test_resources_versioned = cert_manager_test_resources.format(cert_manager_api_version='v1') + + if load_to_kind == True: + print("Loading images to kind") + # Prepull all the cert-manager images to your local environment and then load them directly into kind. This speeds up + # setup if you're repeatedly destroying and recreating your kind cluster, as it doesn't have to pull the images over + # the network each time. + images = ["cert-manager-controller", "cert-manager-cainjector", "cert-manager-webhook"] + for image in images: + local("docker pull {}/{}:{}".format(registry, image, version), quiet=silent, echo_off=silent) + local("kind load docker-image --name {} {}/{}:{}".format(kind_cluster_name, registry, image, version), quiet=silent, echo_off=silent) + + # apply the cert-manager manifest + # NOTE! + # Applying the same manifest twice to same cluster kubectl get stuck with older versions of kubernetes/cert-manager. + # https://github.com/jetstack/cert-manager/issues/3121 + print("Installing cert-manager") + local("kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/{}/cert-manager.yaml".format(version), quiet=silent, echo_off=silent) + + # verifies cert-manager is properly working (https://cert-manager.io/docs/installation/kubernetes/#verifying-the-installation) + # 1. wait for the cert-manager to be running + print("Waiting for cert-manager to start") + local("kubectl wait --for=condition=Available --timeout=300s -n cert-manager deployment/cert-manager", quiet=silent, echo_off=silent) + local("kubectl wait --for=condition=Available --timeout=300s -n cert-manager deployment/cert-manager-cainjector", quiet=silent, echo_off=silent) + local("kubectl wait --for=condition=Available --timeout=300s -n cert-manager deployment/cert-manager-webhook", quiet=silent, echo_off=silent) + + # 2. create a test certificate + print("Testing cert-manager") + # The webhook may refuse connections initially (despite the deployment being Available), so try several times. + local("for i in 1 2 3 4 5 6; do (kubectl apply -f - <