From f2c5a3b24c505b0e58c0ab2c006d2e190eea6e90 Mon Sep 17 00:00:00 2001 From: ialidzhikov Date: Sat, 23 Jan 2021 16:32:31 +0200 Subject: [PATCH] Vendor k/k@0.19 and controller-runtime@v0.7.1 Signed-off-by: ialidzhikov --- .test-defs/infrastructure-test.yaml | 2 +- .test-defs/provider-azure.yaml | 2 +- Dockerfile | 2 +- .../templates/rbac.yaml | 11 +- .../app/app.go | 2 +- cmd/gardener-extension-provider-azure/main.go | 4 +- .../app/app.go | 2 +- .../main.go | 4 +- example/controller-registration.yaml | 2 +- go.mod | 53 +- go.sum | 190 +- pkg/controller/healthcheck/add.go | 5 +- pkg/controller/worker/machines.go | 6 +- pkg/validator/shoot_handler.go | 8 +- pkg/webhook/controlplane/add.go | 6 +- pkg/webhook/controlplaneexposure/add.go | 8 +- pkg/webhook/network/add.go | 8 +- .../infrastructure/infrastructure_test.go | 4 +- test/tm/generator.go | 4 +- .../github.com/cespare/xxhash/v2/.travis.yml | 8 + .../cespare/xxhash/v2/LICENSE.txt} | 4 +- vendor/github.com/cespare/xxhash/v2/README.md | 67 + vendor/github.com/cespare/xxhash/v2/go.mod | 3 + vendor/github.com/cespare/xxhash/v2/go.sum | 0 vendor/github.com/cespare/xxhash/v2/xxhash.go | 236 + .../cespare/xxhash/v2/xxhash_amd64.go | 13 + .../cespare/xxhash/v2/xxhash_amd64.s | 215 + .../cespare/xxhash/v2/xxhash_other.go | 76 + .../cespare/xxhash/v2/xxhash_safe.go | 15 + .../cespare/xxhash/v2/xxhash_unsafe.go | 46 + .../pkg/controller/backupbucket/controller.go | 5 +- .../pkg/controller/backupbucket/mapper.go | 18 +- .../pkg/controller/backupbucket/reconciler.go | 37 +- .../pkg/controller/backupentry/controller.go | 18 +- .../pkg/controller/backupentry/mapper.go | 30 +- .../pkg/controller/backupentry/reconciler.go | 55 +- .../pkg/controller/controlplane/controller.go | 15 +- .../controlplane/genericactuator/actuator.go | 4 +- .../pkg/controller/controlplane/mapper.go | 11 +- .../pkg/controller/controlplane/reconciler.go | 47 +- .../pkg/controller/csimigration/reconciler.go | 13 +- .../pkg/controller/healthcheck/actuator.go | 13 +- .../pkg/controller/healthcheck/controller.go | 7 +- .../pkg/controller/healthcheck/reconciler.go | 36 +- .../controller/infrastructure/controller.go | 24 +- .../pkg/controller/infrastructure/mapper.go | 11 +- .../controller/infrastructure/reconciler.go | 95 +- .../gardener/extensions/pkg/controller/log.go | 39 +- .../extensions/pkg/controller/reconciler.go | 35 +- .../extensions/pkg/controller/shoot.go | 2 +- .../extensions/pkg/controller/utils.go | 60 +- .../pkg/controller/worker/controller.go | 33 +- .../worker/genericactuator/actuator.go | 20 +- .../worker/genericactuator/actuator_delete.go | 35 +- .../genericactuator/actuator_restore.go | 3 +- .../worker/genericactuator/interface.go | 10 +- .../pkg/controller/worker/mapper.go | 77 +- .../pkg/controller/worker/reconciler.go | 96 +- .../pkg/controller/worker/state_reconciler.go | 17 +- .../gardener/extensions/pkg/event/event.go | 43 - .../extensions/pkg/handler/enqueue_mapped.go | 116 + .../extensions/pkg/handler/enqueued_mapped.go | 179 - .../gardener/extensions/pkg/handler/mapper.go | 41 +- .../extensions/pkg/predicate/mapper.go | 12 +- .../extensions/pkg/predicate/predicate.go | 26 +- .../extensions/pkg/terraformer/config.go | 21 +- .../extensions/pkg/terraformer/errors.go | 18 +- .../extensions/pkg/terraformer/terraformer.go | 236 +- .../extensions/pkg/terraformer/types.go | 12 +- .../extensions/pkg/terraformer/waiter.go | 22 +- .../extensions/pkg/webhook/context/context.go | 5 +- .../pkg/webhook/controlplane/controlplane.go | 10 +- .../controlplane/genericmutator/mutator.go | 38 +- .../extensions/pkg/webhook/handler.go | 41 +- .../pkg/webhook/handler_shootclient.go | 122 +- .../extensions/pkg/webhook/mutator.go | 9 +- .../extensions/pkg/webhook/network/mutator.go | 17 +- .../extensions/pkg/webhook/network/network.go | 14 +- .../extensions/pkg/webhook/registration.go | 10 +- .../extensions/pkg/webhook/remote_addr.go | 45 + .../extensions/pkg/webhook/shoot/shoot.go | 15 +- .../extensions/pkg/webhook/validator.go | 6 +- .../extensions/pkg/webhook/webhook.go | 8 +- .../gardener/gardener/hack/update-codegen.sh | 18 + .../gardener/pkg/api/extensions/utils.go | 31 +- .../gardener/pkg/apis/core/types_seed.go | 4 +- .../gardener/pkg/apis/core/types_shoot.go | 2 +- .../pkg/apis/core/v1alpha1/generated.proto | 6 +- .../pkg/apis/core/v1alpha1/types_seed.go | 4 +- .../pkg/apis/core/v1alpha1/types_shoot.go | 2 +- .../core/v1beta1/constants/types_constants.go | 2 + .../pkg/apis/core/v1beta1/generated.proto | 6 +- .../pkg/apis/core/v1beta1/types_seed.go | 4 +- .../pkg/apis/core/v1beta1/types_shoot.go | 2 +- .../gardener/pkg/apis/core/validation/seed.go | 13 + .../extensions/v1alpha1/types_backupbucket.go | 9 +- .../extensions/v1alpha1/types_backupentry.go | 12 +- .../apis/extensions/v1alpha1/types_cluster.go | 9 + .../v1alpha1/types_containerruntime.go | 10 +- .../extensions/v1alpha1/types_controlplane.go | 11 +- .../extensions/v1alpha1/types_defaults.go | 7 +- .../extensions/v1alpha1/types_extension.go | 8 +- .../v1alpha1/types_infrastructure.go | 9 +- .../apis/extensions/v1alpha1/types_network.go | 18 +- .../v1alpha1/types_operatingsystemconfig.go | 9 +- .../apis/extensions/v1alpha1/types_worker.go | 13 +- .../listers/core/v1alpha1/backupbucket.go | 3 + .../core/listers/core/v1alpha1/backupentry.go | 5 + .../listers/core/v1alpha1/cloudprofile.go | 3 + .../core/v1alpha1/controllerinstallation.go | 3 + .../core/v1alpha1/controllerregistration.go | 3 + .../core/listers/core/v1alpha1/plant.go | 5 + .../core/listers/core/v1alpha1/project.go | 3 + .../core/listers/core/v1alpha1/quota.go | 5 + .../listers/core/v1alpha1/secretbinding.go | 5 + .../client/core/listers/core/v1alpha1/seed.go | 3 + .../core/listers/core/v1alpha1/shoot.go | 5 + .../core/listers/core/v1alpha1/shootstate.go | 5 + .../core/listers/core/v1beta1/backupbucket.go | 3 + .../core/listers/core/v1beta1/backupentry.go | 5 + .../core/listers/core/v1beta1/cloudprofile.go | 3 + .../core/v1beta1/controllerinstallation.go | 3 + .../core/v1beta1/controllerregistration.go | 3 + .../client/core/listers/core/v1beta1/plant.go | 5 + .../core/listers/core/v1beta1/project.go | 3 + .../client/core/listers/core/v1beta1/quota.go | 5 + .../listers/core/v1beta1/secretbinding.go | 5 + .../client/core/listers/core/v1beta1/seed.go | 3 + .../client/core/listers/core/v1beta1/shoot.go | 5 + .../gardener/pkg/client/kubernetes/applier.go | 6 +- .../gardener/pkg/client/kubernetes/client.go | 16 +- .../clientmap/internal/generic_clientmap.go | 8 +- .../pkg/client/kubernetes/clientset.go | 9 +- .../gardener/pkg/client/kubernetes/options.go | 39 +- .../pkg/client/kubernetes/runtime_client.go | 29 +- .../gardener/pkg/client/kubernetes/scaling.go | 3 +- .../gardener/pkg/client/kubernetes/types.go | 4 +- .../pkg/client/kubernetes/utils/client.go | 186 - .../pkg/controllerutils/associations.go | 2 +- .../pkg/controllerutils/finalizers.go | 32 +- .../pkg/controllerutils/operations.go | 3 +- .../gardener/pkg/controllerutils/worker.go | 70 +- .../gardenlet/apis/config/helper/helpers.go | 12 + .../pkg/gardenlet/apis/config/types.go | 31 +- .../apis/config/zz_generated.deepcopy.go | 39 +- .../mock/controller-runtime/client/mocks.go | 51 +- .../mock/gardener/client/kubernetes/mocks.go | 5 +- .../gardener/pkg/operation/botanist/addons.go | 13 +- .../pkg/operation/botanist/backupentry.go | 63 + .../botanist/backupentry/backupentry.go | 165 + .../pkg/operation/botanist/botanist.go | 2 + .../operation/botanist/constraints_check.go | 180 - .../pkg/operation/botanist/controlplane.go | 86 +- .../clusterautoscaler/cluster_autoscaler.go | 3 +- .../botanist/controlplane/etcd/bootstrap.go | 2 +- .../botanist/controlplane/etcd/etcd.go | 4 +- .../botanist/controlplane/etcd/logging.go | 2 +- .../kube_controller_manager.go | 3 +- .../kubescheduler/kube_scheduler.go | 3 +- .../extensions/backupentry/backupentry.go | 219 + .../containerruntime/containerruntime.go | 3 +- .../extensions/controlplane/controlplane.go | 2 +- .../extensions/extension/extension.go | 3 +- .../infrastructure/infrastructure.go | 2 +- .../botanist/extensions/network/network.go | 2 +- .../botanist/extensions/worker/worker.go | 2 +- .../operation/botanist/garbage_collection.go | 127 - .../pkg/operation/botanist/health_check.go | 956 --- .../botanist/kubecontrollermanager.go | 7 + .../pkg/operation/botanist/logging.go | 12 +- .../operation/botanist/managedresources.go | 25 +- .../operation/botanist/matchers/matcher.go | 233 - .../botanist/matchers/rule_matcher.go | 121 - .../pkg/operation/botanist/migration.go | 41 +- .../pkg/operation/botanist/monitoring.go | 20 +- .../pkg/operation/botanist/namespaces.go | 23 + .../botanist/operatingsystemconfig.go | 15 +- .../pkg/operation/botanist/secrets.go | 11 +- .../seedadmission/logging.go | 2 +- .../seedadmission/seedadmission.go | 2 +- .../metricsserver/metrics_server.go | 2 +- .../gardener/pkg/operation/botanist/waiter.go | 50 - .../gardener/pkg/operation/botanist/worker.go | 114 + .../pkg/operation/common/extensions.go | 14 +- .../gardener/pkg/operation/common/types.go | 8 + .../gardener/pkg/operation/common/utils.go | 102 +- .../etcdencryption/etcdencryptioninfodata.go | 2 +- .../gardener/pkg/operation/operation.go | 80 +- .../seed/scheduler/gardener_kube_scheduler.go | 89 +- .../gardener_kube_scheduler_bootstrap.go | 19 +- .../pkg/operation/seed/scheduler/types.go | 5 + .../gardener/pkg/operation/seed/seed.go | 31 +- .../gardener/pkg/operation/shoot/shoot.go | 24 +- .../gardener/pkg/operation/shoot/status.go | 10 - .../gardener/pkg/operation/shoot/types.go | 5 +- .../scheduler/controller/shoot/scheduler.go | 4 +- .../pkg/seedadmission/extension_crds.go | 82 +- .../pkg/seedadmission/pod_scheduler_name.go | 50 + .../gardener/pkg/seedadmission/utils.go | 23 +- .../gardener/pkg/utils/chart/chart.go | 13 +- .../pkg/utils/kubernetes/client/client.go | 168 +- .../pkg/utils/kubernetes/client/types.go | 4 +- .../pkg/utils/kubernetes/health/health.go | 34 +- .../pkg/utils/kubernetes/kubernetes.go | 27 +- .../gardener/pkg/utils/kubernetes/node.go | 59 - .../gardener/pkg/utils/kubernetes/object.go | 13 +- .../gardener/pkg/utils/kubernetes/patch.go | 16 +- .../gardener/pkg/utils/kubernetes/shoot.go | 24 - .../gardener/pkg/utils/kubernetes/update.go | 14 +- .../managedresources/managedresources.go | 1 + .../gardener/pkg/utils/version/version.go | 2 +- .../gardener/test/framework/gardener_utils.go | 7 +- .../gardener/test/framework/k8s_utils.go | 12 +- .../test/framework/rootpod_executor.go | 6 +- .../test/framework/test_description.go | 2 +- .../kube-scheduler/v18/v1alpha2/types.go | 2 +- .../v18/v1alpha2/zz_generated.deepcopy.go | 2 +- vendor/github.com/go-logr/logr/README.md | 161 +- vendor/github.com/go-logr/logr/discard.go | 35 + vendor/github.com/go-logr/logr/go.mod | 3 + vendor/github.com/go-logr/logr/logr.go | 207 +- vendor/github.com/go-logr/zapr/README.md | 4 +- vendor/github.com/go-logr/zapr/go.mod | 10 + vendor/github.com/go-logr/zapr/zapr.go | 106 +- .../github.com/google/go-cmp/cmp/compare.go | 79 +- .../google/go-cmp/cmp/export_panic.go | 2 +- .../google/go-cmp/cmp/export_unsafe.go | 20 +- .../google/go-cmp/cmp/internal/diff/diff.go | 22 +- .../google/go-cmp/cmp/internal/value/name.go | 157 + .../cmp/internal/value/pointer_purego.go | 10 + .../cmp/internal/value/pointer_unsafe.go | 10 + .../github.com/google/go-cmp/cmp/options.go | 5 +- vendor/github.com/google/go-cmp/cmp/path.go | 7 +- vendor/github.com/google/go-cmp/cmp/report.go | 5 +- .../google/go-cmp/cmp/report_compare.go | 201 +- .../google/go-cmp/cmp/report_references.go | 264 + .../google/go-cmp/cmp/report_reflect.go | 285 +- .../google/go-cmp/cmp/report_slices.go | 131 +- .../google/go-cmp/cmp/report_text.go | 86 +- .../gnostic/OpenAPIv2/OpenAPIv2.pb.go | 5226 ------------ .../googleapis/gnostic/OpenAPIv2/README.md | 16 - .../googleapis/gnostic/compiler/README.md | 3 +- .../googleapis/gnostic/compiler/context.go | 2 +- .../googleapis/gnostic/compiler/error.go | 2 +- .../gnostic/compiler/extension-handler.go | 101 - .../googleapis/gnostic/compiler/extensions.go | 85 + .../googleapis/gnostic/compiler/helpers.go | 336 +- .../googleapis/gnostic/compiler/main.go | 2 +- .../googleapis/gnostic/compiler/reader.go | 133 +- .../googleapis/gnostic/extensions/README.md | 12 +- .../gnostic/extensions/extension.pb.go | 529 +- .../gnostic/extensions/extension.proto | 29 +- .../gnostic/extensions/extensions.go | 68 +- .../googleapis/gnostic/jsonschema/README.md | 4 + .../googleapis/gnostic/jsonschema/base.go | 84 + .../googleapis/gnostic/jsonschema/display.go | 229 + .../googleapis/gnostic/jsonschema/models.go | 228 + .../gnostic/jsonschema/operations.go | 394 + .../googleapis/gnostic/jsonschema/reader.go | 442 + .../googleapis/gnostic/jsonschema/schema.json | 150 + .../googleapis/gnostic/jsonschema/writer.go | 369 + .../{OpenAPIv2 => openapiv2}/OpenAPIv2.go | 3306 ++++---- .../gnostic/openapiv2/OpenAPIv2.pb.go | 7347 +++++++++++++++++ .../{OpenAPIv2 => openapiv2}/OpenAPIv2.proto | 7 +- .../googleapis/gnostic/openapiv2/README.md | 14 + .../googleapis/gnostic/openapiv2/document.go | 26 + .../{OpenAPIv2 => openapiv2}/openapi-2.0.json | 4 +- vendor/github.com/imdario/mergo/README.md | 50 +- vendor/github.com/imdario/mergo/doc.go | 141 +- vendor/github.com/imdario/mergo/go.mod | 5 + vendor/github.com/imdario/mergo/go.sum | 4 + vendor/github.com/imdario/mergo/map.go | 10 +- vendor/github.com/imdario/mergo/merge.go | 274 +- vendor/github.com/imdario/mergo/mergo.go | 21 +- vendor/github.com/onsi/ginkgo/CHANGELOG.md | 5 + vendor/github.com/onsi/ginkgo/README.md | 5 +- .../github.com/onsi/ginkgo/config/config.go | 2 +- .../onsi/ginkgo/ginkgo/nodot/nodot.go | 4 +- vendor/github.com/onsi/gomega/CHANGELOG.md | 5 + vendor/github.com/onsi/gomega/gomega_dsl.go | 35 +- .../prometheus/client_golang/api/client.go | 4 +- .../client_golang/api/prometheus/v1/api.go | 674 +- .../client_golang/prometheus/build_info.go | 29 + .../prometheus/build_info_pre_1.12.go | 22 + .../client_golang/prometheus/collector.go | 2 +- .../client_golang/prometheus/counter.go | 50 +- .../client_golang/prometheus/desc.go | 22 +- .../client_golang/prometheus/doc.go | 40 +- .../client_golang/prometheus/gauge.go | 11 +- .../client_golang/prometheus/go_collector.go | 123 +- .../client_golang/prometheus/histogram.go | 225 +- .../client_golang/prometheus/http.go | 504 -- .../client_golang/prometheus/metric.go | 4 +- .../client_golang/prometheus/observer.go | 12 + .../prometheus/process_collector.go | 61 +- .../prometheus/process_collector_other.go | 65 + .../prometheus/process_collector_windows.go | 116 + .../prometheus/promhttp/delegator.go | 179 +- .../prometheus/promhttp/delegator_1_8.go | 181 - .../prometheus/promhttp/delegator_pre_1_8.go | 44 - .../client_golang/prometheus/promhttp/http.go | 128 +- .../prometheus/promhttp/instrument_client.go | 122 + .../promhttp/instrument_client_1_8.go | 144 - .../client_golang/prometheus/registry.go | 49 +- .../client_golang/prometheus/summary.go | 153 +- .../client_golang/prometheus/value.go | 51 +- .../client_golang/prometheus/vec.go | 14 +- .../client_golang/prometheus/wrap.go | 35 +- .../prometheus/common/expfmt/encode.go | 124 +- .../prometheus/common/expfmt/expfmt.go | 11 +- .../common/expfmt/openmetrics_create.go | 527 ++ .../prometheus/common/expfmt/text_create.go | 21 +- .../prometheus/common/expfmt/text_parse.go | 13 +- .../prometheus/common/model/time.go | 4 + .../prometheus/procfs/Makefile.common | 11 + .../github.com/prometheus/procfs/cpuinfo.go | 265 +- .../prometheus/procfs/cpuinfo_arm.go | 18 + .../prometheus/procfs/cpuinfo_arm64.go | 19 + .../prometheus/procfs/cpuinfo_default.go | 19 + .../prometheus/procfs/cpuinfo_mips.go | 18 + .../prometheus/procfs/cpuinfo_mips64.go | 18 + .../prometheus/procfs/cpuinfo_mips64le.go | 18 + .../prometheus/procfs/cpuinfo_mipsle.go | 18 + .../prometheus/procfs/cpuinfo_ppc64.go | 18 + .../prometheus/procfs/cpuinfo_ppc64le.go | 18 + .../prometheus/procfs/cpuinfo_s390x.go | 18 + .../prometheus/procfs/fixtures.ttar | 737 +- .../github.com/prometheus/procfs/fscache.go | 422 + .../prometheus/procfs/internal/util/parse.go | 9 + .../prometheus/procfs/kernel_random.go | 62 + vendor/github.com/prometheus/procfs/mdstat.go | 2 +- .../github.com/prometheus/procfs/mountinfo.go | 8 +- .../prometheus/procfs/mountstats.go | 20 +- .../prometheus/procfs/net_conntrackstat.go | 2 +- vendor/github.com/prometheus/procfs/proc.go | 21 + .../prometheus/procfs/proc_cgroup.go | 98 + .../prometheus/procfs/proc_fdinfo.go | 2 +- .../github.com/prometheus/procfs/proc_maps.go | 3 +- .../prometheus/procfs/proc_smaps.go | 165 + vendor/github.com/spf13/cobra/.gitignore | 2 +- vendor/github.com/spf13/cobra/.travis.yml | 25 +- vendor/github.com/spf13/cobra/Makefile | 36 + vendor/github.com/spf13/cobra/README.md | 2 +- vendor/github.com/spf13/cobra/args.go | 10 +- .../spf13/cobra/bash_completions.go | 89 +- .../spf13/cobra/bash_completions.md | 239 +- vendor/github.com/spf13/cobra/command.go | 31 +- .../spf13/cobra/custom_completions.go | 384 + .../spf13/cobra/fish_completions.go | 172 + .../spf13/cobra/fish_completions.md | 7 + vendor/go.uber.org/atomic/CHANGELOG.md | 5 + vendor/go.uber.org/atomic/tools.go | 28 - vendor/go.uber.org/multierr/CHANGELOG.md | 6 + vendor/go.uber.org/multierr/error.go | 2 +- vendor/go.uber.org/multierr/go.mod | 2 +- vendor/go.uber.org/multierr/go.sum | 4 +- vendor/go.uber.org/multierr/tools.go | 30 - vendor/go.uber.org/tools/LICENSE | 19 - .../tools/update-license/.gitignore | 1 - .../tools/update-license/README.md | 24 - .../tools/update-license/licenses.go | 56 - .../go.uber.org/tools/update-license/main.go | 228 - vendor/go.uber.org/zap/.travis.yml | 2 +- vendor/go.uber.org/zap/CHANGELOG.md | 49 + vendor/go.uber.org/zap/Makefile | 8 +- vendor/go.uber.org/zap/buffer/buffer.go | 10 +- vendor/go.uber.org/zap/config.go | 29 +- vendor/go.uber.org/zap/encoder.go | 4 + vendor/go.uber.org/zap/field.go | 8 + vendor/go.uber.org/zap/go.mod | 5 +- vendor/go.uber.org/zap/go.sum | 8 +- vendor/go.uber.org/zap/logger.go | 6 + vendor/go.uber.org/zap/options.go | 30 +- vendor/go.uber.org/zap/tools.go | 28 - vendor/go.uber.org/zap/zapcore/encoder.go | 36 +- vendor/go.uber.org/zap/zapcore/error.go | 5 - vendor/go.uber.org/zap/zapcore/field.go | 7 +- .../go.uber.org/zap/zapcore/increase_level.go | 66 + .../go.uber.org/zap/zapcore/json_encoder.go | 7 + vendor/go.uber.org/zap/zapcore/sampler.go | 94 +- .../x/crypto/chacha20/chacha_arm64.go | 3 +- .../x/crypto/chacha20/chacha_arm64.s | 3 +- .../x/crypto/chacha20/chacha_generic.go | 140 +- .../x/crypto/chacha20/chacha_noasm.go | 2 +- .../x/crypto/chacha20/chacha_ppc64le.go | 2 +- .../x/crypto/chacha20/chacha_ppc64le.s | 2 +- .../x/crypto/chacha20/chacha_s390x.go | 2 +- .../x/crypto/chacha20/chacha_s390x.s | 2 +- vendor/golang.org/x/crypto/chacha20/xor.go | 17 +- .../x/crypto/openpgp/packet/packet.go | 67 +- .../golang.org/x/crypto/poly1305/mac_noasm.go | 4 +- .../golang.org/x/crypto/poly1305/poly1305.go | 26 +- .../golang.org/x/crypto/poly1305/sum_amd64.go | 13 +- .../golang.org/x/crypto/poly1305/sum_amd64.s | 2 +- .../x/crypto/poly1305/sum_generic.go | 21 +- .../golang.org/x/crypto/poly1305/sum_noasm.go | 13 - .../x/crypto/poly1305/sum_ppc64le.go | 13 +- .../x/crypto/poly1305/sum_ppc64le.s | 2 +- .../golang.org/x/crypto/poly1305/sum_s390x.go | 72 +- .../golang.org/x/crypto/poly1305/sum_s390x.s | 667 +- .../x/crypto/poly1305/sum_vmsl_s390x.s | 909 -- vendor/golang.org/x/crypto/ssh/certs.go | 4 +- vendor/golang.org/x/crypto/ssh/cipher.go | 2 +- vendor/golang.org/x/crypto/ssh/client_auth.go | 22 +- vendor/golang.org/x/crypto/ssh/kex.go | 4 +- vendor/golang.org/x/crypto/ssh/keys.go | 18 +- vendor/golang.org/x/crypto/ssh/mux.go | 23 +- .../x/crypto/ssh/terminal/terminal.go | 8 + vendor/golang.org/x/net/html/const.go | 2 +- vendor/golang.org/x/net/html/foreign.go | 119 +- vendor/golang.org/x/net/html/parse.go | 15 +- vendor/golang.org/x/net/html/render.go | 2 +- .../golang.org/x/net/http/httpproxy/proxy.go | 6 +- vendor/golang.org/x/net/http2/server.go | 12 +- vendor/golang.org/x/net/http2/transport.go | 102 +- .../idna/{tables12.00.go => tables12.0.0.go} | 2 +- vendor/golang.org/x/net/idna/tables13.0.0.go | 4839 +++++++++++ vendor/golang.org/x/sys/cpu/byteorder.go | 11 +- vendor/golang.org/x/sys/cpu/cpu.go | 156 +- vendor/golang.org/x/sys/cpu/cpu_aix.go | 4 +- vendor/golang.org/x/sys/cpu/cpu_arm.go | 33 + vendor/golang.org/x/sys/cpu/cpu_arm64.go | 64 +- vendor/golang.org/x/sys/cpu/cpu_linux.go | 2 +- .../golang.org/x/sys/cpu/cpu_linux_mips64x.go | 1 + .../golang.org/x/sys/cpu/cpu_linux_ppc64x.go | 2 - .../golang.org/x/sys/cpu/cpu_linux_s390x.go | 123 +- vendor/golang.org/x/sys/cpu/cpu_mips64x.go | 6 + vendor/golang.org/x/sys/cpu/cpu_mipsx.go | 2 + .../golang.org/x/sys/cpu/cpu_netbsd_arm64.go | 173 + vendor/golang.org/x/sys/cpu/cpu_other_arm.go | 9 + .../golang.org/x/sys/cpu/cpu_other_arm64.go | 3 +- .../golang.org/x/sys/cpu/cpu_other_mips64x.go | 12 + vendor/golang.org/x/sys/cpu/cpu_ppc64x.go | 16 + vendor/golang.org/x/sys/cpu/cpu_riscv64.go | 2 + vendor/golang.org/x/sys/cpu/cpu_s390x.go | 172 + vendor/golang.org/x/sys/cpu/cpu_wasm.go | 4 + vendor/golang.org/x/sys/cpu/cpu_x86.go | 82 +- vendor/golang.org/x/sys/cpu/cpu_zos.go | 10 + vendor/golang.org/x/sys/cpu/cpu_zos_s390x.go | 25 + .../x/sys/unix/asm_openbsd_mips64.s | 29 + vendor/golang.org/x/sys/unix/fcntl_darwin.go | 6 + .../x/sys/unix/fcntl_linux_32bit.go | 4 +- vendor/golang.org/x/sys/unix/gccgo.go | 2 - vendor/golang.org/x/sys/unix/gccgo_c.c | 6 + vendor/golang.org/x/sys/unix/ioctl.go | 9 + vendor/golang.org/x/sys/unix/mkall.sh | 15 +- vendor/golang.org/x/sys/unix/mkerrors.sh | 24 +- .../x/sys/unix/sockcmsg_unix_other.go | 6 +- vendor/golang.org/x/sys/unix/syscall.go | 43 +- vendor/golang.org/x/sys/unix/syscall_aix.go | 16 + vendor/golang.org/x/sys/unix/syscall_bsd.go | 36 +- .../x/sys/unix/syscall_darwin.1_12.go | 4 +- .../golang.org/x/sys/unix/syscall_darwin.go | 141 +- .../x/sys/unix/syscall_darwin_386.1_11.go | 9 - .../x/sys/unix/syscall_darwin_386.go | 11 +- .../x/sys/unix/syscall_darwin_amd64.1_11.go | 9 - .../x/sys/unix/syscall_darwin_amd64.go | 11 +- .../x/sys/unix/syscall_darwin_arm.go | 8 +- .../x/sys/unix/syscall_darwin_arm64.1_11.go | 11 - .../x/sys/unix/syscall_darwin_arm64.go | 13 +- .../x/sys/unix/syscall_dragonfly.go | 19 +- .../golang.org/x/sys/unix/syscall_freebsd.go | 19 +- .../golang.org/x/sys/unix/syscall_illumos.go | 41 +- vendor/golang.org/x/sys/unix/syscall_linux.go | 170 +- .../x/sys/unix/syscall_linux_386.go | 3 - .../x/sys/unix/syscall_linux_arm.go | 5 - .../x/sys/unix/syscall_linux_gc_arm.go | 13 + .../golang.org/x/sys/unix/syscall_netbsd.go | 19 +- .../golang.org/x/sys/unix/syscall_openbsd.go | 19 +- .../x/sys/unix/syscall_openbsd_mips64.go | 35 + .../golang.org/x/sys/unix/syscall_solaris.go | 7 +- .../x/sys/unix/zerrors_darwin_386.go | 4 + .../x/sys/unix/zerrors_darwin_amd64.go | 4 + .../x/sys/unix/zerrors_darwin_arm.go | 4 + .../x/sys/unix/zerrors_darwin_arm64.go | 4 + .../x/sys/unix/zerrors_dragonfly_amd64.go | 138 +- .../x/sys/unix/zerrors_freebsd_386.go | 6 + .../x/sys/unix/zerrors_freebsd_amd64.go | 6 + .../x/sys/unix/zerrors_freebsd_arm.go | 6 + .../x/sys/unix/zerrors_freebsd_arm64.go | 6 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 300 +- .../x/sys/unix/zerrors_linux_386.go | 4 + .../x/sys/unix/zerrors_linux_amd64.go | 4 + .../x/sys/unix/zerrors_linux_arm.go | 4 + .../x/sys/unix/zerrors_linux_arm64.go | 5 + .../x/sys/unix/zerrors_linux_mips.go | 4 + .../x/sys/unix/zerrors_linux_mips64.go | 4 + .../x/sys/unix/zerrors_linux_mips64le.go | 4 + .../x/sys/unix/zerrors_linux_mipsle.go | 4 + .../x/sys/unix/zerrors_linux_ppc64.go | 4 + .../x/sys/unix/zerrors_linux_ppc64le.go | 4 + .../x/sys/unix/zerrors_linux_riscv64.go | 4 + .../x/sys/unix/zerrors_linux_s390x.go | 4 + .../x/sys/unix/zerrors_linux_sparc64.go | 4 + .../x/sys/unix/zerrors_netbsd_386.go | 6 + .../x/sys/unix/zerrors_netbsd_amd64.go | 6 + .../x/sys/unix/zerrors_netbsd_arm.go | 6 + .../x/sys/unix/zerrors_netbsd_arm64.go | 6 + .../x/sys/unix/zerrors_openbsd_386.go | 7 + .../x/sys/unix/zerrors_openbsd_amd64.go | 7 + .../x/sys/unix/zerrors_openbsd_arm.go | 7 + .../x/sys/unix/zerrors_openbsd_arm64.go | 7 + .../x/sys/unix/zerrors_openbsd_mips64.go | 1862 +++++ .../x/sys/unix/zerrors_solaris_amd64.go | 22 +- .../x/sys/unix/zsyscall_darwin_386.1_11.go | 1809 ---- .../x/sys/unix/zsyscall_darwin_386.go | 137 +- .../x/sys/unix/zsyscall_darwin_386.s | 18 +- .../x/sys/unix/zsyscall_darwin_amd64.1_11.go | 1809 ---- .../x/sys/unix/zsyscall_darwin_amd64.go | 137 +- .../x/sys/unix/zsyscall_darwin_amd64.s | 18 +- .../x/sys/unix/zsyscall_darwin_arm.1_11.go | 1782 ---- .../x/sys/unix/zsyscall_darwin_arm.go | 107 +- .../x/sys/unix/zsyscall_darwin_arm.s | 14 +- .../x/sys/unix/zsyscall_darwin_arm64.go | 122 +- .../x/sys/unix/zsyscall_darwin_arm64.s | 16 +- .../x/sys/unix/zsyscall_dragonfly_amd64.go | 32 +- .../x/sys/unix/zsyscall_illumos_amd64.go | 29 +- .../golang.org/x/sys/unix/zsyscall_linux.go | 77 + ...m64.1_11.go => zsyscall_openbsd_mips64.go} | 496 +- .../x/sys/unix/zsysctl_openbsd_mips64.go | 279 + .../x/sys/unix/zsysnum_darwin_386.go | 1 + .../x/sys/unix/zsysnum_darwin_amd64.go | 1 + .../x/sys/unix/zsysnum_darwin_arm.go | 1 + .../x/sys/unix/zsysnum_darwin_arm64.go | 1 + .../x/sys/unix/zsysnum_dragonfly_amd64.go | 255 +- .../x/sys/unix/zsysnum_linux_386.go | 2 + .../x/sys/unix/zsysnum_linux_amd64.go | 2 + .../x/sys/unix/zsysnum_linux_arm.go | 2 + .../x/sys/unix/zsysnum_linux_arm64.go | 2 + .../x/sys/unix/zsysnum_linux_mips.go | 2 + .../x/sys/unix/zsysnum_linux_mips64.go | 2 + .../x/sys/unix/zsysnum_linux_mips64le.go | 2 + .../x/sys/unix/zsysnum_linux_mipsle.go | 2 + .../x/sys/unix/zsysnum_linux_ppc64.go | 2 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 2 + .../x/sys/unix/zsysnum_linux_riscv64.go | 2 + .../x/sys/unix/zsysnum_linux_s390x.go | 2 + .../x/sys/unix/zsysnum_linux_sparc64.go | 2 + .../x/sys/unix/zsysnum_openbsd_mips64.go | 220 + .../x/sys/unix/ztypes_darwin_386.go | 32 +- .../x/sys/unix/ztypes_darwin_amd64.go | 43 +- .../x/sys/unix/ztypes_darwin_arm.go | 39 +- .../x/sys/unix/ztypes_darwin_arm64.go | 43 +- .../x/sys/unix/ztypes_dragonfly_amd64.go | 46 +- .../x/sys/unix/ztypes_freebsd_arm.go | 12 +- vendor/golang.org/x/sys/unix/ztypes_linux.go | 1516 +++- .../golang.org/x/sys/unix/ztypes_linux_386.go | 20 + .../x/sys/unix/ztypes_linux_amd64.go | 23 + .../golang.org/x/sys/unix/ztypes_linux_arm.go | 23 + .../x/sys/unix/ztypes_linux_arm64.go | 23 + .../x/sys/unix/ztypes_linux_mips.go | 23 + .../x/sys/unix/ztypes_linux_mips64.go | 23 + .../x/sys/unix/ztypes_linux_mips64le.go | 23 + .../x/sys/unix/ztypes_linux_mipsle.go | 23 + .../x/sys/unix/ztypes_linux_ppc64.go | 23 + .../x/sys/unix/ztypes_linux_ppc64le.go | 23 + .../x/sys/unix/ztypes_linux_riscv64.go | 23 + .../x/sys/unix/ztypes_linux_s390x.go | 23 + .../x/sys/unix/ztypes_linux_sparc64.go | 23 + .../x/sys/unix/ztypes_openbsd_mips64.go | 565 ++ .../x/sys/unix/ztypes_solaris_amd64.go | 31 +- .../x/sys/windows/memory_windows.go | 25 +- .../sys/windows/registry/zsyscall_windows.go | 39 +- vendor/golang.org/x/sys/windows/service.go | 2 + .../x/sys/windows/setupapierrors_windows.go | 100 + vendor/golang.org/x/sys/windows/syscall.go | 46 +- .../x/sys/windows/syscall_windows.go | 35 +- .../golang.org/x/sys/windows/types_windows.go | 12 - .../x/sys/windows/types_windows_386.go | 13 + .../x/sys/windows/types_windows_amd64.go | 12 + .../x/sys/windows/types_windows_arm.go | 13 + .../x/sys/windows/zsyscall_windows.go | 4364 ++++------ vendor/golang.org/x/time/rate/rate.go | 12 +- .../x/tools/go/analysis/analysis.go | 237 - .../x/tools/go/analysis/diagnostic.go | 61 - vendor/golang.org/x/tools/go/analysis/doc.go | 301 - .../go/analysis/passes/inspect/inspect.go | 49 - .../x/tools/go/analysis/validate.go | 97 - .../x/tools/go/ast/inspector/inspector.go | 186 - .../x/tools/go/ast/inspector/typeof.go | 216 - .../x/tools/go/buildutil/allpackages.go | 198 - .../x/tools/go/buildutil/fakecontext.go | 109 - .../x/tools/go/buildutil/overlay.go | 103 - .../golang.org/x/tools/go/buildutil/tags.go | 75 - .../golang.org/x/tools/go/buildutil/util.go | 212 - .../golang.org/x/tools/go/packages/golist.go | 24 +- .../x/tools/go/packages/golist_overlay.go | 47 +- .../x/tools/go/packages/packages.go | 69 +- .../x/tools/go/types/objectpath/objectpath.go | 523 -- .../x/tools/go/types/typeutil/callee.go | 46 - .../x/tools/go/types/typeutil/imports.go | 31 - .../x/tools/go/types/typeutil/map.go | 313 - .../tools/go/types/typeutil/methodsetcache.go | 72 - .../x/tools/go/types/typeutil/ui.go | 52 - .../internal/analysisinternal/analysis.go | 118 - .../x/tools/internal/event/core/event.go | 85 + .../{telemetry/event => event/core}/export.go | 20 +- .../x/tools/internal/event/core/fast.go | 77 + .../internal/event/doc.go} | 10 +- .../x/tools/internal/event/event.go | 127 + .../x/tools/internal/event/keys/keys.go | 564 ++ .../x/tools/internal/event/keys/standard.go | 22 + .../x/tools/internal/event/label/label.go | 213 + .../x/tools/internal/gocommand/invoke.go | 49 +- .../x/tools/internal/gocommand/vendor.go | 102 + .../x/tools/internal/imports/fix.go | 8 +- .../x/tools/internal/imports/mod.go | 107 +- .../internal/packagesinternal/packages.go | 25 +- .../x/tools/internal/telemetry/event/event.go | 113 - .../x/tools/internal/telemetry/event/key.go | 565 -- .../x/tools/internal/telemetry/event/label.go | 29 - .../x/tools/internal/telemetry/event/log.go | 68 - .../tools/internal/telemetry/event/metric.go | 29 - .../x/tools/internal/telemetry/event/tag.go | 197 - .../x/tools/internal/telemetry/event/trace.go | 42 - .../x/tools/internal/typesinternal/types.go | 28 + .../gomodules.xyz/jsonpatch/v2/jsonpatch.go | 24 +- .../appengine/internal/api.go | 7 +- .../protobuf/encoding/prototext/decode.go | 7 + .../protobuf/encoding/prototext/encode.go | 7 + .../protobuf/internal/version/version.go | 2 +- .../protobuf/proto/decode.go | 7 +- .../protobuf/proto/encode.go | 5 +- .../protobuf/proto/messageset.go | 16 +- .../google.golang.org/protobuf/proto/size.go | 33 +- .../protobuf/proto/size_gen.go | 6 +- .../reflect/protoreflect/value_union.go | 2 + .../reflect/protoregistry/registry.go | 32 + vendor/gopkg.in/yaml.v3/.travis.yml | 1 + vendor/gopkg.in/yaml.v3/apic.go | 1 + vendor/gopkg.in/yaml.v3/decode.go | 63 +- vendor/gopkg.in/yaml.v3/emitterc.go | 54 +- vendor/gopkg.in/yaml.v3/encode.go | 42 +- vendor/gopkg.in/yaml.v3/parserc.go | 48 +- vendor/gopkg.in/yaml.v3/scannerc.go | 67 +- vendor/gopkg.in/yaml.v3/yaml.go | 35 +- vendor/gopkg.in/yaml.v3/yamlh.go | 3 + vendor/honnef.co/go/tools/LICENSE-THIRD-PARTY | 226 - vendor/honnef.co/go/tools/arg/arg.go | 48 - .../go/tools/cmd/staticcheck/README.md | 15 - .../go/tools/cmd/staticcheck/staticcheck.go | 44 - vendor/honnef.co/go/tools/config/config.go | 224 - vendor/honnef.co/go/tools/config/example.conf | 10 - .../honnef.co/go/tools/deprecated/stdlib.go | 112 - vendor/honnef.co/go/tools/facts/deprecated.go | 144 - vendor/honnef.co/go/tools/facts/generated.go | 86 - vendor/honnef.co/go/tools/facts/purity.go | 175 - vendor/honnef.co/go/tools/facts/token.go | 24 - vendor/honnef.co/go/tools/functions/loops.go | 54 - vendor/honnef.co/go/tools/functions/pure.go | 46 - .../go/tools/functions/terminates.go | 24 - .../go/tools/go/types/typeutil/callee.go | 46 - .../go/tools/go/types/typeutil/identical.go | 75 - .../go/tools/go/types/typeutil/imports.go | 31 - .../go/tools/go/types/typeutil/map.go | 319 - .../tools/go/types/typeutil/methodsetcache.go | 72 - .../go/tools/go/types/typeutil/ui.go | 52 - .../go/tools/internal/cache/cache.go | 474 -- .../go/tools/internal/cache/default.go | 85 - .../honnef.co/go/tools/internal/cache/hash.go | 176 - .../internal/passes/buildssa/buildssa.go | 116 - .../go/tools/internal/renameio/renameio.go | 83 - .../go/tools/internal/sharedcheck/lint.go | 70 - vendor/honnef.co/go/tools/lint/LICENSE | 28 - vendor/honnef.co/go/tools/lint/lint.go | 491 -- .../go/tools/lint/lintdsl/lintdsl.go | 400 - .../go/tools/lint/lintutil/format/format.go | 135 - .../honnef.co/go/tools/lint/lintutil/stats.go | 7 - .../go/tools/lint/lintutil/stats_bsd.go | 10 - .../go/tools/lint/lintutil/stats_posix.go | 10 - .../honnef.co/go/tools/lint/lintutil/util.go | 392 - vendor/honnef.co/go/tools/lint/runner.go | 970 --- vendor/honnef.co/go/tools/lint/stats.go | 20 - vendor/honnef.co/go/tools/loader/loader.go | 197 - vendor/honnef.co/go/tools/printf/fuzz.go | 11 - vendor/honnef.co/go/tools/printf/printf.go | 197 - .../honnef.co/go/tools/simple/CONTRIBUTING.md | 15 - vendor/honnef.co/go/tools/simple/analysis.go | 223 - vendor/honnef.co/go/tools/simple/doc.go | 425 - vendor/honnef.co/go/tools/simple/lint.go | 1816 ---- vendor/honnef.co/go/tools/ssa/LICENSE | 28 - vendor/honnef.co/go/tools/ssa/blockopt.go | 195 - vendor/honnef.co/go/tools/ssa/builder.go | 2379 ------ vendor/honnef.co/go/tools/ssa/const.go | 169 - vendor/honnef.co/go/tools/ssa/create.go | 270 - vendor/honnef.co/go/tools/ssa/doc.go | 125 - vendor/honnef.co/go/tools/ssa/dom.go | 343 - vendor/honnef.co/go/tools/ssa/emit.go | 469 -- vendor/honnef.co/go/tools/ssa/func.go | 765 -- vendor/honnef.co/go/tools/ssa/identical.go | 7 - vendor/honnef.co/go/tools/ssa/identical_17.go | 7 - vendor/honnef.co/go/tools/ssa/lift.go | 657 -- vendor/honnef.co/go/tools/ssa/lvalue.go | 123 - vendor/honnef.co/go/tools/ssa/methods.go | 239 - vendor/honnef.co/go/tools/ssa/mode.go | 100 - vendor/honnef.co/go/tools/ssa/print.go | 435 - vendor/honnef.co/go/tools/ssa/sanity.go | 535 -- vendor/honnef.co/go/tools/ssa/source.go | 293 - vendor/honnef.co/go/tools/ssa/ssa.go | 1745 ---- .../honnef.co/go/tools/ssa/staticcheck.conf | 3 - vendor/honnef.co/go/tools/ssa/testmain.go | 271 - vendor/honnef.co/go/tools/ssa/util.go | 119 - vendor/honnef.co/go/tools/ssa/wrappers.go | 290 - vendor/honnef.co/go/tools/ssa/write.go | 5 - vendor/honnef.co/go/tools/ssautil/ssautil.go | 58 - .../go/tools/staticcheck/CONTRIBUTING.md | 15 - .../go/tools/staticcheck/analysis.go | 525 -- .../go/tools/staticcheck/buildtag.go | 21 - vendor/honnef.co/go/tools/staticcheck/doc.go | 764 -- .../go/tools/staticcheck/knowledge.go | 25 - vendor/honnef.co/go/tools/staticcheck/lint.go | 3360 -------- .../honnef.co/go/tools/staticcheck/rules.go | 321 - .../go/tools/staticcheck/structtag.go | 58 - .../go/tools/staticcheck/vrp/channel.go | 73 - .../honnef.co/go/tools/staticcheck/vrp/int.go | 476 -- .../go/tools/staticcheck/vrp/slice.go | 273 - .../go/tools/staticcheck/vrp/string.go | 258 - .../honnef.co/go/tools/staticcheck/vrp/vrp.go | 1056 --- .../honnef.co/go/tools/stylecheck/analysis.go | 111 - vendor/honnef.co/go/tools/stylecheck/doc.go | 154 - vendor/honnef.co/go/tools/stylecheck/lint.go | 629 -- vendor/honnef.co/go/tools/stylecheck/names.go | 264 - vendor/honnef.co/go/tools/unused/edge.go | 54 - .../go/tools/unused/edgekind_string.go | 109 - .../honnef.co/go/tools/unused/implements.go | 82 - vendor/honnef.co/go/tools/unused/unused.go | 1964 ----- .../honnef.co/go/tools/version/buildinfo.go | 46 - .../go/tools/version/buildinfo111.go | 6 - vendor/honnef.co/go/tools/version/version.go | 42 - vendor/k8s.io/api/admission/v1/doc.go | 23 + .../k8s.io/api/admission/v1/generated.pb.go | 1792 ++++ .../k8s.io/api/admission/v1/generated.proto | 167 + vendor/k8s.io/api/admission/v1/register.go | 51 + vendor/k8s.io/api/admission/v1/types.go | 169 + .../v1/types_swagger_doc_generated.go | 78 + .../api/admission/v1/zz_generated.deepcopy.go | 141 + vendor/k8s.io/api/admission/v1beta1/doc.go | 1 + .../api/admission/v1beta1/generated.pb.go | 165 +- .../api/admission/v1beta1/generated.proto | 7 + vendor/k8s.io/api/admission/v1beta1/types.go | 12 + .../v1beta1/types_swagger_doc_generated.go | 1 + .../v1beta1/zz_generated.deepcopy.go | 5 + .../zz_generated.prerelease-lifecycle.go | 49 + .../admissionregistration/v1/generated.proto | 4 +- .../api/admissionregistration/v1/types.go | 4 +- .../v1/types_swagger_doc_generated.go | 2 +- .../api/admissionregistration/v1beta1/doc.go | 1 + .../v1beta1/generated.proto | 4 +- .../admissionregistration/v1beta1/types.go | 20 +- .../v1beta1/types_swagger_doc_generated.go | 2 +- .../zz_generated.prerelease-lifecycle.go | 121 + vendor/k8s.io/api/apps/v1beta1/doc.go | 1 + vendor/k8s.io/api/apps/v1beta1/types.go | 32 + .../zz_generated.prerelease-lifecycle.go | 217 + vendor/k8s.io/api/apps/v1beta2/doc.go | 1 + vendor/k8s.io/api/apps/v1beta2/types.go | 44 + .../zz_generated.prerelease-lifecycle.go | 289 + .../v1alpha1/generated.pb.go | 2030 ----- .../v1alpha1/generated.proto | 162 - .../api/auditregistration/v1alpha1/types.go | 198 - .../v1alpha1/types_swagger_doc_generated.go | 111 - .../v1alpha1/zz_generated.deepcopy.go | 229 - .../k8s.io/api/authentication/v1beta1/doc.go | 1 + .../api/authentication/v1beta1/types.go | 3 + .../zz_generated.prerelease-lifecycle.go | 49 + .../k8s.io/api/authorization/v1beta1/doc.go | 1 + .../k8s.io/api/authorization/v1beta1/types.go | 12 + .../zz_generated.prerelease-lifecycle.go | 121 + vendor/k8s.io/api/autoscaling/v2beta1/doc.go | 1 + .../k8s.io/api/autoscaling/v2beta1/types.go | 6 + .../zz_generated.prerelease-lifecycle.go | 73 + vendor/k8s.io/api/autoscaling/v2beta2/doc.go | 1 + .../k8s.io/api/autoscaling/v2beta2/types.go | 4 + .../zz_generated.prerelease-lifecycle.go | 57 + vendor/k8s.io/api/batch/v1beta1/doc.go | 1 + vendor/k8s.io/api/batch/v1beta1/types.go | 8 +- .../zz_generated.prerelease-lifecycle.go | 75 + .../v1alpha1 => certificates/v1}/doc.go | 6 +- .../api/certificates/v1/generated.pb.go | 2042 +++++ .../api/certificates/v1/generated.proto | 226 + vendor/k8s.io/api/certificates/v1/register.go | 61 + vendor/k8s.io/api/certificates/v1/types.go | 284 + .../v1/types_swagger_doc_generated.go | 88 + .../certificates/v1/zz_generated.deepcopy.go | 198 + vendor/k8s.io/api/certificates/v1beta1/doc.go | 1 + .../api/certificates/v1beta1/generated.pb.go | 197 +- .../api/certificates/v1beta1/generated.proto | 46 +- .../k8s.io/api/certificates/v1beta1/types.go | 51 +- .../v1beta1/types_swagger_doc_generated.go | 12 +- .../v1beta1/zz_generated.deepcopy.go | 1 + .../zz_generated.prerelease-lifecycle.go | 73 + vendor/k8s.io/api/coordination/v1beta1/doc.go | 1 + .../k8s.io/api/coordination/v1beta1/types.go | 6 + .../zz_generated.prerelease-lifecycle.go | 73 + .../api/core/v1/annotation_key_constants.go | 27 +- vendor/k8s.io/api/core/v1/generated.pb.go | 3118 ++++--- vendor/k8s.io/api/core/v1/generated.proto | 229 +- vendor/k8s.io/api/core/v1/lifecycle.go | 37 + vendor/k8s.io/api/core/v1/types.go | 247 +- .../core/v1/types_swagger_doc_generated.go | 79 +- .../api/core/v1/zz_generated.deepcopy.go | 80 + .../api/discovery/v1alpha1/generated.proto | 1 - vendor/k8s.io/api/discovery/v1alpha1/types.go | 1 - vendor/k8s.io/api/discovery/v1beta1/doc.go | 1 + .../api/discovery/v1beta1/generated.proto | 1 - vendor/k8s.io/api/discovery/v1beta1/types.go | 5 +- .../discovery/v1beta1/well_known_labels.go | 4 + .../zz_generated.prerelease-lifecycle.go | 57 + vendor/k8s.io/api/events/v1/doc.go | 23 + vendor/k8s.io/api/events/v1/generated.pb.go | 1406 ++++ vendor/k8s.io/api/events/v1/generated.proto | 125 + .../v1alpha1 => events/v1}/register.go | 25 +- vendor/k8s.io/api/events/v1/types.go | 119 + .../events/v1/types_swagger_doc_generated.go | 72 + .../api/events/v1/zz_generated.deepcopy.go | 117 + vendor/k8s.io/api/events/v1beta1/doc.go | 1 + .../k8s.io/api/events/v1beta1/generated.pb.go | 138 +- .../k8s.io/api/events/v1beta1/generated.proto | 47 +- vendor/k8s.io/api/events/v1beta1/types.go | 60 +- .../v1beta1/types_swagger_doc_generated.go | 35 +- .../zz_generated.prerelease-lifecycle.go | 57 + vendor/k8s.io/api/extensions/v1beta1/doc.go | 1 + .../api/extensions/v1beta1/generated.proto | 16 +- vendor/k8s.io/api/extensions/v1beta1/types.go | 70 +- .../v1beta1/types_swagger_doc_generated.go | 16 +- .../zz_generated.prerelease-lifecycle.go | 349 + .../api/flowcontrol/v1alpha1/generated.proto | 18 +- .../k8s.io/api/flowcontrol/v1alpha1/types.go | 18 +- .../v1alpha1/types_swagger_doc_generated.go | 16 +- .../k8s.io/api/networking/v1/generated.pb.go | 4350 ++++++++-- .../k8s.io/api/networking/v1/generated.proto | 270 +- vendor/k8s.io/api/networking/v1/register.go | 4 + vendor/k8s.io/api/networking/v1/types.go | 313 +- .../v1/types_swagger_doc_generated.go | 151 +- .../networking/v1/zz_generated.deepcopy.go | 362 + vendor/k8s.io/api/networking/v1beta1/doc.go | 1 + .../api/networking/v1beta1/generated.proto | 1 - vendor/k8s.io/api/networking/v1beta1/types.go | 15 +- .../zz_generated.prerelease-lifecycle.go | 121 + vendor/k8s.io/api/node/v1beta1/doc.go | 1 + vendor/k8s.io/api/node/v1beta1/types.go | 4 + .../zz_generated.prerelease-lifecycle.go | 57 + vendor/k8s.io/api/policy/v1beta1/doc.go | 1 + .../k8s.io/api/policy/v1beta1/generated.proto | 16 +- vendor/k8s.io/api/policy/v1beta1/types.go | 27 +- .../v1beta1/types_swagger_doc_generated.go | 14 +- .../zz_generated.prerelease-lifecycle.go | 111 + .../k8s.io/api/rbac/v1alpha1/generated.proto | 16 +- vendor/k8s.io/api/rbac/v1alpha1/types.go | 16 +- .../v1alpha1/types_swagger_doc_generated.go | 16 +- vendor/k8s.io/api/rbac/v1beta1/doc.go | 1 + .../k8s.io/api/rbac/v1beta1/generated.proto | 16 +- vendor/k8s.io/api/rbac/v1beta1/types.go | 48 +- .../v1beta1/types_swagger_doc_generated.go | 16 +- .../zz_generated.prerelease-lifecycle.go | 217 + .../k8s.io/api/scheduling/v1/generated.proto | 2 +- vendor/k8s.io/api/scheduling/v1/types.go | 2 +- .../v1/types_swagger_doc_generated.go | 2 +- .../api/scheduling/v1alpha1/generated.proto | 2 +- .../k8s.io/api/scheduling/v1alpha1/types.go | 2 +- .../v1alpha1/types_swagger_doc_generated.go | 2 +- vendor/k8s.io/api/scheduling/v1beta1/doc.go | 1 + .../api/scheduling/v1beta1/generated.proto | 2 +- vendor/k8s.io/api/scheduling/v1beta1/types.go | 10 +- .../v1beta1/types_swagger_doc_generated.go | 2 +- .../zz_generated.prerelease-lifecycle.go | 73 + vendor/k8s.io/api/storage/v1/generated.pb.go | 254 +- vendor/k8s.io/api/storage/v1/generated.proto | 28 + vendor/k8s.io/api/storage/v1/types.go | 59 + .../storage/v1/types_swagger_doc_generated.go | 2 + .../api/storage/v1/zz_generated.deepcopy.go | 10 + .../api/storage/v1alpha1/generated.pb.go | 663 +- .../api/storage/v1alpha1/generated.proto | 75 + .../k8s.io/api/storage/v1alpha1/register.go | 2 + vendor/k8s.io/api/storage/v1alpha1/types.go | 82 + .../v1alpha1/types_swagger_doc_generated.go | 22 + .../storage/v1alpha1/zz_generated.deepcopy.go | 74 +- vendor/k8s.io/api/storage/v1beta1/doc.go | 1 + .../api/storage/v1beta1/generated.pb.go | 254 +- .../api/storage/v1beta1/generated.proto | 28 + vendor/k8s.io/api/storage/v1beta1/types.go | 80 + .../v1beta1/types_swagger_doc_generated.go | 2 + .../storage/v1beta1/zz_generated.deepcopy.go | 10 + .../zz_generated.prerelease-lifecycle.go | 217 + .../pkg/apis/apiextensions/types.go | 9 + .../pkg/apis/apiextensions/v1/generated.pb.go | 448 +- .../pkg/apis/apiextensions/v1/generated.proto | 13 + .../pkg/apis/apiextensions/v1/types.go | 11 + .../v1/zz_generated.conversion.go | 4 + .../apiextensions/v1/zz_generated.deepcopy.go | 5 + .../pkg/apis/apiextensions/v1beta1/doc.go | 1 + .../apiextensions/v1beta1/generated.pb.go | 452 +- .../apiextensions/v1beta1/generated.proto | 15 +- .../pkg/apis/apiextensions/v1beta1/types.go | 26 +- .../v1beta1/zz_generated.conversion.go | 4 + .../v1beta1/zz_generated.deepcopy.go | 5 + .../zz_generated.prerelease-lifecycle.go | 97 + .../apiextensions/zz_generated.deepcopy.go | 5 + .../k8s.io/apimachinery/pkg/api/errors/OWNERS | 2 - .../apimachinery/pkg/api/errors/errors.go | 82 +- .../k8s.io/apimachinery/pkg/api/meta/OWNERS | 2 - .../apimachinery/pkg/api/meta/conditions.go | 101 + .../k8s.io/apimachinery/pkg/api/meta/meta.go | 2 +- .../apimachinery/pkg/api/resource/OWNERS | 3 - .../pkg/api/validation/generic.go | 3 +- .../pkg/api/validation/objectmeta.go | 11 +- .../pkg/api/validation/path/name.go | 4 +- .../pkg/apis/meta/internalversion/register.go | 3 + .../apis/meta/internalversion/scheme/doc.go | 17 + .../meta/internalversion/scheme/register.go | 39 + .../pkg/apis/meta/internalversion/types.go | 16 +- .../zz_generated.conversion.go | 2 + .../apimachinery/pkg/apis/meta/v1/OWNERS | 1 - .../pkg/apis/meta/v1/conversion.go | 8 + .../pkg/apis/meta/v1/generated.pb.go | 830 +- .../pkg/apis/meta/v1/generated.proto | 101 +- .../apimachinery/pkg/apis/meta/v1/meta.go | 4 +- .../apimachinery/pkg/apis/meta/v1/types.go | 119 +- .../meta/v1/types_swagger_doc_generated.go | 37 +- .../pkg/apis/meta/v1/unstructured/helpers.go | 2 +- .../pkg/apis/meta/v1/validation/validation.go | 76 + .../apis/meta/v1/zz_generated.conversion.go | 12 + .../pkg/apis/meta/v1/zz_generated.deepcopy.go | 17 + .../pkg/apis/meta/v1beta1/conversion.go | 27 +- .../pkg/apis/meta/v1beta1/register.go | 17 + .../apimachinery/pkg/conversion/converter.go | 10 +- .../apimachinery/pkg/fields/selector.go | 16 +- .../k8s.io/apimachinery/pkg/labels/labels.go | 14 +- .../apimachinery/pkg/labels/selector.go | 41 +- .../k8s.io/apimachinery/pkg/runtime/codec.go | 2 +- .../apimachinery/pkg/runtime/codec_check.go | 10 +- .../apimachinery/pkg/runtime/converter.go | 4 +- .../pkg/runtime/schema/group_version.go | 17 +- .../k8s.io/apimachinery/pkg/runtime/scheme.go | 13 + .../pkg/runtime/serializer/json/json.go | 2 +- .../serializer/versioning/versioning.go | 2 +- .../pkg/util/duration/duration.go | 6 +- .../pkg/util/httpstream/httpstream.go | 14 +- .../pkg/util/httpstream/spdy/connection.go | 2 +- .../pkg/util/httpstream/spdy/roundtripper.go | 21 +- .../apimachinery/pkg/util/intstr/intstr.go | 2 +- .../k8s.io/apimachinery/pkg/util/net/http.go | 299 +- .../apimachinery/pkg/util/net/interface.go | 2 +- .../k8s.io/apimachinery/pkg/util/net/util.go | 31 +- .../apimachinery/pkg/util/runtime/runtime.go | 2 +- .../pkg/util/strategicpatch/patch.go | 4 +- .../pkg/util/validation/validation.go | 5 + .../apimachinery/pkg/util/yaml/decoder.go | 6 +- .../apimachinery/pkg/watch/streamwatcher.go | 2 +- vendor/k8s.io/apimachinery/pkg/watch/watch.go | 8 +- .../forked/golang/reflect/deep_equal.go | 4 +- .../client-go/discovery/discovery_client.go | 2 +- .../auditregistration/v1alpha1/auditsink.go | 89 - .../informers/certificates/interface.go | 8 + .../v1/certificatesigningrequest.go | 89 + .../v1}/interface.go | 19 +- .../client-go/informers/events/interface.go | 8 + .../client-go/informers/events/v1/event.go | 90 + .../v1alpha1 => events/v1}/interface.go | 12 +- vendor/k8s.io/client-go/informers/factory.go | 6 - vendor/k8s.io/client-go/informers/generic.go | 25 +- .../informers/networking/v1/ingress.go | 90 + .../informers/networking/v1/ingressclass.go | 89 + .../informers/networking/v1/interface.go | 14 + .../storage/v1alpha1/csistoragecapacity.go | 90 + .../informers/storage/v1alpha1/interface.go | 7 + .../k8s.io/client-go/kubernetes/clientset.go | 42 +- .../client-go/kubernetes/scheme/register.go | 6 +- .../auditregistration/v1alpha1/auditsink.go | 168 - .../v1/certificates_client.go} | 36 +- .../v1/certificatesigningrequest.go | 200 + .../v1alpha1 => certificates/v1}/doc.go | 2 +- .../certificates/v1/generated_expansion.go | 21 + .../kubernetes/typed/core/v1/pod_expansion.go | 16 + .../kubernetes/typed/events/v1/doc.go | 20 + .../kubernetes/typed/events/v1/event.go | 178 + .../typed/events/v1/events_client.go | 89 + .../v1}/generated_expansion.go | 4 +- .../networking/v1/generated_expansion.go | 4 + .../kubernetes/typed/networking/v1/ingress.go | 195 + .../typed/networking/v1/ingressclass.go | 168 + .../typed/networking/v1/networking_client.go | 10 + .../storage/v1alpha1/csistoragecapacity.go | 178 + .../storage/v1alpha1/generated_expansion.go | 2 + .../typed/storage/v1alpha1/storage_client.go | 5 + .../v1/mutatingwebhookconfiguration.go | 3 + .../v1/validatingwebhookconfiguration.go | 3 + .../v1beta1/mutatingwebhookconfiguration.go | 3 + .../v1beta1/validatingwebhookconfiguration.go | 3 + .../listers/apps/v1/controllerrevision.go | 5 + .../client-go/listers/apps/v1/daemonset.go | 5 + .../client-go/listers/apps/v1/deployment.go | 5 + .../client-go/listers/apps/v1/replicaset.go | 5 + .../client-go/listers/apps/v1/statefulset.go | 5 + .../apps/v1beta1/controllerrevision.go | 5 + .../listers/apps/v1beta1/deployment.go | 5 + .../listers/apps/v1beta1/statefulset.go | 5 + .../apps/v1beta2/controllerrevision.go | 5 + .../listers/apps/v1beta2/daemonset.go | 5 + .../listers/apps/v1beta2/deployment.go | 5 + .../listers/apps/v1beta2/replicaset.go | 5 + .../listers/apps/v1beta2/statefulset.go | 5 + .../auditregistration/v1alpha1/auditsink.go | 65 - .../autoscaling/v1/horizontalpodautoscaler.go | 5 + .../v2beta1/horizontalpodautoscaler.go | 5 + .../v2beta2/horizontalpodautoscaler.go | 5 + .../k8s.io/client-go/listers/batch/v1/job.go | 5 + .../listers/batch/v1beta1/cronjob.go | 5 + .../listers/batch/v2alpha1/cronjob.go | 5 + .../v1/certificatesigningrequest.go | 68 + .../v1}/expansion_generated.go | 8 +- .../v1beta1/certificatesigningrequest.go | 3 + .../listers/coordination/v1/lease.go | 5 + .../listers/coordination/v1beta1/lease.go | 5 + .../listers/core/v1/componentstatus.go | 3 + .../client-go/listers/core/v1/configmap.go | 5 + .../client-go/listers/core/v1/endpoints.go | 5 + .../k8s.io/client-go/listers/core/v1/event.go | 5 + .../client-go/listers/core/v1/limitrange.go | 5 + .../client-go/listers/core/v1/namespace.go | 3 + .../k8s.io/client-go/listers/core/v1/node.go | 3 + .../listers/core/v1/persistentvolume.go | 3 + .../listers/core/v1/persistentvolumeclaim.go | 5 + .../k8s.io/client-go/listers/core/v1/pod.go | 5 + .../client-go/listers/core/v1/podtemplate.go | 5 + .../listers/core/v1/replicationcontroller.go | 5 + .../listers/core/v1/resourcequota.go | 5 + .../client-go/listers/core/v1/secret.go | 5 + .../client-go/listers/core/v1/service.go | 5 + .../listers/core/v1/serviceaccount.go | 5 + .../discovery/v1alpha1/endpointslice.go | 5 + .../discovery/v1beta1/endpointslice.go | 5 + .../client-go/listers/events/v1/event.go | 99 + .../listers/events/v1/expansion_generated.go | 27 + .../client-go/listers/events/v1beta1/event.go | 5 + .../listers/extensions/v1beta1/daemonset.go | 5 + .../listers/extensions/v1beta1/deployment.go | 5 + .../listers/extensions/v1beta1/ingress.go | 5 + .../extensions/v1beta1/networkpolicy.go | 5 + .../extensions/v1beta1/podsecuritypolicy.go | 3 + .../listers/extensions/v1beta1/replicaset.go | 5 + .../flowcontrol/v1alpha1/flowschema.go | 3 + .../v1alpha1/prioritylevelconfiguration.go | 3 + .../networking/v1/expansion_generated.go | 12 + .../listers/networking/v1/ingress.go | 99 + .../listers/networking/v1/ingressclass.go | 68 + .../listers/networking/v1/networkpolicy.go | 5 + .../listers/networking/v1beta1/ingress.go | 5 + .../networking/v1beta1/ingressclass.go | 3 + .../listers/node/v1alpha1/runtimeclass.go | 3 + .../listers/node/v1beta1/runtimeclass.go | 3 + .../listers/policy/v1beta1/eviction.go | 5 + .../policy/v1beta1/poddisruptionbudget.go | 5 + .../v1beta1/poddisruptionbudget_expansion.go | 2 +- .../policy/v1beta1/podsecuritypolicy.go | 3 + .../client-go/listers/rbac/v1/clusterrole.go | 3 + .../listers/rbac/v1/clusterrolebinding.go | 3 + .../k8s.io/client-go/listers/rbac/v1/role.go | 5 + .../client-go/listers/rbac/v1/rolebinding.go | 5 + .../listers/rbac/v1alpha1/clusterrole.go | 3 + .../rbac/v1alpha1/clusterrolebinding.go | 3 + .../client-go/listers/rbac/v1alpha1/role.go | 5 + .../listers/rbac/v1alpha1/rolebinding.go | 5 + .../listers/rbac/v1beta1/clusterrole.go | 3 + .../rbac/v1beta1/clusterrolebinding.go | 3 + .../client-go/listers/rbac/v1beta1/role.go | 5 + .../listers/rbac/v1beta1/rolebinding.go | 5 + .../listers/scheduling/v1/priorityclass.go | 3 + .../scheduling/v1alpha1/priorityclass.go | 3 + .../scheduling/v1beta1/priorityclass.go | 3 + .../listers/settings/v1alpha1/podpreset.go | 5 + .../client-go/listers/storage/v1/csidriver.go | 3 + .../client-go/listers/storage/v1/csinode.go | 3 + .../listers/storage/v1/storageclass.go | 3 + .../listers/storage/v1/volumeattachment.go | 3 + .../storage/v1alpha1/csistoragecapacity.go | 99 + .../storage/v1alpha1/expansion_generated.go | 8 + .../storage/v1alpha1/volumeattachment.go | 3 + .../listers/storage/v1beta1/csidriver.go | 3 + .../listers/storage/v1beta1/csinode.go | 3 + .../listers/storage/v1beta1/storageclass.go | 3 + .../storage/v1beta1/volumeattachment.go | 3 + vendor/k8s.io/client-go/metadata/interface.go | 49 + vendor/k8s.io/client-go/metadata/metadata.go | 307 + .../plugin/pkg/client/auth/exec/exec.go | 104 +- vendor/k8s.io/client-go/rest/client.go | 4 + vendor/k8s.io/client-go/rest/config.go | 30 +- vendor/k8s.io/client-go/rest/plugin.go | 2 +- vendor/k8s.io/client-go/rest/request.go | 61 +- vendor/k8s.io/client-go/rest/transport.go | 3 +- vendor/k8s.io/client-go/rest/urlbackoff.go | 2 +- vendor/k8s.io/client-go/rest/warnings.go | 144 + .../k8s.io/client-go/restmapper/discovery.go | 2 +- .../k8s.io/client-go/restmapper/shortcut.go | 2 +- vendor/k8s.io/client-go/tools/cache/OWNERS | 2 - .../client-go/tools/cache/controller.go | 18 +- .../client-go/tools/cache/delta_fifo.go | 60 +- .../client-go/tools/cache/expiration_cache.go | 2 +- vendor/k8s.io/client-go/tools/cache/fifo.go | 19 +- .../k8s.io/client-go/tools/cache/listers.go | 2 +- .../client-go/tools/cache/mutation_cache.go | 2 +- .../tools/cache/mutation_detector.go | 2 +- .../k8s.io/client-go/tools/cache/reflector.go | 65 +- .../client-go/tools/cache/shared_informer.go | 73 +- .../client-go/tools/clientcmd/api/helpers.go | 3 + .../client-go/tools/clientcmd/api/types.go | 18 +- .../client-go/tools/clientcmd/api/v1/types.go | 18 +- .../api/v1/zz_generated.conversion.go | 4 + .../tools/clientcmd/client_config.go | 106 +- .../client-go/tools/clientcmd/config.go | 29 +- .../client-go/tools/clientcmd/helpers.go | 15 + .../client-go/tools/clientcmd/loader.go | 2 +- .../tools/clientcmd/merged_client_builder.go | 37 +- .../client-go/tools/clientcmd/validation.go | 29 +- .../client-go/tools/leaderelection/OWNERS | 1 - .../tools/leaderelection/leaderelection.go | 11 +- .../resourcelock/configmaplock.go | 8 +- .../resourcelock/endpointslock.go | 8 +- .../leaderelection/resourcelock/leaselock.go | 11 +- vendor/k8s.io/client-go/tools/metrics/OWNERS | 1 - vendor/k8s.io/client-go/tools/record/OWNERS | 1 - vendor/k8s.io/client-go/tools/record/event.go | 15 +- .../client-go/tools/record/events_cache.go | 5 +- .../tools/remotecommand/remotecommand.go | 2 +- .../client-go/tools/remotecommand/v1.go | 2 +- vendor/k8s.io/client-go/transport/cache.go | 54 +- .../client-go/transport/cert_rotation.go | 2 +- vendor/k8s.io/client-go/transport/config.go | 8 + .../client-go/transport/round_trippers.go | 11 +- .../k8s.io/client-go/transport/spdy/spdy.go | 6 +- .../client-go/transport/token_source.go | 2 +- .../k8s.io/client-go/transport/transport.go | 2 +- vendor/k8s.io/client-go/util/cert/cert.go | 6 +- .../util/workqueue/default_rate_limiters.go | 48 - .../util/workqueue/delaying_queue.go | 13 +- .../client-go/util/workqueue/parallelizer.go | 68 +- .../k8s.io/code-generator/SECURITY_CONTACTS | 9 +- .../client-gen/generators/client_generator.go | 2 +- .../generators/scheme/generator_for_scheme.go | 3 +- .../code-generator/cmd/client-gen/main.go | 2 +- .../conversion-gen/generators/conversion.go | 4 +- .../code-generator/cmd/conversion-gen/main.go | 2 +- .../code-generator/cmd/deepcopy-gen/main.go | 2 +- .../code-generator/cmd/defaulter-gen/main.go | 2 +- .../cmd/go-to-protobuf/protobuf/generator.go | 6 +- .../cmd/go-to-protobuf/protobuf/tags.go | 2 +- .../code-generator/cmd/import-boss/README.md | 97 + .../code-generator/cmd/import-boss/main.go | 44 +- .../cmd/informer-gen/generators/factory.go | 2 +- .../generators/factoryinterface.go | 2 +- .../cmd/informer-gen/generators/generic.go | 8 +- .../cmd/informer-gen/generators/informer.go | 2 +- .../cmd/informer-gen/generators/packages.go | 2 +- .../code-generator/cmd/informer-gen/main.go | 2 +- .../cmd/lister-gen/.import-restrictions | 1 - .../cmd/lister-gen/generators/lister.go | 10 +- .../code-generator/cmd/lister-gen/main.go | 2 +- .../code-generator/cmd/openapi-gen/main.go | 2 +- .../cmd/register-gen/generators/packages.go | 2 +- .../code-generator/cmd/register-gen/main.go | 2 +- .../k8s.io/code-generator/cmd/set-gen/main.go | 2 +- vendor/k8s.io/code-generator/go.mod | 21 +- vendor/k8s.io/code-generator/go.sum | 76 +- vendor/k8s.io/component-base/config/types.go | 8 + .../config/v1alpha1/conversion.go | 8 + .../config/v1alpha1/defaults.go | 15 + .../component-base/config/v1alpha1/types.go | 8 + .../v1alpha1/zz_generated.conversion.go | 20 + .../config/v1alpha1/zz_generated.deepcopy.go | 16 + .../config/zz_generated.deepcopy.go | 16 + .../featuregate/feature_gate.go | 2 +- vendor/k8s.io/gengo/parser/parse.go | 8 +- vendor/k8s.io/klog/v2/README.md | 4 +- vendor/k8s.io/klog/v2/go.mod | 2 +- vendor/k8s.io/klog/v2/go.sum | 4 +- vendor/k8s.io/klog/v2/klog.go | 87 +- vendor/k8s.io/klog/v2/klog_file.go | 64 +- .../pkg/apis/apiregistration/types.go | 5 +- .../apis/apiregistration/v1/generated.proto | 5 +- .../pkg/apis/apiregistration/v1/types.go | 5 +- .../pkg/apis/apiregistration/v1beta1/doc.go | 1 + .../apiregistration/v1beta1/generated.proto | 5 +- .../pkg/apis/apiregistration/v1beta1/types.go | 11 +- .../zz_generated.prerelease-lifecycle.go | 73 + .../listers/apiregistration/v1/apiservice.go | 3 + .../autoregister/autoregister_controller.go | 2 +- .../kube-aggregator/pkg/controllers/cache.go | 2 +- .../cmd/openapi-gen/openapi-gen.go | 2 +- .../kube-openapi/pkg/generators/api_linter.go | 2 +- .../kube-openapi/pkg/generators/config.go | 2 +- .../kube-openapi/pkg/generators/extension.go | 10 + .../kube-openapi/pkg/generators/openapi.go | 2 +- .../pkg/generators/rules/idl_tag.go | 19 +- .../kube-openapi/pkg/util/proto/document.go | 2 +- .../k8s.io/kube-scheduler/config/v1/types.go | 10 +- .../config/v1/zz_generated.deepcopy.go | 54 +- vendor/k8s.io/kubelet/config/v1beta1/types.go | 53 +- .../config/v1beta1/zz_generated.deepcopy.go | 16 + vendor/k8s.io/utils/pointer/pointer.go | 49 +- vendor/k8s.io/utils/trace/trace.go | 22 +- vendor/modules.txt | 182 +- .../controller-runtime/.golangci.yml | 1 - .../sigs.k8s.io/controller-runtime/Makefile | 10 +- .../controller-runtime/TMP-LOGGING.md | 3 + .../controller-runtime/VERSIONING.md | 279 +- .../sigs.k8s.io/controller-runtime/alias.go | 19 +- vendor/sigs.k8s.io/controller-runtime/go.mod | 43 +- vendor/sigs.k8s.io/controller-runtime/go.sum | 338 +- .../pkg/builder/controller.go | 124 +- .../controller-runtime/pkg/builder/options.go | 39 + .../controller-runtime/pkg/cache/cache.go | 8 +- .../pkg/cache/informer_cache.go | 12 +- .../pkg/cache/internal/cache_reader.go | 4 +- .../pkg/cache/internal/deleg_map.go | 51 +- .../pkg/cache/internal/informers_map.go | 55 +- .../pkg/cache/multi_namespace_cache.go | 20 +- .../pkg/client/apiutil/apimachinery.go | 60 +- .../pkg/client/apiutil/dynamicrestmapper.go | 58 +- .../controller-runtime/pkg/client/client.go | 138 +- .../pkg/client/client_cache.go | 27 +- .../pkg/client/config/config.go | 13 +- .../controller-runtime/pkg/client/dryrun.go | 29 +- .../pkg/client/interfaces.go | 35 +- .../pkg/client/metadata_client.go | 193 + .../pkg/client/namespaced_client.go | 253 + .../controller-runtime/pkg/client/object.go | 77 + .../controller-runtime/pkg/client/options.go | 23 - .../controller-runtime/pkg/client/patch.go | 7 - .../controller-runtime/pkg/client/split.go | 91 +- .../pkg/client/typed_client.go | 22 +- .../pkg/client/unstructured_client.go | 22 +- .../controller-runtime/pkg/config/config.go | 114 + .../controller-runtime/pkg/config/doc.go | 25 + .../pkg/config/v1alpha1/doc.go | 20 + .../pkg/config/v1alpha1/register.go | 37 + .../pkg/config/v1alpha1/types.go | 127 + .../config/v1alpha1/zz_generated.deepcopy.go | 119 + .../pkg/controller/controller.go | 21 +- .../controllerutil/controllerutil.go | 156 +- .../controller-runtime/pkg/envtest/crd.go | 26 +- .../controller-runtime/pkg/envtest/helper.go | 7 +- .../controller-runtime/pkg/envtest/server.go | 34 +- .../controller-runtime/pkg/envtest/webhook.go | 63 +- .../controller-runtime/pkg/event/event.go | 30 +- .../controller-runtime/pkg/handler/enqueue.go | 30 +- .../pkg/handler/enqueue_mapped.go | 70 +- .../pkg/handler/enqueue_owner.go | 10 +- .../pkg/internal/controller/controller.go | 81 +- .../internal/controller/metrics/metrics.go | 18 + .../pkg/internal/log/log.go | 3 - .../pkg/internal/recorder/recorder.go | 126 +- .../pkg/leaderelection/doc.go | 2 +- .../pkg/leaderelection/leader_election.go | 21 +- .../controller-runtime/pkg/log/log.go | 56 +- .../controller-runtime/pkg/log/zap/flags.go | 24 +- .../controller-runtime/pkg/log/zap/zap.go | 102 +- .../pkg/manager/client_builder.go | 61 + .../pkg/manager/internal.go | 144 +- .../controller-runtime/pkg/manager/manager.go | 225 +- .../pkg/manager/signals/signal.go | 10 +- .../pkg/predicate/predicate.go | 85 +- .../pkg/reconcile/reconcile.go | 7 +- .../controller-runtime/pkg/scheme/scheme.go | 4 +- .../pkg/source/internal/eventsource.go | 63 +- .../controller-runtime/pkg/source/source.go | 47 +- .../pkg/webhook/admission/http.go | 59 +- .../pkg/webhook/admission/multi.go | 15 +- .../pkg/webhook/admission/response.go | 39 +- .../pkg/webhook/admission/validator.go | 22 +- .../pkg/webhook/admission/webhook.go | 10 +- .../internal/certwatcher/certwatcher.go | 7 +- .../controller-runtime/pkg/webhook/server.go | 72 +- .../controller-tools/pkg/crd/gen.go | 91 +- .../controller-tools/pkg/crd/known_types.go | 8 + .../pkg/crd/markers/validation.go | 47 +- .../crd/markers/zz_generated.markerhelp.go | 26 +- .../controller-tools/pkg/crd/parser.go | 38 +- .../controller-tools/pkg/crd/schema.go | 26 +- .../pkg/crd/schema_visitor.go | 41 +- .../pkg/crd/zz_generated.markerhelp.go | 6 +- .../controller-tools/pkg/deepcopy/gen.go | 20 +- .../controller-tools/pkg/deepcopy/traverse.go | 53 +- .../controller-tools/pkg/genall/genall.go | 41 +- .../controller-tools/pkg/loader/errors.go | 8 +- .../controller-tools/pkg/loader/refs.go | 46 +- .../controller-tools/pkg/markers/parse.go | 19 +- .../controller-tools/pkg/schemapatcher/gen.go | 5 + .../controller-tools/pkg/webhook/conv.go | 44 + .../controller-tools/pkg/webhook/parser.go | 311 +- .../pkg/webhook/zz_generated.markerhelp.go | 8 + .../structured-merge-diff/{v3 => v4}/LICENSE | 0 .../{v3 => v4}/value/allocator.go | 0 .../{v3 => v4}/value/doc.go | 0 .../{v3 => v4}/value/fields.go | 0 .../{v3 => v4}/value/jsontagutil.go | 0 .../{v3 => v4}/value/list.go | 0 .../{v3 => v4}/value/listreflect.go | 0 .../{v3 => v4}/value/listunstructured.go | 0 .../{v3 => v4}/value/map.go | 0 .../{v3 => v4}/value/mapreflect.go | 0 .../{v3 => v4}/value/mapunstructured.go | 0 .../{v3 => v4}/value/reflectcache.go | 0 .../{v3 => v4}/value/scalar.go | 0 .../{v3 => v4}/value/structreflect.go | 0 .../{v3 => v4}/value/value.go | 0 .../{v3 => v4}/value/valuereflect.go | 0 .../{v3 => v4}/value/valueunstructured.go | 0 1307 files changed, 69153 insertions(+), 66184 deletions(-) create mode 100644 vendor/github.com/cespare/xxhash/v2/.travis.yml rename vendor/{honnef.co/go/tools/LICENSE => github.com/cespare/xxhash/v2/LICENSE.txt} (95%) create mode 100644 vendor/github.com/cespare/xxhash/v2/README.md create mode 100644 vendor/github.com/cespare/xxhash/v2/go.mod create mode 100644 vendor/github.com/cespare/xxhash/v2/go.sum create mode 100644 vendor/github.com/cespare/xxhash/v2/xxhash.go create mode 100644 vendor/github.com/cespare/xxhash/v2/xxhash_amd64.go create mode 100644 vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s create mode 100644 vendor/github.com/cespare/xxhash/v2/xxhash_other.go create mode 100644 vendor/github.com/cespare/xxhash/v2/xxhash_safe.go create mode 100644 vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/event/event.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/handler/enqueue_mapped.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/handler/enqueued_mapped.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/remote_addr.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/client/kubernetes/utils/client.go create mode 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/backupentry.go create mode 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/backupentry/backupentry.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/constraints_check.go create mode 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/extensions/backupentry/backupentry.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/garbage_collection.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/health_check.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/matchers/matcher.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/matchers/rule_matcher.go create mode 100644 vendor/github.com/gardener/gardener/pkg/seedadmission/pod_scheduler_name.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/utils/kubernetes/node.go create mode 100644 vendor/github.com/go-logr/logr/discard.go create mode 100644 vendor/github.com/go-logr/logr/go.mod create mode 100644 vendor/github.com/go-logr/zapr/go.mod create mode 100644 vendor/github.com/google/go-cmp/cmp/internal/value/name.go create mode 100644 vendor/github.com/google/go-cmp/cmp/report_references.go delete mode 100644 vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.pb.go delete mode 100644 vendor/github.com/googleapis/gnostic/OpenAPIv2/README.md delete mode 100644 vendor/github.com/googleapis/gnostic/compiler/extension-handler.go create mode 100644 vendor/github.com/googleapis/gnostic/compiler/extensions.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/README.md create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/base.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/display.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/models.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/operations.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/reader.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/schema.json create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/writer.go rename vendor/github.com/googleapis/gnostic/{OpenAPIv2 => openapiv2}/OpenAPIv2.go (67%) create mode 100644 vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go rename vendor/github.com/googleapis/gnostic/{OpenAPIv2 => openapiv2}/OpenAPIv2.proto (99%) create mode 100644 vendor/github.com/googleapis/gnostic/openapiv2/README.md create mode 100644 vendor/github.com/googleapis/gnostic/openapiv2/document.go rename vendor/github.com/googleapis/gnostic/{OpenAPIv2 => openapiv2}/openapi-2.0.json (99%) create mode 100644 vendor/github.com/imdario/mergo/go.mod create mode 100644 vendor/github.com/imdario/mergo/go.sum create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/build_info.go create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/build_info_pre_1.12.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/http.go create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_pre_1_8.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client_1_8.go create mode 100644 vendor/github.com/prometheus/common/expfmt/openmetrics_create.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_arm.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_arm64.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_default.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_mips.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_mips64.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_mips64le.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_mipsle.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_ppc64.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_ppc64le.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_s390x.go create mode 100644 vendor/github.com/prometheus/procfs/fscache.go create mode 100644 vendor/github.com/prometheus/procfs/kernel_random.go create mode 100644 vendor/github.com/prometheus/procfs/proc_cgroup.go create mode 100644 vendor/github.com/prometheus/procfs/proc_smaps.go create mode 100644 vendor/github.com/spf13/cobra/Makefile create mode 100644 vendor/github.com/spf13/cobra/custom_completions.go create mode 100644 vendor/github.com/spf13/cobra/fish_completions.go create mode 100644 vendor/github.com/spf13/cobra/fish_completions.md delete mode 100644 vendor/go.uber.org/atomic/tools.go delete mode 100644 vendor/go.uber.org/multierr/tools.go delete mode 100644 vendor/go.uber.org/tools/LICENSE delete mode 100644 vendor/go.uber.org/tools/update-license/.gitignore delete mode 100644 vendor/go.uber.org/tools/update-license/README.md delete mode 100644 vendor/go.uber.org/tools/update-license/licenses.go delete mode 100644 vendor/go.uber.org/tools/update-license/main.go delete mode 100644 vendor/go.uber.org/zap/tools.go create mode 100644 vendor/go.uber.org/zap/zapcore/increase_level.go delete mode 100644 vendor/golang.org/x/crypto/poly1305/sum_noasm.go delete mode 100644 vendor/golang.org/x/crypto/poly1305/sum_vmsl_s390x.s rename vendor/golang.org/x/net/idna/{tables12.00.go => tables12.0.0.go} (99%) create mode 100644 vendor/golang.org/x/net/idna/tables13.0.0.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_arm.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_ppc64x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_s390x.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_zos.go create mode 100644 vendor/golang.org/x/sys/cpu/cpu_zos_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_386.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.1_11.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go rename vendor/golang.org/x/sys/unix/{zsyscall_darwin_arm64.1_11.go => zsyscall_openbsd_mips64.go} (86%) create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/windows/setupapierrors_windows.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/analysis.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/diagnostic.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/doc.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/validate.go delete mode 100644 vendor/golang.org/x/tools/go/ast/inspector/inspector.go delete mode 100644 vendor/golang.org/x/tools/go/ast/inspector/typeof.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/allpackages.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/fakecontext.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/overlay.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/tags.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/util.go delete mode 100644 vendor/golang.org/x/tools/go/types/objectpath/objectpath.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/callee.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/imports.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/map.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/ui.go delete mode 100644 vendor/golang.org/x/tools/internal/analysisinternal/analysis.go create mode 100644 vendor/golang.org/x/tools/internal/event/core/event.go rename vendor/golang.org/x/tools/internal/{telemetry/event => event/core}/export.go (76%) create mode 100644 vendor/golang.org/x/tools/internal/event/core/fast.go rename vendor/golang.org/x/{sys/unix/syscall_darwin_arm.1_11.go => tools/internal/event/doc.go} (53%) create mode 100644 vendor/golang.org/x/tools/internal/event/event.go create mode 100644 vendor/golang.org/x/tools/internal/event/keys/keys.go create mode 100644 vendor/golang.org/x/tools/internal/event/keys/standard.go create mode 100644 vendor/golang.org/x/tools/internal/event/label/label.go create mode 100644 vendor/golang.org/x/tools/internal/gocommand/vendor.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/event.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/key.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/label.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/log.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/metric.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/tag.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/trace.go create mode 100644 vendor/golang.org/x/tools/internal/typesinternal/types.go delete mode 100644 vendor/honnef.co/go/tools/LICENSE-THIRD-PARTY delete mode 100644 vendor/honnef.co/go/tools/arg/arg.go delete mode 100644 vendor/honnef.co/go/tools/cmd/staticcheck/README.md delete mode 100644 vendor/honnef.co/go/tools/cmd/staticcheck/staticcheck.go delete mode 100644 vendor/honnef.co/go/tools/config/config.go delete mode 100644 vendor/honnef.co/go/tools/config/example.conf delete mode 100644 vendor/honnef.co/go/tools/deprecated/stdlib.go delete mode 100644 vendor/honnef.co/go/tools/facts/deprecated.go delete mode 100644 vendor/honnef.co/go/tools/facts/generated.go delete mode 100644 vendor/honnef.co/go/tools/facts/purity.go delete mode 100644 vendor/honnef.co/go/tools/facts/token.go delete mode 100644 vendor/honnef.co/go/tools/functions/loops.go delete mode 100644 vendor/honnef.co/go/tools/functions/pure.go delete mode 100644 vendor/honnef.co/go/tools/functions/terminates.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/callee.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/identical.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/imports.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/map.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/methodsetcache.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/ui.go delete mode 100644 vendor/honnef.co/go/tools/internal/cache/cache.go delete mode 100644 vendor/honnef.co/go/tools/internal/cache/default.go delete mode 100644 vendor/honnef.co/go/tools/internal/cache/hash.go delete mode 100644 vendor/honnef.co/go/tools/internal/passes/buildssa/buildssa.go delete mode 100644 vendor/honnef.co/go/tools/internal/renameio/renameio.go delete mode 100644 vendor/honnef.co/go/tools/internal/sharedcheck/lint.go delete mode 100644 vendor/honnef.co/go/tools/lint/LICENSE delete mode 100644 vendor/honnef.co/go/tools/lint/lint.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintdsl/lintdsl.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/format/format.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/stats.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/stats_bsd.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/stats_posix.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/util.go delete mode 100644 vendor/honnef.co/go/tools/lint/runner.go delete mode 100644 vendor/honnef.co/go/tools/lint/stats.go delete mode 100644 vendor/honnef.co/go/tools/loader/loader.go delete mode 100644 vendor/honnef.co/go/tools/printf/fuzz.go delete mode 100644 vendor/honnef.co/go/tools/printf/printf.go delete mode 100644 vendor/honnef.co/go/tools/simple/CONTRIBUTING.md delete mode 100644 vendor/honnef.co/go/tools/simple/analysis.go delete mode 100644 vendor/honnef.co/go/tools/simple/doc.go delete mode 100644 vendor/honnef.co/go/tools/simple/lint.go delete mode 100644 vendor/honnef.co/go/tools/ssa/LICENSE delete mode 100644 vendor/honnef.co/go/tools/ssa/blockopt.go delete mode 100644 vendor/honnef.co/go/tools/ssa/builder.go delete mode 100644 vendor/honnef.co/go/tools/ssa/const.go delete mode 100644 vendor/honnef.co/go/tools/ssa/create.go delete mode 100644 vendor/honnef.co/go/tools/ssa/doc.go delete mode 100644 vendor/honnef.co/go/tools/ssa/dom.go delete mode 100644 vendor/honnef.co/go/tools/ssa/emit.go delete mode 100644 vendor/honnef.co/go/tools/ssa/func.go delete mode 100644 vendor/honnef.co/go/tools/ssa/identical.go delete mode 100644 vendor/honnef.co/go/tools/ssa/identical_17.go delete mode 100644 vendor/honnef.co/go/tools/ssa/lift.go delete mode 100644 vendor/honnef.co/go/tools/ssa/lvalue.go delete mode 100644 vendor/honnef.co/go/tools/ssa/methods.go delete mode 100644 vendor/honnef.co/go/tools/ssa/mode.go delete mode 100644 vendor/honnef.co/go/tools/ssa/print.go delete mode 100644 vendor/honnef.co/go/tools/ssa/sanity.go delete mode 100644 vendor/honnef.co/go/tools/ssa/source.go delete mode 100644 vendor/honnef.co/go/tools/ssa/ssa.go delete mode 100644 vendor/honnef.co/go/tools/ssa/staticcheck.conf delete mode 100644 vendor/honnef.co/go/tools/ssa/testmain.go delete mode 100644 vendor/honnef.co/go/tools/ssa/util.go delete mode 100644 vendor/honnef.co/go/tools/ssa/wrappers.go delete mode 100644 vendor/honnef.co/go/tools/ssa/write.go delete mode 100644 vendor/honnef.co/go/tools/ssautil/ssautil.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/CONTRIBUTING.md delete mode 100644 vendor/honnef.co/go/tools/staticcheck/analysis.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/buildtag.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/doc.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/knowledge.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/lint.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/rules.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/structtag.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/vrp/channel.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/vrp/int.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/vrp/slice.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/vrp/string.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/vrp/vrp.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/analysis.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/doc.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/lint.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/names.go delete mode 100644 vendor/honnef.co/go/tools/unused/edge.go delete mode 100644 vendor/honnef.co/go/tools/unused/edgekind_string.go delete mode 100644 vendor/honnef.co/go/tools/unused/implements.go delete mode 100644 vendor/honnef.co/go/tools/unused/unused.go delete mode 100644 vendor/honnef.co/go/tools/version/buildinfo.go delete mode 100644 vendor/honnef.co/go/tools/version/buildinfo111.go delete mode 100644 vendor/honnef.co/go/tools/version/version.go create mode 100644 vendor/k8s.io/api/admission/v1/doc.go create mode 100644 vendor/k8s.io/api/admission/v1/generated.pb.go create mode 100644 vendor/k8s.io/api/admission/v1/generated.proto create mode 100644 vendor/k8s.io/api/admission/v1/register.go create mode 100644 vendor/k8s.io/api/admission/v1/types.go create mode 100644 vendor/k8s.io/api/admission/v1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/admission/v1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/api/admission/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/apps/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/apps/v1beta2/zz_generated.prerelease-lifecycle.go delete mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/generated.pb.go delete mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/generated.proto delete mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/types.go delete mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/types_swagger_doc_generated.go delete mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/api/authentication/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/authorization/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/batch/v1beta1/zz_generated.prerelease-lifecycle.go rename vendor/k8s.io/api/{auditregistration/v1alpha1 => certificates/v1}/doc.go (80%) create mode 100644 vendor/k8s.io/api/certificates/v1/generated.pb.go create mode 100644 vendor/k8s.io/api/certificates/v1/generated.proto create mode 100644 vendor/k8s.io/api/certificates/v1/register.go create mode 100644 vendor/k8s.io/api/certificates/v1/types.go create mode 100644 vendor/k8s.io/api/certificates/v1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/certificates/v1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/api/certificates/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/coordination/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/core/v1/lifecycle.go create mode 100644 vendor/k8s.io/api/discovery/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/events/v1/doc.go create mode 100644 vendor/k8s.io/api/events/v1/generated.pb.go create mode 100644 vendor/k8s.io/api/events/v1/generated.proto rename vendor/k8s.io/api/{auditregistration/v1alpha1 => events/v1}/register.go (73%) create mode 100644 vendor/k8s.io/api/events/v1/types.go create mode 100644 vendor/k8s.io/api/events/v1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/events/v1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/api/events/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/extensions/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/networking/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/node/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/rbac/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/scheduling/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/storage/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/apimachinery/pkg/api/meta/conditions.go create mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/scheme/doc.go create mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/scheme/register.go delete mode 100644 vendor/k8s.io/client-go/informers/auditregistration/v1alpha1/auditsink.go create mode 100644 vendor/k8s.io/client-go/informers/certificates/v1/certificatesigningrequest.go rename vendor/k8s.io/client-go/informers/{auditregistration => certificates/v1}/interface.go (63%) create mode 100644 vendor/k8s.io/client-go/informers/events/v1/event.go rename vendor/k8s.io/client-go/informers/{auditregistration/v1alpha1 => events/v1}/interface.go (81%) create mode 100644 vendor/k8s.io/client-go/informers/networking/v1/ingress.go create mode 100644 vendor/k8s.io/client-go/informers/networking/v1/ingressclass.go create mode 100644 vendor/k8s.io/client-go/informers/storage/v1alpha1/csistoragecapacity.go delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditsink.go rename vendor/k8s.io/client-go/kubernetes/typed/{auditregistration/v1alpha1/auditregistration_client.go => certificates/v1/certificates_client.go} (58%) create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/certificatesigningrequest.go rename vendor/k8s.io/client-go/kubernetes/typed/{auditregistration/v1alpha1 => certificates/v1}/doc.go (97%) create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/generated_expansion.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/events/v1/doc.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/events/v1/event.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/events/v1/events_client.go rename vendor/k8s.io/client-go/kubernetes/typed/{auditregistration/v1alpha1 => events/v1}/generated_expansion.go (92%) create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/ingress.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/ingressclass.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/csistoragecapacity.go delete mode 100644 vendor/k8s.io/client-go/listers/auditregistration/v1alpha1/auditsink.go create mode 100644 vendor/k8s.io/client-go/listers/certificates/v1/certificatesigningrequest.go rename vendor/k8s.io/client-go/listers/{auditregistration/v1alpha1 => certificates/v1}/expansion_generated.go (76%) create mode 100644 vendor/k8s.io/client-go/listers/events/v1/event.go create mode 100644 vendor/k8s.io/client-go/listers/events/v1/expansion_generated.go create mode 100644 vendor/k8s.io/client-go/listers/networking/v1/ingress.go create mode 100644 vendor/k8s.io/client-go/listers/networking/v1/ingressclass.go create mode 100644 vendor/k8s.io/client-go/listers/storage/v1alpha1/csistoragecapacity.go create mode 100644 vendor/k8s.io/client-go/metadata/interface.go create mode 100644 vendor/k8s.io/client-go/metadata/metadata.go create mode 100644 vendor/k8s.io/client-go/rest/warnings.go create mode 100644 vendor/k8s.io/code-generator/cmd/import-boss/README.md delete mode 100644 vendor/k8s.io/code-generator/cmd/lister-gen/.import-restrictions create mode 100644 vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/client/metadata_client.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/client/namespaced_client.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/client/object.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/config.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/doc.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1/doc.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1/register.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1/types.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/manager/client_builder.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/webhook/conv.go rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/LICENSE (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/allocator.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/doc.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/fields.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/jsontagutil.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/list.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/listreflect.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/listunstructured.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/map.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/mapreflect.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/mapunstructured.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/reflectcache.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/scalar.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/structreflect.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/value.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/valuereflect.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/valueunstructured.go (100%) diff --git a/.test-defs/infrastructure-test.yaml b/.test-defs/infrastructure-test.yaml index e6a3b1faa..3570dec20 100644 --- a/.test-defs/infrastructure-test.yaml +++ b/.test-defs/infrastructure-test.yaml @@ -18,4 +18,4 @@ spec: --client-secret=${CLIENT_SECRET} --region=${REGION} - image: eu.gcr.io/gardener-project/3rd/golang:1.15.5 + image: eu.gcr.io/gardener-project/3rd/golang:1.15.7 diff --git a/.test-defs/provider-azure.yaml b/.test-defs/provider-azure.yaml index 9f94a06af..689b3232e 100644 --- a/.test-defs/provider-azure.yaml +++ b/.test-defs/provider-azure.yaml @@ -15,4 +15,4 @@ spec: --network-vnet-cidr=$NETWORK_VNET_CIDR --network-worker-cidr=$NETWORK_WORKER_CIDR --zoned=$ZONED - image: eu.gcr.io/gardener-project/3rd/golang:1.15.5 + image: eu.gcr.io/gardener-project/3rd/golang:1.15.7 diff --git a/Dockerfile b/Dockerfile index 6909bccbb..3e599704b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ############# builder -FROM eu.gcr.io/gardener-project/3rd/golang:1.15.5 AS builder +FROM eu.gcr.io/gardener-project/3rd/golang:1.15.7 AS builder WORKDIR /go/src/github.com/gardener/gardener-extension-provider-azure COPY . . diff --git a/charts/gardener-extension-provider-azure/templates/rbac.yaml b/charts/gardener-extension-provider-azure/templates/rbac.yaml index 63046ee04..ae6147c81 100644 --- a/charts/gardener-extension-provider-azure/templates/rbac.yaml +++ b/charts/gardener-extension-provider-azure/templates/rbac.yaml @@ -33,16 +33,21 @@ rules: verbs: - "*" - apiGroups: - - "" + - coordination.k8s.io resources: - - configmaps + - leases + verbs: + - create +- apiGroups: + - coordination.k8s.io + resources: + - leases resourceNames: - provider-azure-leader-election verbs: - get - watch - update - - patch - apiGroups: - "" - apps diff --git a/cmd/gardener-extension-provider-azure/app/app.go b/cmd/gardener-extension-provider-azure/app/app.go index 5e6f334cc..f9699b63d 100644 --- a/cmd/gardener-extension-provider-azure/app/app.go +++ b/cmd/gardener-extension-provider-azure/app/app.go @@ -189,7 +189,7 @@ func NewControllerManagerCommand(ctx context.Context) *cobra.Command { controllercmd.LogErrAndExit(err, "Could not add controllers to manager") } - if err := mgr.Start(ctx.Done()); err != nil { + if err := mgr.Start(ctx); err != nil { controllercmd.LogErrAndExit(err, "Error running manager") } }, diff --git a/cmd/gardener-extension-provider-azure/main.go b/cmd/gardener-extension-provider-azure/main.go index 0f0caaf28..3e2959f67 100644 --- a/cmd/gardener-extension-provider-azure/main.go +++ b/cmd/gardener-extension-provider-azure/main.go @@ -17,15 +17,15 @@ package main import ( "github.com/gardener/gardener-extension-provider-azure/cmd/gardener-extension-provider-azure/app" - "github.com/gardener/gardener/extensions/pkg/controller" controllercmd "github.com/gardener/gardener/extensions/pkg/controller/cmd" "github.com/gardener/gardener/extensions/pkg/log" runtimelog "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/manager/signals" ) func main() { runtimelog.SetLogger(log.ZapLogger(false)) - cmd := app.NewControllerManagerCommand(controller.SetupSignalHandlerContext()) + cmd := app.NewControllerManagerCommand(signals.SetupSignalHandler()) if err := cmd.Execute(); err != nil { controllercmd.LogErrAndExit(err, "error executing the main controller command") diff --git a/cmd/gardener-extension-validator-azure/app/app.go b/cmd/gardener-extension-validator-azure/app/app.go index 68e1c5265..902fcbd5b 100644 --- a/cmd/gardener-extension-validator-azure/app/app.go +++ b/cmd/gardener-extension-validator-azure/app/app.go @@ -71,7 +71,7 @@ func NewValidatorCommand(ctx context.Context) *cobra.Command { log.Info("Registering webhooks") hookServer.Register("/webhooks/validate", &webhook.Admission{Handler: &validator.Shoot{Logger: log.WithName("shoot-validator")}}) - if err := mgr.Start(ctx.Done()); err != nil { + if err := mgr.Start(ctx); err != nil { controllercmd.LogErrAndExit(err, "error running manager") } }, diff --git a/cmd/gardener-extension-validator-azure/main.go b/cmd/gardener-extension-validator-azure/main.go index fc31cd7cc..55db763ea 100644 --- a/cmd/gardener-extension-validator-azure/main.go +++ b/cmd/gardener-extension-validator-azure/main.go @@ -17,15 +17,15 @@ package main import ( "github.com/gardener/gardener-extension-provider-azure/cmd/gardener-extension-validator-azure/app" - "github.com/gardener/gardener/extensions/pkg/controller" controllercmd "github.com/gardener/gardener/extensions/pkg/controller/cmd" "github.com/gardener/gardener/extensions/pkg/log" runtimelog "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/manager/signals" ) func main() { runtimelog.SetLogger(log.ZapLogger(false)) - cmd := app.NewValidatorCommand(controller.SetupSignalHandlerContext()) + cmd := app.NewValidatorCommand(signals.SetupSignalHandler()) if err := cmd.Execute(); err != nil { controllercmd.LogErrAndExit(err, "error executing the main command") diff --git a/example/controller-registration.yaml b/example/controller-registration.yaml index 508fd19d4..825520373 100644 --- a/example/controller-registration.yaml +++ b/example/controller-registration.yaml @@ -18,7 +18,7 @@ spec: deployment: type: helm providerConfig: - chart: H4sIAAAAAAAAA+09/XPbNrL9WX8FRm3nkl5EfVi2e7rpe0+x1dTTxNbYrjOd650HIiGJNUWwIGlHbe9/f7sASIEfEkU7VZpUmHYiglhgAewu9gv0jAqH+Uy02LuI+aHL/VYg+L3rQBX9NRas/dmTSwfK8eGh/BdK/l/5u3vQ7/YOe0dHWN89OjjofEYOnz50dYnDiApCPhOcR5vaVb3/SMuscv9P5lRE1pIuvMeOUbX/vcPc/veg6vAz0nmfE11X/uL7TwP3hgnc9wG57zZoEBiPVvdrq9Ny2H3DYaEt3CCSL4bkO+YtiI2EQaZckGjOyCtNSGSIVEPGmohISlcNny7YgFQSXOO+DIEPvU6faqnmf4fb1ow/ZYwK/u91+3n5f9zv9ff8v4vSbpMTHiyFO5tH5Jn9nPQ63X+Qq+GYXI0IsDb15QOdTl3PpREjNl8E1F9aZOh5RIKFRLCQiXvmWOR67oYEmjIC/3quDSTFHBL7KAlQSgwDasM/V3waPVAQE69Vkxfk3iI9kBU2CyJCQ+LzCOA4gIgHN4TefAn++uxkdA6I4QiNdhv+S3ooGSTtW0s00rM65Bk2aOpXzef/xC6WPCYLusRBSQyDRekkNEIwOk4bFsC3GXlwo7nCRvViYR8/6j74JKLQnAJAAE9TsyGhkUZalnkUBYN2++HhwaISY4uLWVsvWtjWc20B1hrqB99jIa72L7ErYMaTJQF5DQB0Arh69EFu2EwweBdxxPpBuJHrz16QUC84duO4YSTcSRxlFi3BEaZuNoBlAxJoDq/I2VWTvBxenV29wE7enl1/d/HDNXk7vLwcnl+fja7IxSU5uTg/Pbs+uziHp2/J8PxH8v3Z+ekLwlzcSVjOQOAMAE0XlxMoBvu6YiyDQnKkhAGz3alrw9T8WUxnjMw4HA4+zIgETCzcELc1BAQd7MZzF25EI1lVmJfVgCYzPpihsEM6tqw2/HfPfIeL9gzwiycWbHI7EYirH3Nq37UTuJbN/UhwzwP5KNgMV0oOaYVzkhWcxNJj3Iwur2BJ9BN7R2HqrL2uH1S0yEsYMg5exvYdiwaqN1U1AqClrjlRPYxhdZiuOvOngkJXsR3Bo658y8UdE+oBV4GMoStcTXWAMx/JJyTm4oRxEHB9uOtKXHRcT5sLweyIrPAnGfwbgdn7/tz+k5fq8z9iQK9AFOGjLcHa9l+vc9A72tt/uyh19v92zjyQu6EVBbVswYr97x53+rn97x3t7b/dlN9+axGHTV0ftCI00Jqk9d//NqqNNISDs1O2bpideHTCvBA0msC6Y0vVnXyIJ3B0M6Ajy+VtHCrTx5ou7qkXa5x++w00GtuLnRRTi2jADYgUYfMIYi8DsqaFHl+OVJyF6wPxgEoowa1L5jEKmsY5IFeKWYqau4ADUmFGCL5xp2ROw7GA9+9IM5zT3uHRAIa9weFhKGxvRXRGUohAuH40Jc0vw//7Msy3FCzgoRtxsdzUBcyRlXU4eHSHMFlj3vkNcVjg8eWC+ZG28FPiCNv33fUbCZhx0GOXtkfDMAOqly5kC6g+QcME1J3m/3xDula33+rALE5As56A5RK5gPL3sHnaFrBeuVFiFmBPIajfTuyBkmPdfS33NsEIF2ndGN0njzFhETUGWteMesGcdgsMo38/hf/ryH9Q+abubEGDltz8e1ADuWihSo52BlvrI6w6//tHBzn5f3zY7e3l/y6KZqEMV9/Ijb1I9lXJvoyb8M71nQEaIEAPb2jQWAAZOzSiA5AEys1XLq3LCUcDhWA5lIhSWa2EjBLMgxJxjt3/DpVAyxHpY+sEHTlieJul0gH5HTvZOOtsd4ZQ+9Bb9l7L4/jf47MZCqjtogJV/r/+QS/H//2jzl7/20l5X4ytKaKlaCTL0YrGDP5F71dKb6GV0KBlezx2NJnFyp8wILrnlKGnrhcBcRqaGAIgR2O3//r27PX16PLfDaKL1MZyBc7wkIm0yRsa2fNcE6P7ryRapuNnQX0QGOIrySCtta/TAb5ny9s8HjCt9P1Y4lNEADZHOlbFOIvwpfK33p7CkiR11yJmjT9sCRbUnoMytn4RNjT4hJbBDt2WI1xAxZhoQgah+6eeqmDyXLsFlX3r+a7Gj71Ch1+g8v+fVfOfwFoSP1kwzZ+QJdEPDpLlJ+vZOgZpWX//31v8fzMf/V666nng0H2Ozns8yMBWYY71xfXwFYlwjRKERws3AtGR2RjBbpmsdvIW7oeWzLspjzr/a2YDVMb/jo9y5/9B9+hof/7voryv8z+ljT9UmVejpCo8MnCr1ZL/mhORhGsldGwZqobuIKdxpAa2lH/JEmhBc2KqI42cvaT7sz0XcIWWPhgRaO/LGQK+ufqBlkXUxrgijgGvr5cBC+VSpZG9ZkX/VrEDDNwl8M0q/MrgNcpykZPamlgZkPXQMQFTPH4J6q4KQNQbFwHS8SaxCKOaI0qYemMqkKxJicOzyHYS+gjBEoWjb5AeXdL3dZ4wYG4IhLQ0iJW2XE0MwDHA7EbLamjdkKy8a2XNJzIYqRqRiP+IMcsN7VJmPvqUTemPstQ6/wUoSfHEc203oI6DofytNIEq/9/Rcd7/d9jt78//nRQ8PjNHZ+Aax2XOT62PRlgyvgCLhMfCZqfopXfl2VhUFnLUAtJBHc2CLZizzB3DDcz3QNiZ4HGQnOLlTQnRgQDpTWjp4TLnuEpJGqxMgESoJjVGnmEKFtocT71UVXESdUaJ4sADPcArmZcawPVnsUdF4b2hV4zlm7Px0HgTzrmIzlejtBDeRU0qjCdCr7N+B9QaxXguvifhWZf/710RxdTT5v52hkAl/x/l/X+HYBXs+X8X5Y/l/yy1fCrcn5tVjvezbw3Wv1Ev3hgvipx/v9gJ26elDv+vArj1HAAV/H983D/O2//97j7/dycly/sqEq/I9TTd7a29AFva/jIXwgw6znwuWCJQtEVGfZ/rbE7FAilH5K13BT4gTeTsZtasquNkSASQYPcuLsh3LsqM5WtMKx2Qjnwjs23DjBmlK0947Edq0BAmjbFEhfcCfayvt8PjSHeAyZRsttQT5x5mA/wQwBakJuGCvvvBp/fU9TB7M4NQ9tXKDIT6q1jMCo1lpWqW8LrG3Nh26bXIbwmWLQPIqSU6Z/ZdGC+MYKJy4JZGhjOE9kymqJAvrGuNpfUSSGtMozlpbpWb0Hwu11ql1wAOJl45Y3wNqhudX49AtgKtLan36wQioWB5WOmsmZOV56A6q0t7H+DsdG02tG2k6fPNDJ94jJS3Pxm9VSUnVJF7lW2lc6OKzcax5405sFrWi6HykIL0ZWYH+WJBfWdFrC3S3nYRsHGrpRwYE5mI3QJewa22YyFg2VuC4YPrsfCbrFdFOw5Dy4S2VpBXS98OTTxXIzHM737sQBK4ahxFey283vBNm0V2u3yLNI22DY9rvhscPcDk8/r4mtCVCIcggGfK/fqIkQzoqpHmjHrRXLJ9/YEM4Kpx3EyWfv2hsvCVo8njsQWarV7DlRhfO4AEuUgghilAvu8HebWg/gwUXBXmD2wy5/wuIdlUtfhmQ1RhLbQWai2812CipZspL7+lW43x8kN1fzD16u6YKOvNcUM8nY2AZmax9OtVFCIEcf8zd33SfNFc15ceu6yjt/rVml6Yf28KSSW7X4+Gp6PL29Hr0Qle6bk9H74ZXY2HJ6O0JVhROMq3gi8GRiXmaDDPuWTTbK2ux0NwkCoXVrqtj1UpEnzP3gxfjW4A2YvL24ub0eXby7PrAq4D0pYXU4yMsHZpitgmzQA3PSwuWEIhateNkdPzESkhc3ptQy54lvOI2xxMz+uTcd4vL7J6syqG+Vj00K8gfie+1iG6nZKQhFw17sUL9gY1gZIpp+k+SVlgQ7XD1afLU3d8XTZhGTKFXTfaCUadC99bDrL5AoXVwFuQPoZRDEpwhn7kDgsvSBoROo1BE5xdpVm9Z1K46urRO2bHZmRQTU8qeVcZM8KYFRoUI3WVLquLJ+B3bLk2oz3Nec9BEaJOCBiPnPmFl5J5CkPhYFtkzpsAEQ+4x2fL7xHHZjaffs7DSBKJhlC0V1Aqc8RjJ9FqE7utg9VJcdiUxl70hjsA1+919KtalLkdXdbHt4rON+BeFWir4/8BYofjRMTyMwCT2Jmx7RxBVf7fw4L/5/Cg1937f3ZRNH3PIvIM7dUyp8Zz0s2ngAfS1Mr5hcfcOU3J46Ukj/ftOXqcQ6fEVxLGk8oJP9mR8zEEumvxv3kRp4YLuIr/Dw7z8V/8vef/XRSTq02aLr90JVlVc7vpXyrh8y2+86L08W5CBp3GzOMT6p2q02xAptQLWfbTM81kWJURU/z6TDraIHcd32p+6KX+U5Y6/C8m1H7Mh6Aq+B84v5u//9vtHez5fxclH/+Ve0zjaA5c9qvymq0uROr4rwdrxsQl91id873OyS1iD9X+FoajX2E8WAd6114aaWRMXmxq+l7DYk1bRVSNF+g9dVlJjdnUVnPXD4YXs6TGhMu67ErrzObKP5b5vXoN0niiJ4kqlrQX3VD9eEAdRf4K0l+xDBwVF3NdQK24lioR30lrs0g0v2oWO282i92kZldovEuj362cwG6B/ocPUgfD9ILSmT/kp7maezlOLRnm1LucwK6legXg6E/NZD50YjYoSZooTj9VcMPcY3vq+tRzf012HEw9X9NsyGyR0G9m+aRmGXA3abiKzSeA0pGZeaAqoJOhZKBWVqiYAC+6/kzVr1oUXv3MJ+oHWIarH2110QXIJo7kd2O0kytzr0uPKVNJknVy0lSSbSgsSUEKaSDJtnTNEbK6K9h5HtrUuHNd7An6iMBA8GCGSXO1X5Wdb0xk2QrfJ8nol2rH/jBRDUNoT28y8Q0YNtL8euMQqcAHbLWfQQTI80ABX2UClO/HtPzQB/EHKnX0Py1GaquAVfbfcTfv/+lhSuBe/9tBKb3/o/nrL5b3E8kLL1ownY0z/p/t8nbSuFBL/qyI9OTijNkgj3SVUwFqTq2YUe39fwT/azViezFQxf+9ft7+6/d6x3v+30XZxP/J+fpBnbgfeoE+8VKL/1UKdV33b3X85yj//b+D425nz/+7KDr+w35Jj5f0lA0Zc9JLtKQpqaGZjwQlFwfzBsiVql/nHa53ibGOvJAII25MVA5jtJXz8jz+cCNjzqN3AdVuZJkSEFAB2EQ6w1HD64NQ6Q1jsPDceHH7+vIqNXK03+TPHAiqw//3AX3U3wGo4P/uwXGe/3udzj7/fycll9+AW6w+COzkGL1ZdJLo+G+vqXn+RrtIxtwZpi6S7T8hAGNvqUEkGnsJ8om1YCYDZ+uUVWGkZOFNvdUFnPSFynv+21d/09kUC9cfooBgRj6xHcRrLowXcbFWHVgAV35pvBrMSKdZsAUXy0choEAfg4OGzH/0MbFW0qS/soslWF+4XFKV/QINlGvX3D5VoxJeDCGPqJuNrVW7jyUgv+NSLf9V5tdT/gBMhfzvHRfkf+dw//cfdlPUDQwpJJNPvA4Ii62ZLVDCp+QBRIFO2NVX8VcBj3bh/kREZwMidQZk78C4uHE2PefRGP9eBHB+w0y6GZBuI5+oI2v0naXDzpcIkHjL8SYkcDtirs8rral9XhD3n+eE9+cr0d3tdBb6ORGm3d7Xb9xKmdPEA67ZaBjp29jIDDGm54yZ4g7zSJvJ6xobWpnBxE3NjBsOG5oZ9xM2tMrGJDc0VFHJTT2tu0OQ5HU0ijnuA/KvfzdyGeuyLucpTLv4nJQlZOKngXBTVV632vAkNTOgcaiy7uUhrzdf9XtpsIDxFyFWOarmz4nHJ+0FRV9hexK7ntOWXbdPOWy+kH+gRPVtMlbCVZzPPHa7ujalYFt04Rz1NZjkoeaB1WnqivTCMn542Hr3cc+qW5iV/qRyT72wLKvRyDg6pd218poOSL9/oKuSvPoufjhA8qRuX/75pbKPL+m/o4KN2j+H3E91xPRDSKUt5CeKQIjIB/39oO4BPq6+5pP7lo9dvI+n/NmtKQ2jpFH6vZ6Dg1eursxYttnEaRUwB865a6TfblcLlmiriYzWF+v3+s++7Mu+7Mu+7MtfuPw/Ab4H7QB4AAA= + chart: H4sIAAAAAAAAA+09/XPbNrL9WX8FRm3nkl5EfVi2e7rpe0+x1dTTxNbYrjOd650HIiGJNUWwIGlHbe9/f7sASIEfEkU7VZpUmGQsgVhgAewu9gvUjAqH+Uy02LuI+aHL/VYg+L3rQBX9NRas/dmTSwfK8eGh/Asl/1d+7h70u73D3tER1nePDg46n5HDpw9dXeIwooKQzwTn0aZ2Vc8/0jKr3P+TORWRtaQL77FjVO1/7zC3/z2oOvyMdN7nRNeVv/j+08C9YQL3fUDuuw0aBMZXq/u11Wk57L7hsNAWbhDJB0PyHfMWxEbCIFMuSDRn5JUmJDJEqiFjTUQkpauGTxdsQCoJrnFfhsCHXqdPtVTzv8Nta8afMkYF//e6/bz8P+73+nv+30Vpt8kJD5bCnc0j8sx+Tnqd7j/I1XBMrkYEWJv68gudTl3PpREjNl8E1F9aZOh5RIKFRLCQiXvmWOR67oYEmjICfz3XBpJiDol9lAQoJYYBteHPFZ9GDxTExGvV5AW5t0gPZIXNgojQkPg8AjgOIOLBDaE3X4K/PjsZnQNiOEKj3YZ/SQ8lg6R9a4lGelaHPMMGTf2o+fyf2MWSx2RBlzgoiWGwKJ2ERghGx2nDAvg2Iw9uNFfYqF4s7ONH3QefRBSaUwAI4NvUbEhopJGWZR5FwaDdfnh4sKjE2OJi1taLFrb1XFuAtYb6wfdYiKv9S+wKmPFkSUBeAwCdAK4efZAbNhMMnkUcsX4QbuT6sxck1AuO3ThuGAl3EkeZRUtwhKmbDWDZgASawytydtUkL4dXZ1cvsJO3Z9ffXfxwTd4OLy+H59dnoytycUlOLs5Pz67PLs7h27dkeP4j+f7s/PQFYS7uJCxnIHAGgKaLywkUg31dMZZBITlSwoDZ7tS1YWr+LKYzRmYcDgcfZkQCJhZuiNsaAoIOduO5CzeikawqzMtqQJMZH8xQ2CEdW1Yb/t0z3+GiPQP84okFm9xOBOLqw5zad+0ErmVzPxLc80A+CjbDlZJDWuGcZAUnsfQYN6PLK1gS/Y29ozB11l7XDypa5CUMGQcvY/uORQPVm6oaAdBS15yoHsawOkxXnflTQaGr2I7gq658y8UdE+oLrgIZQ1e4muoAZz6ST0jMxQnjIOD6cNeVuOi4njYXgtkRWeFPMvg3ArP3/bn9Jy/V53/EgF6BKMJHW4K17b9e56B3tLf/dlHq7P/tnHkgd0MrCmrZghX73z3u9HP73zva23+7Kb/91iIOm7o+aEVooDVJ67//bVQbaQgHZ6ds3TA78eiEeSFoNIF1x5aqO/klnsDRzYCOLJe3cahMH2u6uKderHH67TfQaGwvdlJMLaIBNyBShM0jiL0MyJoWenw5UnEWrg/EAyqhBLcumccoaBrngFwpZilq7gIOSIUZIfjEnZI5DccCnr8jzXBOe4dHAxj2BoeHobC9FdEZSSEC4frRlDS/DP/vyzDfUrCAh27ExXJTFzBHVtbh4NEdwmSNeec3xGGBx5cL5kfawk+JI2zfd9dvJGDGQY9d2h4NwwyoXrqQLaD6BA0TUHea//MN6VrdfqsDszgBzXoClkvkAsrfw+ZpW8B65UaJWYA9haB+O7EHSo5197Xc2wQjXKR1Y3SfPMaERdQYaF0z6gVz2i0wjP78FP6vI/9B5Zu6swUNWnLz70EN5KKFKjnaGWytj7Dq/O8fHeTk//Fht7eX/7somoUyXH0jN/Yi2Vcl+zJuwjvXdwZogAA9vKFBYwFk7NCIDkASKDdfubQuJxwNFILlUCJKZbUSMkowD0rEOXb/O1QCLUekj60TdOSI4W2WSgfkd+xk46yz3RlC7UNv2Xstj+N/j89mKKC2iwpU+f/6B70c//ePOnv9byflfTG2poiWopEsRysaM/gXvV8pvYVWQoOW7fHY0WQWK3/CgOieU4aeul4ExGloYgiAHI3d/uvbs9fXo8t/N4guUhvLFTjDQybSJm9oZM9zTYzuv5JomY6fBfVBYIivJIO01j5OB/ieLW/zeMC00udjiU8RAdgc6VgV4yzCl8rfensKS5LUXYuYNf6wJVhQew7K2PpF2NDgE1oGO3RbjnABFWOiCRmE7p96qoLJc+0WVPat57saP/YKHX6Byv9/Vs1/AmtJ/GTBNH9ClkQ/OEiWn6xn6xikZf39f2/x/2Y++r101fPAofscnfd4kIGtwhzri+vhKxLhGiUIjxZuBKIjszGC3TJZ7eQt3A8tmXdTHnX+18wGqIz/HR/lzv+D7tHR/vzfRXlf539KG3+oMq9GSVV4ZOBWqyX/mhORhGsldGwZqobuIKdxpAa2lH/JEmhBc2KqI42cvaT7sz0XcIWWPhgRaO/LGQK+ufqBlkXUxrgijgGPr5cBC+VSpZG9ZkX/VrEDDNwl8M0q/MrgNcpykZPamlgZkPXQMQFTPH4J6q4KQNQbFwHS8SaxCKOaI0qYemMqkKxJicOzyHYS+gjBEoWjb5AeXdL3dZ4wYG4IhLQ0iJW2XE0MwDHA7EbLamjdkKy8a2XNJzIYqRqRiP+IMcsN7VJmPvqUTemPstQ6/wUoSfHEc203oI6DofytNIEq/9/Rcd7/d9jt78//nRQ8PjNHZ+Aax2XOT62PRlgyvgCLhMfCZqfopXfl2VhUFnLUAtJBHc2CLZizzB3DDcz3QNiZ4HGQnOLlTQnRgQDpTWjp4TLnuEpJGqxMgESoJjVGnmEKFtocT71UVXESdUaJ4sADPcArmZcawPVnsUdF4bmhV4zlk7Px0HgSzrmIzlejtBDeRU0qjCdCr7N+BtQaxXguvifhWZf/710RxdTT5v52hkAl/x/l/X+HYBXs+X8X5Y/l/yy1fCrcn5tVjvezTw3Wv1EP3hgPipx/v9gJ26elDv+vArj1HAAV/H983D/O2//97j7/dycly/sqEq/I9TTd7a29AFva/jIXwgw6znwuWCJQtEVGfZ/rbE7FAilH5K13BT4gTeTsZtasquNkSASQYPcuLsh3LsqM5WtMKx2Qjnwis23DjBmlK0947Edq0BAmjbFEhfcCfayvt8PjSHeAyZRsttQT5x5mA/wQwBakJuGCvvvBp/fU9TB7M4NQ9tHKDIT6q1jMCo1lpWqW8LrG3Nh26bXIbwmWLQPIqSU6Z/ZdGC+MYKJy4JZGhjOE9kymqJAvrGuNpfUSSGtMozlpbpWb0Hwu11ql1wAOJl45Y3wNqhudX49AtgKtLan36wQioWB5WOmsmZOV56A6q0t7H+DsdG02tG2k6fPNDJ94jJS3Pxm9VSUnVJF7lW2lc6OKzcax5405sFrWi6HykIL0YWYH+WJBfWdFrC3S3nYRsHGrpRwYE5mI3QJewa22YyFg2VuC4RfXY+E3Wa+KdhyGlgltrSCvlr4dmniuRmKY3/3YgSRw1TiK9lp4veGbNovsdvkWaRptGx7XfDc4eoDJ5/XxNaErEQ5BAM+U+/URIxnQVSPNGfWiuWT7+gMZwFXjuJks/fpDZeErR5PHYws0W72GKzG+dgAJcpFADFOAfN8P8mpB/RkouCrMH9hkzvldQrKpavHNhqjCWmgt1Fp4r8FESzdTXn5Ltxrj5Yfq/mDq1d0xUdab44Z4OhsBzcxi6cerKEQI4v5n7vqk+aK5ri89dllHb/WjNb0w/94Ukkp2vx4NT0eXt6PXoxO80nN7PnwzuhoPT0ZpS7CicJRvBV8MjErM0WCec8mm2Vpdj4fgIFUurHRbH6tSJPievRm+Gt0AsheXtxc3o8u3l2fXBVwHpC0vphgZYe3SFLFNmgFuelhcsIRC1K4bI6fnI1JC5vTahlzwLOcRtzmYntcn47xfXmT1ZlUM87HooV9B/E58rUN0OyUhCblq3IsX7A1qAiVTTtN9krLAhmqHq0+Xp+74umzCMmQKu260E4w6F763HGTzBQqrgbcgfQyjGJTgDP3IHRYekDQidBqDJji7SrN6z6Rw1dWjd8yOzcigmp5U8q4yZoQxKzQoRuoqXVYXT8Dv2HJtRnua856DIkSdEDAeOfMLDyXzFIbCwbbInDcBIh5wj8+W3yOOzWw+/ZyHkSQSDaFor6BU5ojHTqLVJnZbB6uT4rApjb3oDXcArt/r6Ee1KHM7uqyPbxWdb8C9KtBWx/8DxA7HiYjlawAmsTNj2zmCqvy/hwX/z+FBr7v3/+yiaPqeReQZ2qtlTo3npJtPAQ+kqZXzC4+5c5qSx0tJHu/bc/Q4h06JrySMJ5UTfrIj52MIdNfif/MiTg0XcBX/Hxzm47/4ec//uygmV5s0XX7pSrKq5nbTv1TC51u850Xp492EDDqNmccn1DtVp9mATKkXsuyrZ5rJsCojpvj2mXS0Qe46vtX80Ev9pyx1+F9MqP2YF0FV8D+w/2H+/m/3YB//3UnJx3/lHtM4mgOX/aq8ZqsLkTr+68GaMXHJPVbnfK9zcovYQ7W/heHoVxgP1oHetZdGGhmTF5uavtewWNNWEVXjAXpPXVZSYza11dz1F8OLWVJjwmVddqV1ZnPlH8t8Xj0GaTzRk0QVS9qLbqg+PKCOIj8F6adYBo6Ki7kuoFZcS5WI76S1WSSaXzWLnducC8f1TQoq9is1vFxvNhjjZdjW6zCpT2Prrdxx0IKm+EVqeJi8ULquD5WL2GzKPxg61ZSTQKzlJAXg6NfXZF6eYjYoScQoTjhVmsPc1/YU1spzf02oCMxHX/NByGCNo5RglSWsW/lOwN2k4SrenwBK52jmC1VBogx3AAewQsUE+Nv1Z6p+1aLw6Gc+UR/A2lx9aKvLM0CKcSTfRaMdZ5m7YnpMmZ6SrJOTpqdsQ7VJWlNIA8kKpWuOkNVdwc7z0KbGPe5iT9BHBEaHBzNMmqv9qux8Y3LMVvg+Se6/VDv2h4l/GEJ7j5OJb8CwkebsGwdTBT5g//0MjC/PGAV8lQl6vh9z9UMf7luUOvqfZvnaKmCV/Xfczft/epgSuNf/dlBK7/9oXviL5f1E8sKLFiJn44z/Z7u8nTQu1JIfKyI9uThjNsgjXeVUgCJSK2ZUe/8fwf/6yN9eDFTxf6/fzft/er3jPf/vomzi/+Qs/KBO3A+9QJ94qcX/KoW6rvu3Ov5zlH//38Fxt7Pn/10UHf9hv6THS3rKhow56SVa0pTU0MxHgpKLg3lj4UrVr/MO17vEWEdeSIQRNyYqhzHaynl5Hn+4kTHn0buAajeyTAkIqABsIp3hqOH1Qaj0hjFYY268uH19eZUaJNpv8mcOBNXh//uAPup3ACr4v3twnOf/Xqezz//fScnlN+AWqxcCOzlGbxYdGjr+22tqnr/R7owxd4apO2P7VwjA2FtqEInGXoJ8Yi2YycDZOmVVGClZeFNvdQEnfaDynv/21d90NsXC9YcoIJiRT2wH8ZoL40VcrFUHFsCVXxqvBjPSaRZswcXyUQgo0MfgoCHzL31MrJU06a/sYgnWFy6XVGW/QAPlfDW3T9WohBdDyCPqZmNr1e5jCcjvuFTLf5X59ZQfgKmQ/73jgvzvHO5//2E3Rd3AkEIyecXrgLDYmtkCJXxKHkAU6DBdvRV/FZxoF+5PRHQ2IFJnQPYOjIsbZ9NzHo3x9yKA8xtm0s2AdBv5RB1Zo+8sHXa+RIDEs403IYHbEXN9XmlN7fOCuP88J7w/X4nubqez0N8TYdrtff3GrZQ5TTzgmo2Gkb6NjcwQY3rOmCnuMI+0mbyusaGVGUzc1My44bChmXE/YUOrbExyQ0MVldzU07o7BEleR6OY4z4g//p3I5exLutynsK0i89JWUImvhoIN1XldasNT1IzAxqHKuteHvJ681W/lwYLGL8IscpRNT9OPD5pLyj6CtuT2PWctuy6fcph84X8gRLVt8lYCVdxPvPY7eralIJt0YVz1NdgkoeaB1anqSvSC8v44mHr3cc9q25hVvqVyj31wLKsRiPj6JR218prOiD9/oGuSvLqu/jiAMmTun3565fKXr6kf0cFG7V/Drmf6ojpi5BKW8hXFIEQkV/0+4O6B/h19Taf3Lt87OJ9POXPbk1pGCWN0vf1HBy8cnVlxrLNJk6rkDZwzl0jfXe7WrBEW01ktL5Yv9d/9mVf9mVf9mVf/sLl/wH60GmIAHgAAA== values: image: tag: v1.18.0-dev diff --git a/go.mod b/go.mod index 6b8abef63..f55db478e 100644 --- a/go.mod +++ b/go.mod @@ -9,53 +9,52 @@ require ( github.com/Azure/go-autorest/autorest/adal v0.8.2 github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 github.com/ahmetb/gen-crd-api-reference-docs v0.2.0 - github.com/beorn7/perks v1.0.1 // indirect github.com/coreos/go-systemd/v22 v22.1.0 github.com/frankban/quicktest v1.9.0 // indirect github.com/gardener/etcd-druid v0.3.0 - github.com/gardener/gardener v1.15.1-0.20210112065447-570ae178874b + github.com/gardener/gardener v1.15.1-0.20210122072647-1263febe4528 github.com/gardener/gardener-extension-networking-calico v1.7.1-0.20200522070525-f9aa28d3c83a github.com/gardener/machine-controller-manager v0.33.0 github.com/gardener/remedy-controller v0.6.0 - github.com/go-logr/logr v0.1.0 + github.com/go-logr/logr v0.3.0 github.com/gobuffalo/packr/v2 v2.8.1 github.com/golang/mock v1.4.4-0.20200731163441-8734ec565a4d github.com/golang/snappy v0.0.2 // indirect - github.com/google/go-cmp v0.4.1 // indirect github.com/nwaples/rardecode v1.1.0 // indirect - github.com/onsi/ginkgo v1.14.0 - github.com/onsi/gomega v1.10.1 + github.com/onsi/ginkgo v1.14.1 + github.com/onsi/gomega v1.10.2 github.com/pierrec/lz4 v2.5.1+incompatible // indirect github.com/pkg/errors v0.9.1 + github.com/prometheus/client_golang v1.8.0 // indirect github.com/sirupsen/logrus v1.6.0 - github.com/spf13/cobra v0.0.6 + github.com/spf13/cobra v1.0.0 github.com/spf13/pflag v1.0.5 github.com/ulikunitz/xz v0.5.7 // indirect - k8s.io/api v0.18.10 - k8s.io/apiextensions-apiserver v0.18.10 - k8s.io/apimachinery v0.18.10 - k8s.io/apiserver v0.18.10 + k8s.io/api v0.19.6 + k8s.io/apiextensions-apiserver v0.19.6 + k8s.io/apimachinery v0.19.6 + k8s.io/apiserver v0.19.6 k8s.io/autoscaler v0.0.0-20190805135949-100e91ba756e k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible - k8s.io/code-generator v0.18.10 - k8s.io/component-base v0.18.10 - k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac + k8s.io/code-generator v0.19.6 + k8s.io/component-base v0.19.6 + k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 k8s.io/klog v1.0.0 - k8s.io/kubelet v0.18.10 - k8s.io/utils v0.0.0-20200619165400-6e3d28b6ed19 - sigs.k8s.io/controller-runtime v0.6.3 + k8s.io/kubelet v0.19.6 + k8s.io/utils v0.0.0-20200912215256-4140de9c8800 + sigs.k8s.io/controller-runtime v0.7.1 ) replace ( - github.com/prometheus/client_golang => github.com/prometheus/client_golang v0.9.2 - k8s.io/api => k8s.io/api v0.18.10 - k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.18.10 - k8s.io/apimachinery => k8s.io/apimachinery v0.18.10 - k8s.io/apiserver => k8s.io/apiserver v0.18.10 - k8s.io/client-go => k8s.io/client-go v0.18.10 - k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.18.10 - k8s.io/code-generator => k8s.io/code-generator v0.18.10 - k8s.io/component-base => k8s.io/component-base v0.18.10 + github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.7.1 // keep this value in sync with k8s.io/client-go + k8s.io/api => k8s.io/api v0.19.6 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.19.6 + k8s.io/apimachinery => k8s.io/apimachinery v0.19.6 + k8s.io/apiserver => k8s.io/apiserver v0.19.6 + k8s.io/client-go => k8s.io/client-go v0.19.6 + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.19.6 + k8s.io/code-generator => k8s.io/code-generator v0.19.6 + k8s.io/component-base => k8s.io/component-base v0.19.6 k8s.io/helm => k8s.io/helm v2.13.1+incompatible - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.18.10 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.19.6 ) diff --git a/go.sum b/go.sum index 3903d48f8..e0bd54311 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,7 @@ cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxK cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= @@ -22,6 +23,7 @@ github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjN github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= +github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= github.com/Azure/go-autorest/autorest v0.10.1 h1:uaB8A32IZU9YKs9v50+/LWIWTDHJk2vlGzbfd7FfESI= github.com/Azure/go-autorest/autorest v0.10.1/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= @@ -72,8 +74,8 @@ github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4Rq github.com/ahmetb/gen-crd-api-reference-docs v0.1.5/go.mod h1:P/XzJ+c2+khJKNKABcm2biRwk2QAuwbLf8DlXuaL7WM= github.com/ahmetb/gen-crd-api-reference-docs v0.2.0 h1:YI/cAcRdNAHArfhGKcmCY5qMa32k/UyCZagLgabC5JY= github.com/ahmetb/gen-crd-api-reference-docs v0.2.0/go.mod h1:P/XzJ+c2+khJKNKABcm2biRwk2QAuwbLf8DlXuaL7WM= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alessio/shellescape v0.0.0-20190409004728-b115ca0f9053/go.mod h1:xW8sBma2LE3QxFSzCnH9qe6gAE2yO9GvQaWwX89HxbE= github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20180828111155-cad214d7d71f/go.mod h1:T9M45xf79ahXVelWoOBmH0y4aC1t5kXO5BxwyakgIGA= github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190603021944-12ad9f921c0b/go.mod h1:myCDvQSzCW+wB1WAlocEru4wMGJxy+vlxHdhegi1CDQ= @@ -95,6 +97,11 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.11.4/go.mod h1:ZB+hp7VycxPLpp0aiozQQezat46npDXhzHi1DVtRCn4= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -117,7 +124,6 @@ github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.1.0 h1:kq/SbG2BCKLkDKkjQf5OWwKWUKj1lgs3lFI4PxnR5lg= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -133,7 +139,6 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumC github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= -github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= @@ -189,8 +194,8 @@ github.com/gardener/gardener v1.3.1/go.mod h1:936P5tQbg6ViiW8BVC9ELM95sFrk4DgobK github.com/gardener/gardener v1.4.1-0.20200519155656-a8ccc6cc779a/go.mod h1:t9oESM37bAMIuezi9I0H0I8+++8jy8BUPitcf4ERRXY= github.com/gardener/gardener v1.6.6/go.mod h1:w5IHIQDccvSxZJFOtBa8YConyyFgt07DBHJBWFxb6HU= github.com/gardener/gardener v1.11.3/go.mod h1:5DzqfOm+G8UftKu5zUbYJ+9Cnfd4XrvRNDabkM9AIp4= -github.com/gardener/gardener v1.15.1-0.20210112065447-570ae178874b h1:zbZMGEc/kNTQIW2Bngow90xaPGdxS1egiCAiyiaFbnE= -github.com/gardener/gardener v1.15.1-0.20210112065447-570ae178874b/go.mod h1:576V45plCC5GkKWeGK4CAuZ5/SaVr6lRHZRTSHOiQ+E= +github.com/gardener/gardener v1.15.1-0.20210122072647-1263febe4528 h1:SzwT6i7ZociLhjJBkSN9RPC4R9hV6jb9cVGuT/znWv0= +github.com/gardener/gardener v1.15.1-0.20210122072647-1263febe4528/go.mod h1:nEATFWChfH+AD88X70hZ1uI/Wg0uiwScwD0kTc0PFMY= github.com/gardener/gardener-extension-networking-calico v1.7.1-0.20200522070525-f9aa28d3c83a h1:jBvyEhkRzW11Nz2y9IIQAo9HUaCvCqxEko5Nf9NRYUI= github.com/gardener/gardener-extension-networking-calico v1.7.1-0.20200522070525-f9aa28d3c83a/go.mod h1:bmD89OLvEBbXLlznsHe90ZlgTU+OrKErwHb6NWlSTvY= github.com/gardener/gardener-resource-manager v0.10.0/go.mod h1:0pKTHOhvU91eQB0EYr/6Ymd7lXc/5Hi8P8tF/gpV0VQ= @@ -215,13 +220,18 @@ github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-ini/ini v1.36.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.3.0 h1:q4c+kbcR0d5rSurhBR8dIgieOaYpXtsdTYfx22Cu6rs= +github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v0.1.1 h1:qXBXPDdNncunGs7XeEpsJt8wCjYBygluzfdLO0G5baE= github.com/go-logr/zapr v0.1.1/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= +github.com/go-logr/zapr v0.2.0 h1:v6Ji8yBW77pva6NkJKQdHLAJKrIJKRHz0RXwPqCHSR4= +github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= 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= @@ -322,6 +332,7 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -333,8 +344,8 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a 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= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -343,6 +354,7 @@ github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= 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= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= @@ -350,12 +362,13 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ 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/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM= +github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/gophercloud/gophercloud v0.0.0-20190212181753-892256c46858/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gophercloud/gophercloud v0.2.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gophercloud/gophercloud v0.6.1-0.20191122030953-d8ac278c1c9d/go.mod h1:ozGNgr9KYOVATV5jsgHl/ceCDXGuguqOZAzoQ/2vcNM= github.com/gophercloud/gophercloud v0.7.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss= @@ -391,12 +404,15 @@ github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63 github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.1 h1:4jgBlKK6tLKFvO8u5pmYjG91cqytmDCDvGh7ECVFfFs= github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.10 h1:6q5mVkdH/vYmqngx7kZQTjJ5HRsx+ImorDIEQ+beJgc= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/infobloxopen/infoblox-go-client v1.1.0/go.mod h1:BXiw7S2b9qJoM8MS40vfgCNB2NLHGusk1DtO16BD9zI= @@ -408,11 +424,11 @@ github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBv github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= 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= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/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= @@ -467,6 +483,8 @@ github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +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/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU= github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= github.com/miekg/dns v1.1.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -479,6 +497,7 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= 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= @@ -506,6 +525,8 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4= +github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -515,6 +536,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.2 h1:aY/nuoWlKJud2J6U0E3NWsjlg+0GtwXxgEqthRdzlcs= +github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/packethost/packngo v0.0.0-20181217122008-b3b45f1b4979/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M= github.com/pborman/uuid v0.0.0-20170612153648-e790cca94e6c/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= @@ -534,8 +557,8 @@ github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77 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/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.9.2 h1:awm861/B8OKDd2I/6o1dy3ra4BamzKhYOiGItCeZ740= -github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -543,16 +566,15 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.11 h1:DhHlBtkHWPYi8O2y31JkK0TF+DGM+51OopZjH/Ia5qI= github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= @@ -589,6 +611,8 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3 github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v0.0.6 h1:breEStsVwemnKh2/s6gMvSdMEkwW0sK8vGStnlVBMCs= github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -601,6 +625,7 @@ github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DM github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.6.1 h1:VPZzIkznI1YhVMRi6vNFLHSwhnhReBfgTxIPccpfdZk= github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -633,27 +658,38 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1: github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 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/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= 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.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM= go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM= +go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -673,11 +709,14 @@ golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -704,8 +743,6 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r 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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -726,8 +763,11 @@ golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7 h1:AeiKBIuRw3UomYXSbLy0Mc2dDLfdtbT/IVn4keq83P0= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 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= @@ -746,7 +786,6 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -767,18 +806,24 @@ golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/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-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 h1:DYfZAGf2WMFjMxbgTjaC+2HC7NkNAQs+6Q8b9WEB/F4= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/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 h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -792,6 +837,8 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -813,6 +860,7 @@ golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgw 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-20190624180213-70d37148ca0c/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-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -820,17 +868,22 @@ golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191203134012-c197fd4bf371/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191230220329-2aa90c603ae3/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200308013534-11ec41452d41/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200408032209-46bd65c8538f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200422205258-72e4a01eba43 h1:Lcsc5ErIWemp8qAbYffG5vPrqjJ0zk82RTFGifeS1Pc= golang.org/x/tools v0.0.0-20200422205258-72e4a01eba43/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616195046-dc31b401abb5 h1:UaoXseXAWUJUcuJ2E2oczJdLxAJXL0lOmVaBl7kuk+I= +golang.org/x/tools v0.0.0-20200616195046-dc31b401abb5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= @@ -838,17 +891,22 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T gomodules.xyz/jsonpatch/v2 v2.0.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gomodules.xyz/jsonpatch/v2 v2.0.1 h1:xyiBuvkD2g5n7cYzx6u2sxQvsAy4QJsZFCzGVdzOXZ0= gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= +gomodules.xyz/jsonpatch/v2 v2.1.0 h1:Phva6wqu+xR//Njw6iorylFFgn/z547tw5Ne3HZPQ+k= +gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 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= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -859,6 +917,9 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1 h1:aQktFqmDE2yjveXJlVIfslDFmFnUXSqG0i6KRcJAeMc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -875,8 +936,12 @@ google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= 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= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -900,6 +965,7 @@ gopkg.in/yaml.v2 v2.0.0/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/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 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= @@ -907,7 +973,10 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2 h1:XZx7nhd5GMaZpmDaEHFVafUZC7ya0fuo7cSJ3UCKYmM= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -920,29 +989,30 @@ istio.io/client-go v1.8.1 h1:gIeAQBgXkyUuvQ5LUtvxIY5TdFuaCLZqXgxF3bigKww= istio.io/client-go v1.8.1/go.mod h1:Qymv71lwIqjDTkaE2NqBYLL+Bl5KsCfzEDhntXypHYY= istio.io/gogo-genproto v0.0.0-20190930162913-45029607206a h1:w7zILua2dnYo9CxImhpNW4NE/8ZxEoc/wfBfHrhUhrE= istio.io/gogo-genproto v0.0.0-20190930162913-45029607206a/go.mod h1:OzpAts7jljZceG4Vqi5/zXy/pOg1b209T3jb7Nv5wIs= -k8s.io/api v0.18.10 h1:M0/vqfuBAIIS7jsOOcosT0niiotZGqw6/zHTFpyi8iQ= -k8s.io/api v0.18.10/go.mod h1:xWtwPX1v47j5RTncmlMFGCx8b0avh+nP8OgZZ9hjo3M= -k8s.io/apiextensions-apiserver v0.18.10 h1:NDp1wS1mnN6ync6onO0oVWMymTYK/ZoyFj3D0YHVzAk= -k8s.io/apiextensions-apiserver v0.18.10/go.mod h1:XOE93YaGrb8Pa+ro00Jx3fhzRJ7UB0bU37jRTQXpTOM= -k8s.io/apimachinery v0.18.10 h1:Zupk3lPrUfhCF9puTpA8EvEfPsrhNZtrpOqdp66mKVs= -k8s.io/apimachinery v0.18.10/go.mod h1:PF5taHbXgTEJLU+xMypMmYTXTWPJ5LaW8bfsisxnEXk= -k8s.io/apiserver v0.18.10 h1:wFA61pz7st1WLi96aDqr3nr6o/frkBdfRa60tpkMdRs= -k8s.io/apiserver v0.18.10/go.mod h1:N4FaJo9BeSgmtvVByXi4fPSQPRqhvvLMGqswwkddob8= +k8s.io/api v0.19.6 h1:F3lfwgpKcKms6F1mMqkQXFzXmme8QqHTJBtBkev3TOg= +k8s.io/api v0.19.6/go.mod h1:Plxx44Nh4zVblkJrIgxVPgPre1mvng6tXf1Sj3bs0fU= +k8s.io/apiextensions-apiserver v0.19.6 h1:LL7H65E2VTBfxmsWQZth60zzWVtbSN2gWMEWfsuDvIQ= +k8s.io/apiextensions-apiserver v0.19.6/go.mod h1:9s8ceL67UJAD1ewbsn07tkQ7/EGjiKOedKyiUCVXJgQ= +k8s.io/apimachinery v0.19.6 h1:kBLzSGuDdY1NdSV2uFzI+FwZ9wtkmG+X3ZVcWXSqNgA= +k8s.io/apimachinery v0.19.6/go.mod h1:6sRbGRAVY5DOCuZwB5XkqguBqpqLU6q/kOaOdk29z6Q= +k8s.io/apiserver v0.19.6 h1:nRjEbEyX0diwAZT7GndrCUwX9OQw8v+CCHPZwYLBwK8= +k8s.io/apiserver v0.19.6/go.mod h1:05XquZxCDzQ27ebk7uV2LrFIK4lm5Yt47XkkUvLAoAM= k8s.io/autoscaler v0.0.0-20190805135949-100e91ba756e h1:5AX59ZgftHpbmNupSWosdtW4q/rCnF4s/0J0dEfJkAQ= k8s.io/autoscaler v0.0.0-20190805135949-100e91ba756e/go.mod h1:QEXezc9uKPT91dwqhSJq3GNI3B1HxFRQHiku9kmrsSA= -k8s.io/client-go v0.18.10 h1:fETWvjTtnE3/s+h0SYr2wvlKWFDF+NrhwAL/ddqVa2Q= -k8s.io/client-go v0.18.10/go.mod h1:XBkFAqPrzqfwmGkV5ac+mlgBpWcz5TkhLw2808q8C3c= -k8s.io/cluster-bootstrap v0.18.10 h1:M1fNZOg+GwCZ6axP3j/FKv0o/tOIjL0uYOWesQUjUoo= -k8s.io/cluster-bootstrap v0.18.10/go.mod h1:HTuFGIjxRohQP0IrigLxVtxL+ruDVo/ookmfs608WqQ= -k8s.io/code-generator v0.18.10 h1:54UFw4V1/D2y3rfr52zNw4ECSD5Z9snwFXkXxkvmyvE= -k8s.io/code-generator v0.18.10/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= -k8s.io/component-base v0.18.10 h1:WDjiLor7EbUKKuK61QjiPqL5RMNJ9oEY6+LRtLC87xM= -k8s.io/component-base v0.18.10/go.mod h1:ZzFXjzUBHKOcF0mnWkxBI1wDu5t+CV3GxXKKvHZBLf0= +k8s.io/client-go v0.19.6 h1:vtPb33nP8DBMW+/CyuJ8fiie36c3CM1Ts6L4Tsr+PtU= +k8s.io/client-go v0.19.6/go.mod h1:gEiS+efRlXYUEQ9Oz4lmNXlxAl5JZ8y2zbTDGhvXXnk= +k8s.io/cluster-bootstrap v0.19.6 h1:ZtOoKjWEZP6BEuDd55B3sHTjneutv0z1oh3UfWiKxpc= +k8s.io/cluster-bootstrap v0.19.6/go.mod h1:9Ft1ED2O3k+4+gtkkth/Y0qHCdi9y+IMI8wh4HszXi4= +k8s.io/code-generator v0.19.6 h1:N7PlZyX25j5Jl9oIBphWN2qp1AKZOwXdDVfj2Z0V0p8= +k8s.io/code-generator v0.19.6/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= +k8s.io/component-base v0.19.6 h1:V76d3rIEWvP95peWgRycKslQnEwlaPy4UORvh3+YBbU= +k8s.io/component-base v0.19.6/go.mod h1:8Btsf8J00/fVDa/YFmXjei7gVkcFrlKZXjSeP4SZNJg= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190826232639-a874a240740c/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac h1:sAvhNk5RRuc6FNYGqe7Ygz3PSo/2wGWbulskmzRX8Vs= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 h1:t4L10Qfx/p7ASH3gXCdIUtPbbIuegCoUJf3TMSFekjw= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/helm v2.13.1+incompatible h1:qt0LBsHQ7uxCtS3F2r3XI0DNm8ml0xQeSJixUorDyn0= k8s.io/helm v2.13.1+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= @@ -953,58 +1023,64 @@ k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0 h1:Foj74zO6RbjjP4hBEKjnYtjjAhGg4jNynUdYF6fJrok= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/kube-aggregator v0.18.10 h1:dEq7kt0hM0JLZK+NYeUDjmuPRWTBCct+2biXD4aJsE8= -k8s.io/kube-aggregator v0.18.10/go.mod h1:4hDj1WpnMJTXhMlDHf14zB0B/hrFCY6dBN0ZHQNqiyQ= +k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/kube-aggregator v0.19.6 h1:huAkb9MZVN56gQ5fXe0eckFF6pbt167tPU6wkIMpiV8= +k8s.io/kube-aggregator v0.19.6/go.mod h1:BeD33Jp5LLaDH4t9oh1B+LkOY9D5+xhAC8I3ZSvI6m0= k8s.io/kube-openapi v0.0.0-20180731170545-e3762e86a74c/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29 h1:NeQXVJ2XFSkRoPzRo8AId01ZER+j8oV4SZADT4iBOXQ= k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU= -k8s.io/kube-scheduler v0.18.10 h1:1pAxXAiERNWKN70GslSKt2acUN/ACz/XcWseh+19Q8c= -k8s.io/kube-scheduler v0.18.10/go.mod h1:38J1X83Vc+BOOgvY9yABbeeZBzgJxfBDAazrAMOCZq0= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-scheduler v0.19.6 h1:pxIm1wcluoi1xquPJOvqj/M8Pc+zpb1ltkpZ7I+Pges= +k8s.io/kube-scheduler v0.19.6/go.mod h1:Z+BYHsgR340yFzs2UJS/H0wSEqrN4mDFvq3VGzhq78U= k8s.io/kubelet v0.16.8/go.mod h1:mzDpnryQg2dlB6V3/WAgb1baIamiICtWpXMFrPOFh6I= k8s.io/kubelet v0.17.6/go.mod h1:H7KZAYjmw/M8LkZq14BfLcvOTOWWocOv8H4dGkkipLM= k8s.io/kubelet v0.18.8/go.mod h1:6z1jHCk0NPE6WshFStfqcgQ1bnD3tetcPmhC2915aio= -k8s.io/kubelet v0.18.10 h1:FJ1WdE/+fpXOX19TDEvWP3iG9bwWCiIv/rZvVf6iIek= -k8s.io/kubelet v0.18.10/go.mod h1:u0wQ2njU/1fcyI/EChi9wAA0WJmgCwA8t6y45CsI+hE= +k8s.io/kubelet v0.19.6 h1:hVc1WLXnUBLGvweX1PAJZxsGHwawf2be7rK7M0h0KY8= +k8s.io/kubelet v0.19.6/go.mod h1:/yashsvRBHMGFnxpmTjtaI0sJ4rLJno9zXzc6PPU8Ls= k8s.io/metrics v0.0.0-20191004105854-2e8cf7d0888c/go.mod h1:a25VAbm3QT3xiVl1jtoF1ueAKQM149UdZ+L93ePfV3M= k8s.io/metrics v0.16.8/go.mod h1:uBIJKJKdga8vL76a1dl+eRlUqOAdCbBpvFHC28SbUIY= k8s.io/metrics v0.17.6/go.mod h1:5AuIG+m+U5ga8DpqAUqQWBhGVyY485HfKpn471pmWrQ= k8s.io/metrics v0.18.8/go.mod h1:j7JzZdiyhLP2BsJm/Fzjs+j5Lb1Y7TySjhPWqBPwRXA= -k8s.io/metrics v0.18.10 h1:y1+lsuGwHGPRVcBuoZtaULSVvAYo3k6d3S6JNxxBsng= -k8s.io/metrics v0.18.10/go.mod h1:7FQ0/pv0J15/kp8s8WvaeU6tz6jzAKk+xh1eHGwiaW8= +k8s.io/metrics v0.19.6 h1:2fBDib9hWUjV8PAoz4CltjXXBUdlUXonJvLgIo8W3mc= +k8s.io/metrics v0.19.6/go.mod h1:jM61saf/bjMRmow6zan2cAk8vFDmqvbNXFRbB4g7TNs= k8s.io/utils v0.0.0-20190506122338-8fab8cb257d5/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191218082557-f07c713de883/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200327001022-6496210b90e8/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200619165400-6e3d28b6ed19 h1:7Nu2dTj82c6IaWvL7hImJzcXoTPz1MsSCH7r+0m6rfo= k8s.io/utils v0.0.0-20200619165400-6e3d28b6ed19/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20200912215256-4140de9c8800 h1:9ZNvfPvVIEsp/T1ez4GQuzCcCTEQWhovSofhqR73A6g= +k8s.io/utils v0.0.0-20200912215256-4140de9c8800/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.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= sigs.k8s.io/controller-runtime v0.2.0-beta.5/go.mod h1:HweyYKQ8fBuzdu2bdaeBJvsFgAi/OqBBnrVGXcqKhME= sigs.k8s.io/controller-runtime v0.4.0/go.mod h1:ApC79lpY3PHW9xj/w9pj+lYkLgwAAUZwfXkME1Lajns= sigs.k8s.io/controller-runtime v0.5.4/go.mod h1:JZUwSMVbxDupo0lTJSSFP5pimEyxGynROImSsqIOx1A= sigs.k8s.io/controller-runtime v0.5.5/go.mod h1:JZUwSMVbxDupo0lTJSSFP5pimEyxGynROImSsqIOx1A= sigs.k8s.io/controller-runtime v0.6.3 h1:SBbr+inLPEKhvlJtrvDcwIpm+uhDvp63Bl72xYJtoOE= sigs.k8s.io/controller-runtime v0.6.3/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY= +sigs.k8s.io/controller-runtime v0.7.1 h1:nqVwzVzdenfd9xIbB35pC7JJH2IXVL4hDo3MNzkyCh4= +sigs.k8s.io/controller-runtime v0.7.1/go.mod h1:pJ3YBrJiAqMAZKi6UVGuE98ZrroV1p+pIhoHsMm9wdU= sigs.k8s.io/controller-tools v0.2.0-beta.4/go.mod h1:8t/X+FVWvk6TaBcsa+UKUBbn7GMtvyBKX30SGl4em6Y= sigs.k8s.io/controller-tools v0.2.4/go.mod h1:m/ztfQNocGYBgTTCmFdnK94uVvgxeZeE3LtJvd/jIzA= sigs.k8s.io/controller-tools v0.2.9/go.mod h1:ArP7w60JQKkZf7UU2oWTVnEhoNGA+sOMyuSuS+JFNDQ= -sigs.k8s.io/controller-tools v0.3.0 h1:y3YD99XOyWaXkiF1kd41uRvfp/64teWcrEZFuHxPhJ4= -sigs.k8s.io/controller-tools v0.3.0/go.mod h1:enhtKGfxZD1GFEoMgP8Fdbu+uKQ/cq1/WGJhdVChfvI= +sigs.k8s.io/controller-tools v0.4.1 h1:VkuV0MxlRPmRu5iTgBZU4UxUX2LiR99n3sdQGRxZF4w= +sigs.k8s.io/controller-tools v0.4.1/go.mod h1:G9rHdZMVlBDocIxGkK3jHLWqcTMNvveypYJwrvYKjWU= sigs.k8s.io/kind v0.7.0/go.mod h1:An/AbWHT6pA/Lm0Og8j3ukGhfJP3RiVN/IBU6Lo3zl8= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7mRH6DGaRcixXEJXTsE= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/testing_frameworks v0.1.1/go.mod h1:VVBKrHmJ6Ekkfz284YKhQePcdycOzNH9qL6ht1zEr/U= sigs.k8s.io/testing_frameworks v0.1.2/go.mod h1:ToQrwSC3s8Xf/lADdZp3Mktcql9CG0UAmdJG9th5i0w= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/pkg/controller/healthcheck/add.go b/pkg/controller/healthcheck/add.go index c78d1cf0f..f247de879 100644 --- a/pkg/controller/healthcheck/add.go +++ b/pkg/controller/healthcheck/add.go @@ -32,6 +32,7 @@ import ( "github.com/gardener/gardener/pkg/utils/version" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/predicate" ) @@ -61,7 +62,7 @@ func RegisterHealthChecks(mgr manager.Manager, opts healthcheck.DefaultAddArgs) if err := healthcheck.DefaultRegistration( azure.Type, extensionsv1alpha1.SchemeGroupVersion.WithKind(extensionsv1alpha1.ControlPlaneResource), - func() runtime.Object { return &extensionsv1alpha1.ControlPlaneList{} }, + func() client.ObjectList { return &extensionsv1alpha1.ControlPlaneList{} }, func() extensionsv1alpha1.Object { return &extensionsv1alpha1.ControlPlane{} }, mgr, opts, @@ -107,7 +108,7 @@ func RegisterHealthChecks(mgr manager.Manager, opts healthcheck.DefaultAddArgs) return healthcheck.DefaultRegistration( azure.Type, extensionsv1alpha1.SchemeGroupVersion.WithKind(extensionsv1alpha1.WorkerResource), - func() runtime.Object { return &extensionsv1alpha1.WorkerList{} }, + func() client.ObjectList { return &extensionsv1alpha1.WorkerList{} }, func() extensionsv1alpha1.Object { return &extensionsv1alpha1.Worker{} }, mgr, opts, diff --git a/pkg/controller/worker/machines.go b/pkg/controller/worker/machines.go index 9d9be7602..c5012151b 100644 --- a/pkg/controller/worker/machines.go +++ b/pkg/controller/worker/machines.go @@ -33,7 +33,7 @@ import ( "github.com/gardener/gardener/pkg/client/kubernetes" "github.com/gardener/gardener/pkg/utils" machinev1alpha1 "github.com/gardener/machine-controller-manager/pkg/apis/machine/v1alpha1" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" ) var ( @@ -46,12 +46,12 @@ func (w *workerDelegate) MachineClassKind() string { } // MachineClass yields a newly initialized machine class object. -func (w *workerDelegate) MachineClass() runtime.Object { +func (w *workerDelegate) MachineClass() client.Object { return &machinev1alpha1.AzureMachineClass{} } // MachineClassList yields a newly initialized AzureMachineClassList object. -func (w *workerDelegate) MachineClassList() runtime.Object { +func (w *workerDelegate) MachineClassList() client.ObjectList { return &machinev1alpha1.AzureMachineClassList{} } diff --git a/pkg/validator/shoot_handler.go b/pkg/validator/shoot_handler.go index fb983e367..c18697855 100644 --- a/pkg/validator/shoot_handler.go +++ b/pkg/validator/shoot_handler.go @@ -19,11 +19,11 @@ import ( "net/http" "github.com/gardener/gardener-extension-provider-azure/pkg/azure" - "github.com/gardener/gardener/extensions/pkg/util" + "github.com/gardener/gardener/extensions/pkg/util" "github.com/gardener/gardener/pkg/apis/core" "github.com/go-logr/logr" - admissionv1beta1 "k8s.io/api/admission/v1beta1" + admissionv1 "k8s.io/api/admission/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/serializer" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" @@ -48,12 +48,12 @@ func (v *Shoot) Handle(ctx context.Context, req admission.Request) admission.Res } switch req.Operation { - case admissionv1beta1.Create: + case admissionv1.Create: if err := v.validateShootCreation(shoot); err != nil { v.Logger.Error(err, "denied request") return admission.Errored(http.StatusBadRequest, err) } - case admissionv1beta1.Update: + case admissionv1.Update: oldShoot := &core.Shoot{} if err := util.Decode(v.decoder, req.OldObject.Raw, oldShoot); err != nil { v.Logger.Error(err, "failed to decode old shoot", "old shoot", string(req.OldObject.Raw)) diff --git a/pkg/webhook/controlplane/add.go b/pkg/webhook/controlplane/add.go index 77dab9538..89b26bd3a 100644 --- a/pkg/webhook/controlplane/add.go +++ b/pkg/webhook/controlplane/add.go @@ -16,13 +16,13 @@ package controlplane import ( "github.com/gardener/gardener-extension-provider-azure/pkg/azure" + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" "github.com/gardener/gardener/extensions/pkg/webhook/controlplane" "github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" appsv1 "k8s.io/api/apps/v1" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" ) @@ -36,7 +36,7 @@ func AddToManager(mgr manager.Manager) (*extensionswebhook.Webhook, error) { return controlplane.New(mgr, controlplane.Args{ Kind: controlplane.KindShoot, Provider: azure.Type, - Types: []runtime.Object{&appsv1.Deployment{}, &extensionsv1alpha1.OperatingSystemConfig{}}, + Types: []client.Object{&appsv1.Deployment{}, &extensionsv1alpha1.OperatingSystemConfig{}}, Mutator: genericmutator.NewMutator(NewEnsurer(logger), controlplane.NewUnitSerializer(), controlplane.NewKubeletConfigCodec(fciCodec), fciCodec, logger), }) diff --git a/pkg/webhook/controlplaneexposure/add.go b/pkg/webhook/controlplaneexposure/add.go index e9275797a..e8cc7ad17 100644 --- a/pkg/webhook/controlplaneexposure/add.go +++ b/pkg/webhook/controlplaneexposure/add.go @@ -15,16 +15,16 @@ package controlplaneexposure import ( - druidv1alpha1 "github.com/gardener/etcd-druid/api/v1alpha1" "github.com/gardener/gardener-extension-provider-azure/pkg/apis/config" "github.com/gardener/gardener-extension-provider-azure/pkg/azure" + + druidv1alpha1 "github.com/gardener/etcd-druid/api/v1alpha1" extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" "github.com/gardener/gardener/extensions/pkg/webhook/controlplane" "github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator" - appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" ) @@ -48,7 +48,7 @@ func AddToManagerWithOptions(mgr manager.Manager, opts AddOptions) (*extensionsw return controlplane.New(mgr, controlplane.Args{ Kind: controlplane.KindSeed, Provider: azure.Type, - Types: []runtime.Object{&appsv1.Deployment{}, &corev1.Service{}, &druidv1alpha1.Etcd{}}, + Types: []client.Object{&appsv1.Deployment{}, &corev1.Service{}, &druidv1alpha1.Etcd{}}, Mutator: genericmutator.NewMutator(NewEnsurer(&opts.ETCDStorage, logger), nil, nil, nil, logger), }) } diff --git a/pkg/webhook/network/add.go b/pkg/webhook/network/add.go index 31c6d003e..4199c86ba 100644 --- a/pkg/webhook/network/add.go +++ b/pkg/webhook/network/add.go @@ -16,12 +16,12 @@ package network import ( "github.com/gardener/gardener-extension-provider-azure/pkg/azure" - extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" - "github.com/gardener/gardener/extensions/pkg/webhook/network" "github.com/gardener/gardener-extension-networking-calico/pkg/calico" + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + "github.com/gardener/gardener/extensions/pkg/webhook/network" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" ) @@ -34,7 +34,7 @@ func AddToManager(mgr manager.Manager) (*extensionswebhook.Webhook, error) { return network.New(mgr, network.Args{ CloudProvider: azure.Type, NetworkProvider: calico.Type, - Types: []runtime.Object{&extensionsv1alpha1.Network{}}, + Types: []client.Object{&extensionsv1alpha1.Network{}}, Mutator: network.NewMutator(logger, mutateNetworkConfig), }) } diff --git a/test/integration/infrastructure/infrastructure_test.go b/test/integration/infrastructure/infrastructure_test.go index ae6dfd85d..7643a9d6c 100644 --- a/test/integration/infrastructure/infrastructure_test.go +++ b/test/integration/infrastructure/infrastructure_test.go @@ -212,7 +212,7 @@ var _ = Describe("Infrastructure tests", func() { By("start manager") go func() { - err := mgr.Start(mgrContext.Done()) + err := mgr.Start(mgrContext) Expect(err).ToNot(HaveOccurred()) }() @@ -487,7 +487,7 @@ func runTest( ctx, c, logger, - func() runtime.Object { return &extensionsv1alpha1.Infrastructure{} }, + func() client.Object { return &extensionsv1alpha1.Infrastructure{} }, extensionsv1alpha1.InfrastructureResource, infra.Namespace, infra.Name, diff --git a/test/tm/generator.go b/test/tm/generator.go index 1e1674d15..2022c5a68 100644 --- a/test/tm/generator.go +++ b/test/tm/generator.go @@ -22,9 +22,9 @@ import ( "strconv" "github.com/gardener/gardener-extension-provider-azure/pkg/apis/azure/v1alpha1" - "github.com/go-logr/logr" "github.com/gardener/gardener/extensions/test/tm/generator" + "github.com/go-logr/logr" "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" log "sigs.k8s.io/controller-runtime/pkg/log" @@ -64,7 +64,7 @@ func addFlags() { func main() { addFlags() flag.Parse() - log.SetLogger(zap.Logger(false)) + log.SetLogger(zap.New(zap.UseDevMode(false))) logger = log.Log.WithName("azure-generator") if err := validate(); err != nil { logger.Error(err, "error validating input flags") diff --git a/vendor/github.com/cespare/xxhash/v2/.travis.yml b/vendor/github.com/cespare/xxhash/v2/.travis.yml new file mode 100644 index 000000000..c516ea88d --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/.travis.yml @@ -0,0 +1,8 @@ +language: go +go: + - "1.x" + - master +env: + - TAGS="" + - TAGS="-tags purego" +script: go test $TAGS -v ./... diff --git a/vendor/honnef.co/go/tools/LICENSE b/vendor/github.com/cespare/xxhash/v2/LICENSE.txt similarity index 95% rename from vendor/honnef.co/go/tools/LICENSE rename to vendor/github.com/cespare/xxhash/v2/LICENSE.txt index dfd031454..24b53065f 100644 --- a/vendor/honnef.co/go/tools/LICENSE +++ b/vendor/github.com/cespare/xxhash/v2/LICENSE.txt @@ -1,4 +1,6 @@ -Copyright (c) 2016 Dominik Honnef +Copyright (c) 2016 Caleb Spare + +MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/vendor/github.com/cespare/xxhash/v2/README.md b/vendor/github.com/cespare/xxhash/v2/README.md new file mode 100644 index 000000000..2fd8693c2 --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/README.md @@ -0,0 +1,67 @@ +# xxhash + +[![GoDoc](https://godoc.org/github.com/cespare/xxhash?status.svg)](https://godoc.org/github.com/cespare/xxhash) +[![Build Status](https://travis-ci.org/cespare/xxhash.svg?branch=master)](https://travis-ci.org/cespare/xxhash) + +xxhash is a Go implementation of the 64-bit +[xxHash](http://cyan4973.github.io/xxHash/) algorithm, XXH64. This is a +high-quality hashing algorithm that is much faster than anything in the Go +standard library. + +This package provides a straightforward API: + +``` +func Sum64(b []byte) uint64 +func Sum64String(s string) uint64 +type Digest struct{ ... } + func New() *Digest +``` + +The `Digest` type implements hash.Hash64. Its key methods are: + +``` +func (*Digest) Write([]byte) (int, error) +func (*Digest) WriteString(string) (int, error) +func (*Digest) Sum64() uint64 +``` + +This implementation provides a fast pure-Go implementation and an even faster +assembly implementation for amd64. + +## Compatibility + +This package is in a module and the latest code is in version 2 of the module. +You need a version of Go with at least "minimal module compatibility" to use +github.com/cespare/xxhash/v2: + +* 1.9.7+ for Go 1.9 +* 1.10.3+ for Go 1.10 +* Go 1.11 or later + +I recommend using the latest release of Go. + +## Benchmarks + +Here are some quick benchmarks comparing the pure-Go and assembly +implementations of Sum64. + +| input size | purego | asm | +| --- | --- | --- | +| 5 B | 979.66 MB/s | 1291.17 MB/s | +| 100 B | 7475.26 MB/s | 7973.40 MB/s | +| 4 KB | 17573.46 MB/s | 17602.65 MB/s | +| 10 MB | 17131.46 MB/s | 17142.16 MB/s | + +These numbers were generated on Ubuntu 18.04 with an Intel i7-8700K CPU using +the following commands under Go 1.11.2: + +``` +$ go test -tags purego -benchtime 10s -bench '/xxhash,direct,bytes' +$ go test -benchtime 10s -bench '/xxhash,direct,bytes' +``` + +## Projects using this package + +- [InfluxDB](https://github.com/influxdata/influxdb) +- [Prometheus](https://github.com/prometheus/prometheus) +- [FreeCache](https://github.com/coocood/freecache) diff --git a/vendor/github.com/cespare/xxhash/v2/go.mod b/vendor/github.com/cespare/xxhash/v2/go.mod new file mode 100644 index 000000000..49f67608b --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/go.mod @@ -0,0 +1,3 @@ +module github.com/cespare/xxhash/v2 + +go 1.11 diff --git a/vendor/github.com/cespare/xxhash/v2/go.sum b/vendor/github.com/cespare/xxhash/v2/go.sum new file mode 100644 index 000000000..e69de29bb diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash.go b/vendor/github.com/cespare/xxhash/v2/xxhash.go new file mode 100644 index 000000000..db0b35fbe --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/xxhash.go @@ -0,0 +1,236 @@ +// Package xxhash implements the 64-bit variant of xxHash (XXH64) as described +// at http://cyan4973.github.io/xxHash/. +package xxhash + +import ( + "encoding/binary" + "errors" + "math/bits" +) + +const ( + prime1 uint64 = 11400714785074694791 + prime2 uint64 = 14029467366897019727 + prime3 uint64 = 1609587929392839161 + prime4 uint64 = 9650029242287828579 + prime5 uint64 = 2870177450012600261 +) + +// NOTE(caleb): I'm using both consts and vars of the primes. Using consts where +// possible in the Go code is worth a small (but measurable) performance boost +// by avoiding some MOVQs. Vars are needed for the asm and also are useful for +// convenience in the Go code in a few places where we need to intentionally +// avoid constant arithmetic (e.g., v1 := prime1 + prime2 fails because the +// result overflows a uint64). +var ( + prime1v = prime1 + prime2v = prime2 + prime3v = prime3 + prime4v = prime4 + prime5v = prime5 +) + +// Digest implements hash.Hash64. +type Digest struct { + v1 uint64 + v2 uint64 + v3 uint64 + v4 uint64 + total uint64 + mem [32]byte + n int // how much of mem is used +} + +// New creates a new Digest that computes the 64-bit xxHash algorithm. +func New() *Digest { + var d Digest + d.Reset() + return &d +} + +// Reset clears the Digest's state so that it can be reused. +func (d *Digest) Reset() { + d.v1 = prime1v + prime2 + d.v2 = prime2 + d.v3 = 0 + d.v4 = -prime1v + d.total = 0 + d.n = 0 +} + +// Size always returns 8 bytes. +func (d *Digest) Size() int { return 8 } + +// BlockSize always returns 32 bytes. +func (d *Digest) BlockSize() int { return 32 } + +// Write adds more data to d. It always returns len(b), nil. +func (d *Digest) Write(b []byte) (n int, err error) { + n = len(b) + d.total += uint64(n) + + if d.n+n < 32 { + // This new data doesn't even fill the current block. + copy(d.mem[d.n:], b) + d.n += n + return + } + + if d.n > 0 { + // Finish off the partial block. + copy(d.mem[d.n:], b) + d.v1 = round(d.v1, u64(d.mem[0:8])) + d.v2 = round(d.v2, u64(d.mem[8:16])) + d.v3 = round(d.v3, u64(d.mem[16:24])) + d.v4 = round(d.v4, u64(d.mem[24:32])) + b = b[32-d.n:] + d.n = 0 + } + + if len(b) >= 32 { + // One or more full blocks left. + nw := writeBlocks(d, b) + b = b[nw:] + } + + // Store any remaining partial block. + copy(d.mem[:], b) + d.n = len(b) + + return +} + +// Sum appends the current hash to b and returns the resulting slice. +func (d *Digest) Sum(b []byte) []byte { + s := d.Sum64() + return append( + b, + byte(s>>56), + byte(s>>48), + byte(s>>40), + byte(s>>32), + byte(s>>24), + byte(s>>16), + byte(s>>8), + byte(s), + ) +} + +// Sum64 returns the current hash. +func (d *Digest) Sum64() uint64 { + var h uint64 + + if d.total >= 32 { + v1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4 + h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4) + h = mergeRound(h, v1) + h = mergeRound(h, v2) + h = mergeRound(h, v3) + h = mergeRound(h, v4) + } else { + h = d.v3 + prime5 + } + + h += d.total + + i, end := 0, d.n + for ; i+8 <= end; i += 8 { + k1 := round(0, u64(d.mem[i:i+8])) + h ^= k1 + h = rol27(h)*prime1 + prime4 + } + if i+4 <= end { + h ^= uint64(u32(d.mem[i:i+4])) * prime1 + h = rol23(h)*prime2 + prime3 + i += 4 + } + for i < end { + h ^= uint64(d.mem[i]) * prime5 + h = rol11(h) * prime1 + i++ + } + + h ^= h >> 33 + h *= prime2 + h ^= h >> 29 + h *= prime3 + h ^= h >> 32 + + return h +} + +const ( + magic = "xxh\x06" + marshaledSize = len(magic) + 8*5 + 32 +) + +// MarshalBinary implements the encoding.BinaryMarshaler interface. +func (d *Digest) MarshalBinary() ([]byte, error) { + b := make([]byte, 0, marshaledSize) + b = append(b, magic...) + b = appendUint64(b, d.v1) + b = appendUint64(b, d.v2) + b = appendUint64(b, d.v3) + b = appendUint64(b, d.v4) + b = appendUint64(b, d.total) + b = append(b, d.mem[:d.n]...) + b = b[:len(b)+len(d.mem)-d.n] + return b, nil +} + +// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. +func (d *Digest) UnmarshalBinary(b []byte) error { + if len(b) < len(magic) || string(b[:len(magic)]) != magic { + return errors.New("xxhash: invalid hash state identifier") + } + if len(b) != marshaledSize { + return errors.New("xxhash: invalid hash state size") + } + b = b[len(magic):] + b, d.v1 = consumeUint64(b) + b, d.v2 = consumeUint64(b) + b, d.v3 = consumeUint64(b) + b, d.v4 = consumeUint64(b) + b, d.total = consumeUint64(b) + copy(d.mem[:], b) + b = b[len(d.mem):] + d.n = int(d.total % uint64(len(d.mem))) + return nil +} + +func appendUint64(b []byte, x uint64) []byte { + var a [8]byte + binary.LittleEndian.PutUint64(a[:], x) + return append(b, a[:]...) +} + +func consumeUint64(b []byte) ([]byte, uint64) { + x := u64(b) + return b[8:], x +} + +func u64(b []byte) uint64 { return binary.LittleEndian.Uint64(b) } +func u32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) } + +func round(acc, input uint64) uint64 { + acc += input * prime2 + acc = rol31(acc) + acc *= prime1 + return acc +} + +func mergeRound(acc, val uint64) uint64 { + val = round(0, val) + acc ^= val + acc = acc*prime1 + prime4 + return acc +} + +func rol1(x uint64) uint64 { return bits.RotateLeft64(x, 1) } +func rol7(x uint64) uint64 { return bits.RotateLeft64(x, 7) } +func rol11(x uint64) uint64 { return bits.RotateLeft64(x, 11) } +func rol12(x uint64) uint64 { return bits.RotateLeft64(x, 12) } +func rol18(x uint64) uint64 { return bits.RotateLeft64(x, 18) } +func rol23(x uint64) uint64 { return bits.RotateLeft64(x, 23) } +func rol27(x uint64) uint64 { return bits.RotateLeft64(x, 27) } +func rol31(x uint64) uint64 { return bits.RotateLeft64(x, 31) } diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.go b/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.go new file mode 100644 index 000000000..ad14b807f --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.go @@ -0,0 +1,13 @@ +// +build !appengine +// +build gc +// +build !purego + +package xxhash + +// Sum64 computes the 64-bit xxHash digest of b. +// +//go:noescape +func Sum64(b []byte) uint64 + +//go:noescape +func writeBlocks(d *Digest, b []byte) int diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s b/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s new file mode 100644 index 000000000..d580e32ae --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s @@ -0,0 +1,215 @@ +// +build !appengine +// +build gc +// +build !purego + +#include "textflag.h" + +// Register allocation: +// AX h +// CX pointer to advance through b +// DX n +// BX loop end +// R8 v1, k1 +// R9 v2 +// R10 v3 +// R11 v4 +// R12 tmp +// R13 prime1v +// R14 prime2v +// R15 prime4v + +// round reads from and advances the buffer pointer in CX. +// It assumes that R13 has prime1v and R14 has prime2v. +#define round(r) \ + MOVQ (CX), R12 \ + ADDQ $8, CX \ + IMULQ R14, R12 \ + ADDQ R12, r \ + ROLQ $31, r \ + IMULQ R13, r + +// mergeRound applies a merge round on the two registers acc and val. +// It assumes that R13 has prime1v, R14 has prime2v, and R15 has prime4v. +#define mergeRound(acc, val) \ + IMULQ R14, val \ + ROLQ $31, val \ + IMULQ R13, val \ + XORQ val, acc \ + IMULQ R13, acc \ + ADDQ R15, acc + +// func Sum64(b []byte) uint64 +TEXT ·Sum64(SB), NOSPLIT, $0-32 + // Load fixed primes. + MOVQ ·prime1v(SB), R13 + MOVQ ·prime2v(SB), R14 + MOVQ ·prime4v(SB), R15 + + // Load slice. + MOVQ b_base+0(FP), CX + MOVQ b_len+8(FP), DX + LEAQ (CX)(DX*1), BX + + // The first loop limit will be len(b)-32. + SUBQ $32, BX + + // Check whether we have at least one block. + CMPQ DX, $32 + JLT noBlocks + + // Set up initial state (v1, v2, v3, v4). + MOVQ R13, R8 + ADDQ R14, R8 + MOVQ R14, R9 + XORQ R10, R10 + XORQ R11, R11 + SUBQ R13, R11 + + // Loop until CX > BX. +blockLoop: + round(R8) + round(R9) + round(R10) + round(R11) + + CMPQ CX, BX + JLE blockLoop + + MOVQ R8, AX + ROLQ $1, AX + MOVQ R9, R12 + ROLQ $7, R12 + ADDQ R12, AX + MOVQ R10, R12 + ROLQ $12, R12 + ADDQ R12, AX + MOVQ R11, R12 + ROLQ $18, R12 + ADDQ R12, AX + + mergeRound(AX, R8) + mergeRound(AX, R9) + mergeRound(AX, R10) + mergeRound(AX, R11) + + JMP afterBlocks + +noBlocks: + MOVQ ·prime5v(SB), AX + +afterBlocks: + ADDQ DX, AX + + // Right now BX has len(b)-32, and we want to loop until CX > len(b)-8. + ADDQ $24, BX + + CMPQ CX, BX + JG fourByte + +wordLoop: + // Calculate k1. + MOVQ (CX), R8 + ADDQ $8, CX + IMULQ R14, R8 + ROLQ $31, R8 + IMULQ R13, R8 + + XORQ R8, AX + ROLQ $27, AX + IMULQ R13, AX + ADDQ R15, AX + + CMPQ CX, BX + JLE wordLoop + +fourByte: + ADDQ $4, BX + CMPQ CX, BX + JG singles + + MOVL (CX), R8 + ADDQ $4, CX + IMULQ R13, R8 + XORQ R8, AX + + ROLQ $23, AX + IMULQ R14, AX + ADDQ ·prime3v(SB), AX + +singles: + ADDQ $4, BX + CMPQ CX, BX + JGE finalize + +singlesLoop: + MOVBQZX (CX), R12 + ADDQ $1, CX + IMULQ ·prime5v(SB), R12 + XORQ R12, AX + + ROLQ $11, AX + IMULQ R13, AX + + CMPQ CX, BX + JL singlesLoop + +finalize: + MOVQ AX, R12 + SHRQ $33, R12 + XORQ R12, AX + IMULQ R14, AX + MOVQ AX, R12 + SHRQ $29, R12 + XORQ R12, AX + IMULQ ·prime3v(SB), AX + MOVQ AX, R12 + SHRQ $32, R12 + XORQ R12, AX + + MOVQ AX, ret+24(FP) + RET + +// writeBlocks uses the same registers as above except that it uses AX to store +// the d pointer. + +// func writeBlocks(d *Digest, b []byte) int +TEXT ·writeBlocks(SB), NOSPLIT, $0-40 + // Load fixed primes needed for round. + MOVQ ·prime1v(SB), R13 + MOVQ ·prime2v(SB), R14 + + // Load slice. + MOVQ b_base+8(FP), CX + MOVQ b_len+16(FP), DX + LEAQ (CX)(DX*1), BX + SUBQ $32, BX + + // Load vN from d. + MOVQ d+0(FP), AX + MOVQ 0(AX), R8 // v1 + MOVQ 8(AX), R9 // v2 + MOVQ 16(AX), R10 // v3 + MOVQ 24(AX), R11 // v4 + + // We don't need to check the loop condition here; this function is + // always called with at least one block of data to process. +blockLoop: + round(R8) + round(R9) + round(R10) + round(R11) + + CMPQ CX, BX + JLE blockLoop + + // Copy vN back to d. + MOVQ R8, 0(AX) + MOVQ R9, 8(AX) + MOVQ R10, 16(AX) + MOVQ R11, 24(AX) + + // The number of bytes written is CX minus the old base pointer. + SUBQ b_base+8(FP), CX + MOVQ CX, ret+32(FP) + + RET diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_other.go b/vendor/github.com/cespare/xxhash/v2/xxhash_other.go new file mode 100644 index 000000000..4a5a82160 --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_other.go @@ -0,0 +1,76 @@ +// +build !amd64 appengine !gc purego + +package xxhash + +// Sum64 computes the 64-bit xxHash digest of b. +func Sum64(b []byte) uint64 { + // A simpler version would be + // d := New() + // d.Write(b) + // return d.Sum64() + // but this is faster, particularly for small inputs. + + n := len(b) + var h uint64 + + if n >= 32 { + v1 := prime1v + prime2 + v2 := prime2 + v3 := uint64(0) + v4 := -prime1v + for len(b) >= 32 { + v1 = round(v1, u64(b[0:8:len(b)])) + v2 = round(v2, u64(b[8:16:len(b)])) + v3 = round(v3, u64(b[16:24:len(b)])) + v4 = round(v4, u64(b[24:32:len(b)])) + b = b[32:len(b):len(b)] + } + h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4) + h = mergeRound(h, v1) + h = mergeRound(h, v2) + h = mergeRound(h, v3) + h = mergeRound(h, v4) + } else { + h = prime5 + } + + h += uint64(n) + + i, end := 0, len(b) + for ; i+8 <= end; i += 8 { + k1 := round(0, u64(b[i:i+8:len(b)])) + h ^= k1 + h = rol27(h)*prime1 + prime4 + } + if i+4 <= end { + h ^= uint64(u32(b[i:i+4:len(b)])) * prime1 + h = rol23(h)*prime2 + prime3 + i += 4 + } + for ; i < end; i++ { + h ^= uint64(b[i]) * prime5 + h = rol11(h) * prime1 + } + + h ^= h >> 33 + h *= prime2 + h ^= h >> 29 + h *= prime3 + h ^= h >> 32 + + return h +} + +func writeBlocks(d *Digest, b []byte) int { + v1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4 + n := len(b) + for len(b) >= 32 { + v1 = round(v1, u64(b[0:8:len(b)])) + v2 = round(v2, u64(b[8:16:len(b)])) + v3 = round(v3, u64(b[16:24:len(b)])) + v4 = round(v4, u64(b[24:32:len(b)])) + b = b[32:len(b):len(b)] + } + d.v1, d.v2, d.v3, d.v4 = v1, v2, v3, v4 + return n - len(b) +} diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go b/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go new file mode 100644 index 000000000..fc9bea7a3 --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_safe.go @@ -0,0 +1,15 @@ +// +build appengine + +// This file contains the safe implementations of otherwise unsafe-using code. + +package xxhash + +// Sum64String computes the 64-bit xxHash digest of s. +func Sum64String(s string) uint64 { + return Sum64([]byte(s)) +} + +// WriteString adds more data to d. It always returns len(s), nil. +func (d *Digest) WriteString(s string) (n int, err error) { + return d.Write([]byte(s)) +} diff --git a/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go b/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go new file mode 100644 index 000000000..53bf76efb --- /dev/null +++ b/vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go @@ -0,0 +1,46 @@ +// +build !appengine + +// This file encapsulates usage of unsafe. +// xxhash_safe.go contains the safe implementations. + +package xxhash + +import ( + "reflect" + "unsafe" +) + +// Notes: +// +// See https://groups.google.com/d/msg/golang-nuts/dcjzJy-bSpw/tcZYBzQqAQAJ +// for some discussion about these unsafe conversions. +// +// In the future it's possible that compiler optimizations will make these +// unsafe operations unnecessary: https://golang.org/issue/2205. +// +// Both of these wrapper functions still incur function call overhead since they +// will not be inlined. We could write Go/asm copies of Sum64 and Digest.Write +// for strings to squeeze out a bit more speed. Mid-stack inlining should +// eventually fix this. + +// Sum64String computes the 64-bit xxHash digest of s. +// It may be faster than Sum64([]byte(s)) by avoiding a copy. +func Sum64String(s string) uint64 { + var b []byte + bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) + bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data + bh.Len = len(s) + bh.Cap = len(s) + return Sum64(b) +} + +// WriteString adds more data to d. It always returns len(s), nil. +// It may be faster than Write([]byte(s)) by avoiding a copy. +func (d *Digest) WriteString(s string) (n int, err error) { + var b []byte + bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) + bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data + bh.Len = len(s) + bh.Cap = len(s) + return d.Write(b) +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/controller.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/controller.go index 9bf7314eb..710dcc070 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/controller.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/controller.go @@ -88,7 +88,10 @@ func add(mgr manager.Manager, args AddArgs, predicates []predicate.Predicate) er } if args.IgnoreOperationAnnotation { - if err := ctrl.Watch(&source.Kind{Type: &corev1.Secret{}}, &extensionshandler.EnqueueRequestsFromMapFunc{ToRequests: extensionshandler.SimpleMapper(SecretToBackupBucketMapper(predicates), extensionshandler.UpdateWithNew)}); err != nil { + if err := ctrl.Watch( + &source.Kind{Type: &corev1.Secret{}}, + extensionshandler.EnqueueRequestsFromMapper(SecretToBackupBucketMapper(predicates), extensionshandler.UpdateWithNew), + ); err != nil { return err } } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/mapper.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/mapper.go index 13edbe4b5..8623a3e92 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/mapper.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/mapper.go @@ -17,16 +17,16 @@ package backupbucket import ( "context" - extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" + + extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" + extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) type secretToBackupBucketMapper struct { @@ -48,12 +48,8 @@ func (m *secretToBackupBucketMapper) InjectFunc(f inject.Func) error { return nil } -func (m *secretToBackupBucketMapper) Map(obj handler.MapObject) []reconcile.Request { - if obj.Object == nil { - return nil - } - - secret, ok := obj.Object.(*corev1.Secret) +func (m *secretToBackupBucketMapper) Map(obj client.Object) []reconcile.Request { + secret, ok := obj.(*corev1.Secret) if !ok { return nil } @@ -80,6 +76,6 @@ func (m *secretToBackupBucketMapper) Map(obj handler.MapObject) []reconcile.Requ // SecretToBackupBucketMapper returns a mapper that returns requests for BackupBucket whose // referenced secrets have been modified. -func SecretToBackupBucketMapper(predicates []predicate.Predicate) handler.Mapper { +func SecretToBackupBucketMapper(predicates []predicate.Predicate) extensionshandler.Mapper { return &secretToBackupBucketMapper{predicates: predicates} } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/reconciler.go index f41b08002..791808cbb 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupbucket/reconciler.go @@ -18,12 +18,6 @@ import ( "context" "fmt" - extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" - gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - contextutil "github.com/gardener/gardener/pkg/utils/context" - "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" @@ -34,6 +28,11 @@ import ( "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" + + extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) const ( @@ -47,7 +46,6 @@ type reconciler struct { logger logr.Logger actuator Actuator - ctx context.Context client client.Client recorder record.EventRecorder } @@ -56,7 +54,7 @@ type reconciler struct { // BackupBucket resources of Gardener's `extensions.gardener.cloud` API group. func NewReconciler(mgr manager.Manager, actuator Actuator) reconcile.Reconciler { return extensionscontroller.OperationAnnotationWrapper( - &extensionsv1alpha1.BackupBucket{}, + func() client.Object { return &extensionsv1alpha1.BackupBucket{} }, &reconciler{ logger: log.Log.WithName(ControllerName), actuator: actuator, @@ -73,14 +71,9 @@ func (r *reconciler) InjectClient(client client.Client) error { return nil } -func (r *reconciler) InjectStopChannel(stopCh <-chan struct{}) error { - r.ctx = contextutil.FromStopChannel(stopCh) - return nil -} - -func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { bb := &extensionsv1alpha1.BackupBucket{} - if err := r.client.Get(r.ctx, request.NamespacedName, bb); err != nil { + if err := r.client.Get(ctx, request.NamespacedName, bb); err != nil { if errors.IsNotFound(err) { return reconcile.Result{}, nil } @@ -88,14 +81,14 @@ func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err } if bb.DeletionTimestamp != nil { - return r.delete(r.ctx, bb) + return r.delete(ctx, bb) } - return r.reconcile(r.ctx, bb) + return r.reconcile(ctx, bb) } func (r *reconciler) reconcile(ctx context.Context, bb *extensionsv1alpha1.BackupBucket) (reconcile.Result, error) { - if err := extensionscontroller.EnsureFinalizer(ctx, r.client, FinalizerName, bb); err != nil { + if err := extensionscontroller.EnsureFinalizer(ctx, r.client, bb, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("failed to ensure finalizer on backup bucket: %+v", err) } @@ -108,7 +101,7 @@ func (r *reconciler) reconcile(ctx context.Context, bb *extensionsv1alpha1.Backu if err != nil { return reconcile.Result{}, fmt.Errorf("failed to get backup bucket secret: %+v", err) } - if err := extensionscontroller.EnsureFinalizer(ctx, r.client, FinalizerName, secret); err != nil { + if err := extensionscontroller.EnsureFinalizer(ctx, r.client, secret, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("failed to ensure finalizer on bucket secret: %+v", err) } @@ -147,7 +140,7 @@ func (r *reconciler) delete(ctx context.Context, bb *extensionsv1alpha1.BackupBu r.logger.Info("Starting the deletion of backupbucket", "backupbucket", bb.Name) r.recorder.Event(bb, corev1.EventTypeNormal, EventBackupBucketDeletion, "Deleting the backupbucket") - if err := r.actuator.Delete(r.ctx, bb); err != nil { + if err := r.actuator.Delete(ctx, bb); err != nil { msg := "Error deleting backupbucket" r.recorder.Eventf(bb, corev1.EventTypeWarning, EventBackupBucketDeletion, "%s: %+v", msg, err) _ = r.updateStatusError(ctx, extensionscontroller.ReconcileErrCauseOrErr(err), bb, operationType, msg) @@ -165,12 +158,12 @@ func (r *reconciler) delete(ctx context.Context, bb *extensionsv1alpha1.BackupBu if err != nil { return reconcile.Result{}, fmt.Errorf("failed to get backup bucket secret: %+v", err) } - if err := extensionscontroller.DeleteFinalizer(ctx, r.client, FinalizerName, secret); err != nil { + if err := extensionscontroller.DeleteFinalizer(ctx, r.client, secret, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("failed to remove finalizer on bucket secret: %+v", err) } r.logger.Info("Removing finalizer.", "backupbucket", bb.Name) - if err := extensionscontroller.DeleteFinalizer(ctx, r.client, FinalizerName, bb); err != nil { + if err := extensionscontroller.DeleteFinalizer(ctx, r.client, bb, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("error removing finalizer from backupbucket: %+v", err) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/controller.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/controller.go index 701d988bd..29a37d6a3 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/controller.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/controller.go @@ -15,16 +15,16 @@ package backupentry import ( - extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" - extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" - - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" corev1 "k8s.io/api/core/v1" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/source" + + extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" + extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) const ( @@ -88,17 +88,15 @@ func add(mgr manager.Manager, args AddArgs, predicates []predicate.Predicate) er if args.IgnoreOperationAnnotation { if err := ctrl.Watch( &source.Kind{Type: &corev1.Namespace{}}, - &extensionshandler.EnqueueRequestsFromMapFunc{ - ToRequests: extensionshandler.SimpleMapper(NamespaceToBackupEntryMapper(mgr.GetClient(), predicates), extensionshandler.UpdateWithNew), - }); err != nil { + extensionshandler.EnqueueRequestsFromMapper(NamespaceToBackupEntryMapper(mgr.GetClient(), predicates), extensionshandler.UpdateWithNew), + ); err != nil { return err } if err := ctrl.Watch( &source.Kind{Type: &corev1.Secret{}}, - &extensionshandler.EnqueueRequestsFromMapFunc{ - ToRequests: extensionshandler.SimpleMapper(SecretToBackupEntryMapper(mgr.GetClient(), predicates), extensionshandler.UpdateWithNew), - }); err != nil { + extensionshandler.EnqueueRequestsFromMapper(SecretToBackupEntryMapper(mgr.GetClient(), predicates), extensionshandler.UpdateWithNew), + ); err != nil { return err } } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/mapper.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/mapper.go index 5e287fe99..0f6bfe1a2 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/mapper.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/mapper.go @@ -17,16 +17,16 @@ package backupentry import ( "context" - extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" - - v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" + + extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" + extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) type secretToBackupEntryMapper struct { @@ -34,12 +34,8 @@ type secretToBackupEntryMapper struct { predicates []predicate.Predicate } -func (m *secretToBackupEntryMapper) Map(obj handler.MapObject) []reconcile.Request { - if obj.Object == nil { - return nil - } - - secret, ok := obj.Object.(*corev1.Secret) +func (m *secretToBackupEntryMapper) Map(obj client.Object) []reconcile.Request { + secret, ok := obj.(*corev1.Secret) if !ok { return nil } @@ -67,7 +63,7 @@ func (m *secretToBackupEntryMapper) Map(obj handler.MapObject) []reconcile.Reque // SecretToBackupEntryMapper returns a mapper that returns requests for BackupEntry whose // referenced secrets have been modified. -func SecretToBackupEntryMapper(client client.Client, predicates []predicate.Predicate) handler.Mapper { +func SecretToBackupEntryMapper(client client.Client, predicates []predicate.Predicate) extensionshandler.Mapper { return &secretToBackupEntryMapper{client, predicates} } @@ -76,12 +72,8 @@ type namespaceToBackupEntryMapper struct { predicates []predicate.Predicate } -func (m *namespaceToBackupEntryMapper) Map(obj handler.MapObject) []reconcile.Request { - if obj.Object == nil { - return nil - } - - namespace, ok := obj.Object.(*corev1.Namespace) +func (m *namespaceToBackupEntryMapper) Map(obj client.Object) []reconcile.Request { + namespace, ok := obj.(*corev1.Namespace) if !ok { return nil } @@ -116,7 +108,7 @@ func (m *namespaceToBackupEntryMapper) Map(obj handler.MapObject) []reconcile.Re // NamespaceToBackupEntryMapper returns a mapper that returns requests for BackupEntry whose // associated Shoot's seed namespace have been modified. -func NamespaceToBackupEntryMapper(client client.Client, predicates []predicate.Predicate) handler.Mapper { +func NamespaceToBackupEntryMapper(client client.Client, predicates []predicate.Predicate) extensionshandler.Mapper { return &namespaceToBackupEntryMapper{client, predicates} } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/reconciler.go index e379a9561..d630835bf 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/backupentry/reconciler.go @@ -18,13 +18,6 @@ import ( "context" "fmt" - extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" - v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" - gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - contextutil "github.com/gardener/gardener/pkg/utils/context" - "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -35,6 +28,12 @@ import ( "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" + + extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) const ( @@ -52,7 +51,6 @@ type reconciler struct { logger logr.Logger actuator Actuator - ctx context.Context client client.Client recorder record.EventRecorder } @@ -61,7 +59,7 @@ type reconciler struct { // backupentry resources of Gardener's `extensions.gardener.cloud` API group. func NewReconciler(mgr manager.Manager, actuator Actuator) reconcile.Reconciler { return extensionscontroller.OperationAnnotationWrapper( - &extensionsv1alpha1.BackupEntry{}, + func() client.Object { return &extensionsv1alpha1.BackupEntry{} }, &reconciler{ logger: log.Log.WithName(ControllerName), actuator: actuator, @@ -78,14 +76,9 @@ func (r *reconciler) InjectClient(client client.Client) error { return nil } -func (r *reconciler) InjectStopChannel(stopCh <-chan struct{}) error { - r.ctx = contextutil.FromStopChannel(stopCh) - return nil -} - -func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { be := &extensionsv1alpha1.BackupEntry{} - if err := r.client.Get(r.ctx, request.NamespacedName, be); err != nil { + if err := r.client.Get(ctx, request.NamespacedName, be); err != nil { if apierrors.IsNotFound(err) { return reconcile.Result{}, nil } @@ -93,7 +86,7 @@ func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err } shootTechnicalID, _ := ExtractShootDetailsFromBackupEntryName(be.Name) - shoot, err := extensionscontroller.GetShoot(r.ctx, r.client, shootTechnicalID) + shoot, err := extensionscontroller.GetShoot(ctx, r.client, shootTechnicalID) // As BackupEntry continues to exist post deletion of a Shoot, // we do not want to block its deletion when the Cluster is not found. if client.IgnoreNotFound(err) != nil { @@ -111,18 +104,18 @@ func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err case extensionscontroller.IsMigrated(be): return reconcile.Result{}, nil case operationType == gardencorev1beta1.LastOperationTypeMigrate: - return r.migrate(r.ctx, be) + return r.migrate(ctx, be) case be.DeletionTimestamp != nil: - return r.delete(r.ctx, be) + return r.delete(ctx, be) case be.Annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationRestore: - return r.restore(r.ctx, be) + return r.restore(ctx, be) default: - return r.reconcile(r.ctx, be, operationType) + return r.reconcile(ctx, be, operationType) } } func (r *reconciler) reconcile(ctx context.Context, be *extensionsv1alpha1.BackupEntry, operationType gardencorev1beta1.LastOperationType) (reconcile.Result, error) { - if err := extensionscontroller.EnsureFinalizer(ctx, r.client, FinalizerName, be); err != nil { + if err := extensionscontroller.EnsureFinalizer(ctx, r.client, be, FinalizerName); err != nil { return reconcile.Result{}, err } @@ -134,7 +127,7 @@ func (r *reconciler) reconcile(ctx context.Context, be *extensionsv1alpha1.Backu if err != nil { return reconcile.Result{}, fmt.Errorf("failed to get backup entry secret: %+v", err) } - if err := extensionscontroller.EnsureFinalizer(ctx, r.client, FinalizerName, secret); err != nil { + if err := extensionscontroller.EnsureFinalizer(ctx, r.client, secret, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("failed to ensure finalizer on backup entry secret: %+v", err) } @@ -157,7 +150,7 @@ func (r *reconciler) reconcile(ctx context.Context, be *extensionsv1alpha1.Backu } func (r *reconciler) restore(ctx context.Context, be *extensionsv1alpha1.BackupEntry) (reconcile.Result, error) { - if err := extensionscontroller.EnsureFinalizer(ctx, r.client, FinalizerName, be); err != nil { + if err := extensionscontroller.EnsureFinalizer(ctx, r.client, be, FinalizerName); err != nil { return reconcile.Result{}, err } @@ -169,7 +162,7 @@ func (r *reconciler) restore(ctx context.Context, be *extensionsv1alpha1.BackupE if err != nil { return reconcile.Result{}, fmt.Errorf("failed to get backup entry secret: %+v", err) } - if err := extensionscontroller.EnsureFinalizer(ctx, r.client, FinalizerName, secret); err != nil { + if err := extensionscontroller.EnsureFinalizer(ctx, r.client, secret, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("failed to ensure finalizer on backup entry secret: %+v", err) } @@ -221,14 +214,14 @@ func (r *reconciler) delete(ctx context.Context, be *extensionsv1alpha1.BackupEn } r.logger.Info("Skipping deletion as referred secret does not exist any more - removing finalizer.", "backupentry", be.Name) - if err := extensionscontroller.DeleteFinalizer(ctx, r.client, FinalizerName, be); err != nil { + if err := extensionscontroller.DeleteFinalizer(ctx, r.client, be, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("error removing finalizer from backupentry: %+v", err) } return reconcile.Result{}, nil } - if err := r.actuator.Delete(r.ctx, be); err != nil { + if err := r.actuator.Delete(ctx, be); err != nil { msg := "Error deleting backupentry" r.recorder.Eventf(be, corev1.EventTypeWarning, EventBackupEntryDeletion, "%s: %+v", msg, err) _ = r.updateStatusError(ctx, extensionscontroller.ReconcileErrCauseOrErr(err), be, operationType, msg) @@ -242,12 +235,12 @@ func (r *reconciler) delete(ctx context.Context, be *extensionsv1alpha1.BackupEn return reconcile.Result{}, err } - if err := extensionscontroller.DeleteFinalizer(ctx, r.client, FinalizerName, secret); err != nil { + if err := extensionscontroller.DeleteFinalizer(ctx, r.client, secret, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("failed to remove finalizer on backup entry secret: %+v", err) } r.logger.Info("Removing finalizer.", "backupentry", be.Name) - if err := extensionscontroller.DeleteFinalizer(ctx, r.client, FinalizerName, be); err != nil { + if err := extensionscontroller.DeleteFinalizer(ctx, r.client, be, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("error removing finalizer from backupentry: %+v", err) } @@ -261,7 +254,7 @@ func (r *reconciler) migrate(ctx context.Context, be *extensionsv1alpha1.BackupE r.logger.Info("Starting the migration of backupentry", "backupentry", be.Name) r.recorder.Event(be, corev1.EventTypeNormal, EventBackupEntryMigration, "Migrating the backupentry") - if err := r.actuator.Migrate(r.ctx, be); err != nil { + if err := r.actuator.Migrate(ctx, be); err != nil { msg := "Error migrating backupentry" r.recorder.Eventf(be, corev1.EventTypeWarning, EventBackupEntryMigration, "%s: %+v", msg, err) _ = r.updateStatusError(ctx, extensionscontroller.ReconcileErrCauseOrErr(err), be, gardencorev1beta1.LastOperationTypeMigrate, msg) @@ -279,7 +272,7 @@ func (r *reconciler) migrate(ctx context.Context, be *extensionsv1alpha1.BackupE if err != nil { return reconcile.Result{}, fmt.Errorf("failed to get backup entry secret: %+v", err) } - if err := extensionscontroller.DeleteFinalizer(ctx, r.client, FinalizerName, secret); err != nil { + if err := extensionscontroller.DeleteFinalizer(ctx, r.client, secret, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("failed to remove finalizer on backup entry secret: %+v", err) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/controller.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/controller.go index a08206c57..f31a66fae 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/controller.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/controller.go @@ -15,15 +15,15 @@ package controlplane import ( - extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" - extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" - - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/source" + + extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" + extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) const ( @@ -82,9 +82,10 @@ func Add(mgr manager.Manager, args AddArgs) error { predicates := extensionspredicate.AddTypePredicate(args.Predicates, args.Type) if args.IgnoreOperationAnnotation { - if err := ctrl.Watch(&source.Kind{Type: &extensionsv1alpha1.Cluster{}}, &extensionshandler.EnqueueRequestsFromMapFunc{ - ToRequests: extensionshandler.SimpleMapper(ClusterToControlPlaneMapper(predicates), extensionshandler.UpdateWithNew), - }); err != nil { + if err := ctrl.Watch( + &source.Kind{Type: &extensionsv1alpha1.Cluster{}}, + extensionshandler.EnqueueRequestsFromMapper(ClusterToControlPlaneMapper(predicates), extensionshandler.UpdateWithNew), + ); err != nil { return err } } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/genericactuator/actuator.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/genericactuator/actuator.go index 40655d70e..f3a631e61 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/genericactuator/actuator.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/genericactuator/actuator.go @@ -17,11 +17,11 @@ package genericactuator import ( "bytes" "context" - "fmt" "time" extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" "github.com/gardener/gardener/extensions/pkg/controller/controlplane" + "github.com/gardener/gardener/extensions/pkg/webhook" extensionswebhookshoot "github.com/gardener/gardener/extensions/pkg/webhook/shoot" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" @@ -474,7 +474,7 @@ func marshalWebhooks(webhooks []admissionregistrationv1beta1.MutatingWebhook, na Kind: kind, }, ObjectMeta: metav1.ObjectMeta{ - Name: fmt.Sprintf("gardener-extension-%s-shoot", name), + Name: webhook.NamePrefix + name + webhook.NameSuffixShoot, }, Webhooks: webhooks, } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/mapper.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/mapper.go index fed8ef4d0..9133e6e38 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/mapper.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/mapper.go @@ -15,16 +15,15 @@ package controlplane import ( - extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/predicate" + extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - "k8s.io/apimachinery/pkg/runtime" - "sigs.k8s.io/controller-runtime/pkg/handler" - "sigs.k8s.io/controller-runtime/pkg/predicate" ) // ClusterToControlPlaneMapper returns a mapper that returns requests for ControlPlanes whose // referenced clusters have been modified. -func ClusterToControlPlaneMapper(predicates []predicate.Predicate) handler.Mapper { - return extensionshandler.ClusterToObjectMapper(func() runtime.Object { return &extensionsv1alpha1.ControlPlaneList{} }, predicates) +func ClusterToControlPlaneMapper(predicates []predicate.Predicate) extensionshandler.Mapper { + return extensionshandler.ClusterToObjectMapper(func() client.ObjectList { return &extensionsv1alpha1.ControlPlaneList{} }, predicates) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/reconciler.go index fce60c61b..2292e740a 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/reconciler.go @@ -19,13 +19,6 @@ import ( "fmt" "time" - extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" - v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" - gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - contextutil "github.com/gardener/gardener/pkg/utils/context" - "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" @@ -36,6 +29,12 @@ import ( "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" + + extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) const ( @@ -49,14 +48,13 @@ const ( EventControlPlaneMigration string = "ControlPlaneMigration" // RequeueAfter is the duration to requeue a controlplane reconciliation if indicated by the actuator. - RequeueAfter time.Duration = 2 * time.Second + RequeueAfter = 2 * time.Second ) type reconciler struct { logger logr.Logger actuator Actuator - ctx context.Context client client.Client recorder record.EventRecorder } @@ -65,7 +63,7 @@ type reconciler struct { // controlplane resources of Gardener's `extensions.gardener.cloud` API group. func NewReconciler(mgr manager.Manager, actuator Actuator) reconcile.Reconciler { return extensionscontroller.OperationAnnotationWrapper( - &extensionsv1alpha1.ControlPlane{}, + func() client.Object { return &extensionsv1alpha1.ControlPlane{} }, &reconciler{ logger: log.Log.WithName(ControllerName), actuator: actuator, @@ -82,21 +80,16 @@ func (r *reconciler) InjectClient(client client.Client) error { return nil } -func (r *reconciler) InjectStopChannel(stopCh <-chan struct{}) error { - r.ctx = contextutil.FromStopChannel(stopCh) - return nil -} - -func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { cp := &extensionsv1alpha1.ControlPlane{} - if err := r.client.Get(r.ctx, request.NamespacedName, cp); err != nil { + if err := r.client.Get(ctx, request.NamespacedName, cp); err != nil { if errors.IsNotFound(err) { return reconcile.Result{}, nil } return reconcile.Result{}, err } - cluster, err := extensionscontroller.GetCluster(r.ctx, r.client, cp.Namespace) + cluster, err := extensionscontroller.GetCluster(ctx, r.client, cp.Namespace) if err != nil { return reconcile.Result{}, err } @@ -112,18 +105,18 @@ func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err case extensionscontroller.IsMigrated(cp): return reconcile.Result{}, nil case operationType == gardencorev1beta1.LastOperationTypeMigrate: - return r.migrate(r.ctx, cp, cluster) + return r.migrate(ctx, cp, cluster) case cp.DeletionTimestamp != nil: - return r.delete(r.ctx, cp, cluster) + return r.delete(ctx, cp, cluster) case cp.Annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationRestore: - return r.restore(r.ctx, cp, cluster) + return r.restore(ctx, cp, cluster) default: - return r.reconcile(r.ctx, cp, cluster, operationType) + return r.reconcile(ctx, cp, cluster, operationType) } } func (r *reconciler) reconcile(ctx context.Context, cp *extensionsv1alpha1.ControlPlane, cluster *extensionscontroller.Cluster, operationType gardencorev1beta1.LastOperationType) (reconcile.Result, error) { - if err := extensionscontroller.EnsureFinalizer(ctx, r.client, FinalizerName, cp); err != nil { + if err := extensionscontroller.EnsureFinalizer(ctx, r.client, cp, FinalizerName); err != nil { return reconcile.Result{}, err } @@ -154,7 +147,7 @@ func (r *reconciler) reconcile(ctx context.Context, cp *extensionsv1alpha1.Contr } func (r *reconciler) restore(ctx context.Context, cp *extensionsv1alpha1.ControlPlane, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { - if err := extensionscontroller.EnsureFinalizer(ctx, r.client, FinalizerName, cp); err != nil { + if err := extensionscontroller.EnsureFinalizer(ctx, r.client, cp, FinalizerName); err != nil { return reconcile.Result{}, err } @@ -199,7 +192,7 @@ func (r *reconciler) migrate(ctx context.Context, cp *extensionsv1alpha1.Control r.logger.Info("Starting the migration of controlplane", "controlplane", cp.Name) r.recorder.Event(cp, corev1.EventTypeNormal, EventControlPlaneMigration, "Migrating the cp") - if err := r.actuator.Migrate(r.ctx, cp, cluster); err != nil { + if err := r.actuator.Migrate(ctx, cp, cluster); err != nil { msg := "Error migrating controlplane" r.recorder.Eventf(cp, corev1.EventTypeWarning, EventControlPlaneMigration, "%s: %+v", msg, err) _ = r.updateStatusError(ctx, extensionscontroller.ReconcileErrCauseOrErr(err), cp, gardencorev1beta1.LastOperationTypeMigrate, msg) @@ -245,7 +238,7 @@ func (r *reconciler) delete(ctx context.Context, cp *extensionsv1alpha1.ControlP r.logger.Info("Starting the deletion of controlplane", "controlplane", cp.Name) r.recorder.Event(cp, corev1.EventTypeNormal, EventControlPlaneDeletion, "Deleting the cp") - if err := r.actuator.Delete(r.ctx, cp, cluster); err != nil { + if err := r.actuator.Delete(ctx, cp, cluster); err != nil { msg := "Error deleting controlplane" r.recorder.Eventf(cp, corev1.EventTypeWarning, EventControlPlaneDeletion, "%s: %+v", msg, err) _ = r.updateStatusError(ctx, extensionscontroller.ReconcileErrCauseOrErr(err), cp, operationType, msg) @@ -260,7 +253,7 @@ func (r *reconciler) delete(ctx context.Context, cp *extensionsv1alpha1.ControlP } r.logger.Info("Removing finalizer.", "controlplane", cp.Name) - if err := extensionscontroller.DeleteFinalizer(ctx, r.client, FinalizerName, cp); err != nil { + if err := extensionscontroller.DeleteFinalizer(ctx, r.client, cp, FinalizerName); err != nil { return reconcile.Result{}, fmt.Errorf("error removing finalizer from ControlPlane: %+v", err) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/csimigration/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/csimigration/reconciler.go index a6c53908b..12cd748a8 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/csimigration/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/csimigration/reconciler.go @@ -23,7 +23,6 @@ import ( gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - contextutil "github.com/gardener/gardener/pkg/utils/context" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "github.com/gardener/gardener/pkg/utils/version" @@ -45,7 +44,6 @@ const RequeueAfter = time.Minute type reconciler struct { logger logr.Logger - ctx context.Context client client.Client decoder runtime.Decoder @@ -74,14 +72,9 @@ func (r *reconciler) InjectClient(client client.Client) error { return nil } -func (r *reconciler) InjectStopChannel(stopCh <-chan struct{}) error { - r.ctx = contextutil.FromStopChannel(stopCh) - return nil -} - -func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { cluster := &extensionsv1alpha1.Cluster{} - if err := r.client.Get(r.ctx, request.NamespacedName, cluster); err != nil { + if err := r.client.Get(ctx, request.NamespacedName, cluster); err != nil { if apierrors.IsNotFound(err) { return reconcile.Result{}, nil } @@ -104,7 +97,7 @@ func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err r.logger.Info("CSI migration controller got called with cluster", "name", cluster.Name) - return r.reconcile(r.ctx, cluster, shoot) + return r.reconcile(ctx, cluster, shoot) } // NewClientForShoot is a function to create a new client for shoots. diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/actuator.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/actuator.go index f245fd94a..6505c1792 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/actuator.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/actuator.go @@ -18,12 +18,13 @@ import ( "context" "time" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" + extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/types" ) /* @@ -48,8 +49,8 @@ import ( type GetExtensionObjectFunc = func() extensionsv1alpha1.Object // GetExtensionObjectFunc returns the extension object that should be registered with the health check controller. Has to be a List. -// For example: func() runtime.Object {return &extensionsv1alpha1.WorkerList{}} -type GetExtensionObjectListFunc = func() runtime.Object +// For example: func() client.ObjectList { return &extensionsv1alpha1.WorkerList{} } +type GetExtensionObjectListFunc = func() client.ObjectList // PreCheckFunc checks whether the health check shall be performed based on the given object and cluster. type PreCheckFunc = func(runtime.Object, *extensionscontroller.Cluster) bool @@ -92,7 +93,7 @@ type Result struct { // FailedChecks is the amount of health checks that could not be performed (e.g client could not reach Api Server) // Results in a condition with with type "Unknown" with reason "ConditionCheckError" for this healthConditionType FailedChecks int - // Codes is an optional list of error codes that were produced by the the health checks. + // Codes is an optional list of error codes that were produced by the health checks. Codes []gardencorev1beta1.ErrorCode // ProgressingThreshold is the threshold duration after which a health check that reported the `Progressing` status // shall be transitioned to `False` diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/controller.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/controller.go index 5f96ade11..9cb1da3b3 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/controller.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/controller.go @@ -176,9 +176,10 @@ func add(mgr manager.Manager, args AddArgs) error { // watch Cluster of Shoot provider type (e.g aws) // this is to be notified when the Shoot is being hibernated (stop health checks) and wakes up (start health checks again) - return ctrl.Watch(&source.Kind{Type: &extensionsv1alpha1.Cluster{}}, &extensionshandler.EnqueueRequestsFromMapFunc{ - ToRequests: extensionshandler.SimpleMapper(extensionshandler.ClusterToObjectMapper(args.GetExtensionObjListFunc, predicates), extensionshandler.UpdateWithNew), - }) + return ctrl.Watch( + &source.Kind{Type: &extensionsv1alpha1.Cluster{}}, + extensionshandler.EnqueueRequestsFromMapper(extensionshandler.ClusterToObjectMapper(args.GetExtensionObjListFunc, predicates), extensionshandler.UpdateWithNew), + ) } func getHealthCheckTypes(healthChecks []ConditionTypeToHealthCheck) []string { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/reconciler.go index 2dab7b3cd..c83ff0421 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/reconciler.go @@ -19,15 +19,6 @@ import ( "fmt" "time" - "github.com/gardener/gardener/extensions/pkg/controller" - extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - "github.com/gardener/gardener/pkg/api/extensions" - gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" - gardenv1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" - gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - contextutil "github.com/gardener/gardener/pkg/utils/context" - "github.com/go-logr/logr" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -39,12 +30,18 @@ import ( "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" + + extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" + "github.com/gardener/gardener/pkg/api/extensions" + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + gardenv1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) type reconciler struct { logger logr.Logger actuator HealthCheckActuator - ctx context.Context client client.Client recorder record.EventRecorder registeredExtension RegisteredExtension @@ -81,15 +78,10 @@ func (r *reconciler) InjectClient(client client.Client) error { return nil } -func (r *reconciler) InjectStopChannel(stopCh <-chan struct{}) error { - r.ctx = contextutil.FromStopChannel(stopCh) - return nil -} - -func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { extension := r.registeredExtension.getExtensionObjFunc() - if err := r.client.Get(r.ctx, request.NamespacedName, extension); err != nil { + if err := r.client.Get(ctx, request.NamespacedName, extension); err != nil { if errors.IsNotFound(err) { return r.resultWithRequeue(), nil } @@ -111,12 +103,12 @@ func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err return reconcile.Result{}, nil } - cluster, err := extensionscontroller.GetCluster(r.ctx, r.client, acc.GetNamespace()) + cluster, err := extensionscontroller.GetCluster(ctx, r.client, acc.GetNamespace()) if err != nil { return reconcile.Result{}, err } - if controller.IsHibernated(cluster) { + if extensionscontroller.IsHibernated(cluster) { var conditions []condition for _, healthConditionType := range r.registeredExtension.healthConditionTypes { conditionBuilder, err := gardencorev1beta1helper.NewConditionBuilder(gardencorev1beta1.ConditionType(healthConditionType)) @@ -126,7 +118,7 @@ func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err conditions = append(conditions, extensionConditionHibernated(conditionBuilder, healthConditionType)) } - if err := r.updateExtensionConditions(r.ctx, extension, conditions...); err != nil { + if err := r.updateExtensionConditions(ctx, extension, conditions...); err != nil { return reconcile.Result{}, err } @@ -135,7 +127,7 @@ func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err } r.logger.V(6).Info("Performing health check", "name", acc.GetName(), "namespace", acc.GetNamespace(), "kind", acc.GetObjectKind().GroupVersionKind().Kind) - return r.performHealthCheck(r.ctx, request, extension) + return r.performHealthCheck(ctx, request, extension) } func (r *reconciler) performHealthCheck(ctx context.Context, request reconcile.Request, extension extensionsv1alpha1.Object) (reconcile.Result, error) { @@ -164,7 +156,7 @@ func (r *reconciler) performHealthCheck(ctx context.Context, request reconcile.R return reconcile.Result{}, err } - var logger logr.InfoLogger + var logger logr.Logger if healthCheckResult.Status == gardencorev1beta1.ConditionTrue || healthCheckResult.Status == gardencorev1beta1.ConditionProgressing { logger = r.logger.V(6) } else { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/controller.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/controller.go index f4f0c54b4..74b4ba0f4 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/controller.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/controller.go @@ -15,16 +15,16 @@ package infrastructure import ( - extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" - extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" - - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/source" + + extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" + extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" + extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) const ( @@ -97,18 +97,14 @@ func add(mgr manager.Manager, args AddArgs) error { // do not watch cluster if respect operation annotation to prevent unwanted reconciliations in case the operation annotation // is already present & the extension CRD is already deleting if args.IgnoreOperationAnnotation { - if err := ctrl.Watch(&source.Kind{Type: &extensionsv1alpha1.Cluster{}}, &extensionshandler.EnqueueRequestsFromMapFunc{ - ToRequests: extensionshandler.SimpleMapper(ClusterToInfrastructureMapper(predicates), extensionshandler.UpdateWithNew), - }); err != nil { + if err := ctrl.Watch( + &source.Kind{Type: &extensionsv1alpha1.Cluster{}}, + extensionshandler.EnqueueRequestsFromMapper(ClusterToInfrastructureMapper(predicates), extensionshandler.UpdateWithNew), + ); err != nil { return err } } // Add additional watches to the controller besides the standard one. - err = args.WatchBuilder.AddToController(ctrl) - if err != nil { - return err - } - - return nil + return args.WatchBuilder.AddToController(ctrl) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/mapper.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/mapper.go index 7ba39b5de..7d6b3b348 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/mapper.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/mapper.go @@ -15,16 +15,15 @@ package infrastructure import ( - extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/predicate" + extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - "k8s.io/apimachinery/pkg/runtime" - "sigs.k8s.io/controller-runtime/pkg/handler" - "sigs.k8s.io/controller-runtime/pkg/predicate" ) // ClusterToInfrastructureMapper returns a mapper that returns requests for Infrastructures whose // referenced clusters have been modified. -func ClusterToInfrastructureMapper(predicates []predicate.Predicate) handler.Mapper { - return extensionshandler.ClusterToObjectMapper(func() runtime.Object { return &extensionsv1alpha1.InfrastructureList{} }, predicates) +func ClusterToInfrastructureMapper(predicates []predicate.Predicate) extensionshandler.Mapper { + return extensionshandler.ClusterToObjectMapper(func() client.ObjectList { return &extensionsv1alpha1.InfrastructureList{} }, predicates) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go index 86d35daef..5e7223fb5 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go @@ -23,7 +23,6 @@ import ( v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - contextutil "github.com/gardener/gardener/pkg/utils/context" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "github.com/go-logr/logr" @@ -54,7 +53,6 @@ type reconciler struct { logger logr.Logger actuator Actuator - ctx context.Context client client.Client recorder record.EventRecorder } @@ -63,7 +61,7 @@ type reconciler struct { // infrastructure resources of Gardener's `extensions.gardener.cloud` API group. func NewReconciler(mgr manager.Manager, actuator Actuator) reconcile.Reconciler { return extensionscontroller.OperationAnnotationWrapper( - &extensionsv1alpha1.Infrastructure{}, + func() client.Object { return &extensionsv1alpha1.Infrastructure{} }, &reconciler{ logger: log.Log.WithName(ControllerName), actuator: actuator, @@ -81,21 +79,16 @@ func (r *reconciler) InjectClient(client client.Client) error { return nil } -func (r *reconciler) InjectStopChannel(stopCh <-chan struct{}) error { - r.ctx = contextutil.FromStopChannel(stopCh) - return nil -} - -func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { infrastructure := &extensionsv1alpha1.Infrastructure{} - if err := r.client.Get(r.ctx, request.NamespacedName, infrastructure); err != nil { + if err := r.client.Get(ctx, request.NamespacedName, infrastructure); err != nil { if errors.IsNotFound(err) { return reconcile.Result{}, nil } return reconcile.Result{}, err } - cluster, err := extensionscontroller.GetCluster(r.ctx, r.client, infrastructure.Namespace) + cluster, err := extensionscontroller.GetCluster(ctx, r.client, infrastructure.Namespace) if err != nil { return reconcile.Result{}, err } @@ -112,39 +105,39 @@ func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err case extensionscontroller.IsMigrated(infrastructure): return reconcile.Result{}, nil case operationType == gardencorev1beta1.LastOperationTypeMigrate: - return r.migrate(logger.WithValues("operation", "migrate"), infrastructure, cluster) + return r.migrate(ctx, logger.WithValues("operation", "migrate"), infrastructure, cluster) case infrastructure.DeletionTimestamp != nil: - return r.delete(logger.WithValues("operation", "delete"), infrastructure, cluster) + return r.delete(ctx, logger.WithValues("operation", "delete"), infrastructure, cluster) case infrastructure.Annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationRestore: - return r.restore(logger.WithValues("operation", "restore"), infrastructure, cluster) + return r.restore(ctx, logger.WithValues("operation", "restore"), infrastructure, cluster) default: - return r.reconcile(logger.WithValues("operation", "reconcile"), infrastructure, cluster, operationType) + return r.reconcile(ctx, logger.WithValues("operation", "reconcile"), infrastructure, cluster, operationType) } } -func (r *reconciler) reconcile(logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, cluster *extensionscontroller.Cluster, operationType gardencorev1beta1.LastOperationType) (reconcile.Result, error) { +func (r *reconciler) reconcile(ctx context.Context, logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, cluster *extensionscontroller.Cluster, operationType gardencorev1beta1.LastOperationType) (reconcile.Result, error) { logger.Info("Ensuring finalizer") - if err := extensionscontroller.EnsureFinalizer(r.ctx, r.client, FinalizerName, infrastructure); err != nil { + if err := extensionscontroller.EnsureFinalizer(ctx, r.client, infrastructure, FinalizerName); err != nil { return reconcile.Result{}, err } - if err := r.updateStatusProcessing(logger, infrastructure, operationType, EventInfrastructureReconciliation, "Reconciling the infrastructure"); err != nil { + if err := r.updateStatusProcessing(ctx, logger, infrastructure, operationType, EventInfrastructureReconciliation, "Reconciling the infrastructure"); err != nil { return reconcile.Result{}, err } - if err := r.actuator.Reconcile(r.ctx, infrastructure, cluster); err != nil { - utilruntime.HandleError(r.updateStatusError(extensionscontroller.ReconcileErrCauseOrErr(err), infrastructure, operationType, EventInfrastructureReconciliation, "Error reconciling infrastructure")) + if err := r.actuator.Reconcile(ctx, infrastructure, cluster); err != nil { + utilruntime.HandleError(r.updateStatusError(ctx, extensionscontroller.ReconcileErrCauseOrErr(err), infrastructure, operationType, EventInfrastructureReconciliation, "Error reconciling infrastructure")) return extensionscontroller.ReconcileErr(err) } - if err := r.updateStatusSuccess(logger, infrastructure, operationType, EventInfrastructureReconciliation, "Successfully reconciled infrastructure"); err != nil { + if err := r.updateStatusSuccess(ctx, logger, infrastructure, operationType, EventInfrastructureReconciliation, "Successfully reconciled infrastructure"); err != nil { return reconcile.Result{}, err } return reconcile.Result{}, nil } -func (r *reconciler) delete(logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { +func (r *reconciler) delete(ctx context.Context, logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { hasFinalizer, err := extensionscontroller.HasFinalizer(infrastructure, FinalizerName) if err != nil { return reconcile.Result{}, fmt.Errorf("could not instantiate finalizer deletion: %+v", err) @@ -154,104 +147,104 @@ func (r *reconciler) delete(logger logr.Logger, infrastructure *extensionsv1alph return reconcile.Result{}, nil } - if err := r.updateStatusProcessing(logger, infrastructure, gardencorev1beta1.LastOperationTypeDelete, EventInfrastructureDeletion, "Deleting the infrastructure"); err != nil { + if err := r.updateStatusProcessing(ctx, logger, infrastructure, gardencorev1beta1.LastOperationTypeDelete, EventInfrastructureDeletion, "Deleting the infrastructure"); err != nil { return reconcile.Result{}, err } - if err := r.actuator.Delete(r.ctx, infrastructure, cluster); err != nil { - utilruntime.HandleError(r.updateStatusError(extensionscontroller.ReconcileErrCauseOrErr(err), infrastructure, gardencorev1beta1.LastOperationTypeDelete, EventInfrastructureDeletion, "Error deleting infrastructure")) + if err := r.actuator.Delete(ctx, infrastructure, cluster); err != nil { + utilruntime.HandleError(r.updateStatusError(ctx, extensionscontroller.ReconcileErrCauseOrErr(err), infrastructure, gardencorev1beta1.LastOperationTypeDelete, EventInfrastructureDeletion, "Error deleting infrastructure")) return extensionscontroller.ReconcileErr(err) } - if err := r.updateStatusSuccess(logger, infrastructure, gardencorev1beta1.LastOperationTypeDelete, EventInfrastructureDeletion, "Successfully deleted infrastructure"); err != nil { + if err := r.updateStatusSuccess(ctx, logger, infrastructure, gardencorev1beta1.LastOperationTypeDelete, EventInfrastructureDeletion, "Successfully deleted infrastructure"); err != nil { return reconcile.Result{}, err } - err = r.removeFinalizerFromInfrastructure(logger, infrastructure) + err = r.removeFinalizerFromInfrastructure(ctx, logger, infrastructure) return reconcile.Result{}, err } -func (r *reconciler) migrate(logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { - if err := r.updateStatusProcessing(logger, infrastructure, gardencorev1beta1.LastOperationTypeMigrate, EventInfrastructureMigration, "Starting Migration of the Infrastructure"); err != nil { +func (r *reconciler) migrate(ctx context.Context, logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { + if err := r.updateStatusProcessing(ctx, logger, infrastructure, gardencorev1beta1.LastOperationTypeMigrate, EventInfrastructureMigration, "Starting Migration of the Infrastructure"); err != nil { return reconcile.Result{}, err } - if err := r.actuator.Migrate(r.ctx, infrastructure, cluster); err != nil { - utilruntime.HandleError(r.updateStatusError(extensionscontroller.ReconcileErrCauseOrErr(err), infrastructure, gardencorev1beta1.LastOperationTypeMigrate, EventInfrastructureMigration, "Error migrating infrastructure")) + if err := r.actuator.Migrate(ctx, infrastructure, cluster); err != nil { + utilruntime.HandleError(r.updateStatusError(ctx, extensionscontroller.ReconcileErrCauseOrErr(err), infrastructure, gardencorev1beta1.LastOperationTypeMigrate, EventInfrastructureMigration, "Error migrating infrastructure")) return extensionscontroller.ReconcileErr(err) } - if err := r.updateStatusSuccess(logger, infrastructure, gardencorev1beta1.LastOperationTypeMigrate, EventInfrastructureMigration, "Successfully migrated Infrastructure"); err != nil { + if err := r.updateStatusSuccess(ctx, logger, infrastructure, gardencorev1beta1.LastOperationTypeMigrate, EventInfrastructureMigration, "Successfully migrated Infrastructure"); err != nil { return reconcile.Result{}, err } - if err := r.removeFinalizerFromInfrastructure(logger, infrastructure); err != nil { + if err := r.removeFinalizerFromInfrastructure(ctx, logger, infrastructure); err != nil { return reconcile.Result{}, err } // remove operation annotation 'migrate' - if err := r.removeAnnotation(logger, infrastructure); err != nil { + if err := r.removeAnnotation(ctx, logger, infrastructure); err != nil { return reconcile.Result{}, err } return reconcile.Result{}, nil } -func (r *reconciler) restore(logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { +func (r *reconciler) restore(ctx context.Context, logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { logger.Info("Ensuring finalizer") - if err := extensionscontroller.EnsureFinalizer(r.ctx, r.client, FinalizerName, infrastructure); err != nil { + if err := extensionscontroller.EnsureFinalizer(ctx, r.client, infrastructure, FinalizerName); err != nil { return reconcile.Result{}, err } - if err := r.updateStatusProcessing(logger, infrastructure, gardencorev1beta1.LastOperationTypeRestore, EventInfrastructureRestoration, "Restoring the infrastructure"); err != nil { + if err := r.updateStatusProcessing(ctx, logger, infrastructure, gardencorev1beta1.LastOperationTypeRestore, EventInfrastructureRestoration, "Restoring the infrastructure"); err != nil { return reconcile.Result{}, err } - if err := r.actuator.Restore(r.ctx, infrastructure, cluster); err != nil { - utilruntime.HandleError(r.updateStatusError(extensionscontroller.ReconcileErrCauseOrErr(err), infrastructure, gardencorev1beta1.LastOperationTypeRestore, EventInfrastructureRestoration, "Error restoring infrastructure")) + if err := r.actuator.Restore(ctx, infrastructure, cluster); err != nil { + utilruntime.HandleError(r.updateStatusError(ctx, extensionscontroller.ReconcileErrCauseOrErr(err), infrastructure, gardencorev1beta1.LastOperationTypeRestore, EventInfrastructureRestoration, "Error restoring infrastructure")) return extensionscontroller.ReconcileErr(err) } // remove operation annotation 'restore' - if err := r.removeAnnotation(logger, infrastructure); err != nil { + if err := r.removeAnnotation(ctx, logger, infrastructure); err != nil { return reconcile.Result{}, err } - err := r.updateStatusSuccess(logger, infrastructure, gardencorev1beta1.LastOperationTypeRestore, EventInfrastructureRestoration, "Successfully restored infrastructure") + err := r.updateStatusSuccess(ctx, logger, infrastructure, gardencorev1beta1.LastOperationTypeRestore, EventInfrastructureRestoration, "Successfully restored infrastructure") return reconcile.Result{}, err } -func (r *reconciler) updateStatusProcessing(logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, lastOperationType gardencorev1beta1.LastOperationType, event, description string) error { +func (r *reconciler) updateStatusProcessing(ctx context.Context, logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, lastOperationType gardencorev1beta1.LastOperationType, event, description string) error { logger.Info(description) r.recorder.Eventf(infrastructure, corev1.EventTypeNormal, event, description) - return extensionscontroller.TryUpdateStatus(r.ctx, retry.DefaultBackoff, r.client, infrastructure, func() error { + return extensionscontroller.TryUpdateStatus(ctx, retry.DefaultBackoff, r.client, infrastructure, func() error { infrastructure.Status.LastOperation = extensionscontroller.LastOperation(lastOperationType, gardencorev1beta1.LastOperationStateProcessing, 1, description) return nil }) } -func (r *reconciler) updateStatusError(err error, infrastructure *extensionsv1alpha1.Infrastructure, lastOperationType gardencorev1beta1.LastOperationType, event, description string) error { +func (r *reconciler) updateStatusError(ctx context.Context, err error, infrastructure *extensionsv1alpha1.Infrastructure, lastOperationType gardencorev1beta1.LastOperationType, event, description string) error { r.recorder.Eventf(infrastructure, corev1.EventTypeWarning, event, fmt.Sprintf("%s: %+v", description, err)) - return extensionscontroller.TryUpdateStatus(r.ctx, retry.DefaultBackoff, r.client, infrastructure, func() error { + return extensionscontroller.TryUpdateStatus(ctx, retry.DefaultBackoff, r.client, infrastructure, func() error { infrastructure.Status.ObservedGeneration = infrastructure.Generation infrastructure.Status.LastOperation, infrastructure.Status.LastError = extensionscontroller.ReconcileError(lastOperationType, gardencorev1beta1helper.FormatLastErrDescription(fmt.Errorf("%s: %v", description, err)), 50, gardencorev1beta1helper.ExtractErrorCodes(gardencorev1beta1helper.DetermineError(err, err.Error()))...) return nil }) } -func (r *reconciler) updateStatusSuccess(logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, lastOperationType gardencorev1beta1.LastOperationType, event, description string) error { +func (r *reconciler) updateStatusSuccess(ctx context.Context, logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure, lastOperationType gardencorev1beta1.LastOperationType, event, description string) error { logger.Info(description) r.recorder.Eventf(infrastructure, corev1.EventTypeNormal, event, description) - return extensionscontroller.TryUpdateStatus(r.ctx, retry.DefaultBackoff, r.client, infrastructure, func() error { + return extensionscontroller.TryUpdateStatus(ctx, retry.DefaultBackoff, r.client, infrastructure, func() error { infrastructure.Status.ObservedGeneration = infrastructure.Generation infrastructure.Status.LastOperation, infrastructure.Status.LastError = extensionscontroller.ReconcileSucceeded(lastOperationType, description) return nil }) } -func (r *reconciler) removeFinalizerFromInfrastructure(logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure) error { +func (r *reconciler) removeFinalizerFromInfrastructure(ctx context.Context, logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure) error { logger.Info("Removing finalizer") - if err := extensionscontroller.DeleteFinalizer(r.ctx, r.client, FinalizerName, infrastructure); err != nil { + if err := extensionscontroller.DeleteFinalizer(ctx, r.client, infrastructure, FinalizerName); err != nil { msg := fmt.Sprintf("error removing finalizer from Infrastructure: %+v", err) r.recorder.Eventf(infrastructure, corev1.EventTypeWarning, EventInfrastructureMigration, msg) return fmt.Errorf(msg) @@ -259,9 +252,9 @@ func (r *reconciler) removeFinalizerFromInfrastructure(logger logr.Logger, infra return nil } -func (r *reconciler) removeAnnotation(logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure) error { +func (r *reconciler) removeAnnotation(ctx context.Context, logger logr.Logger, infrastructure *extensionsv1alpha1.Infrastructure) error { logger.Info("Removing operation annotation") - if err := extensionscontroller.RemoveAnnotation(r.ctx, r.client, infrastructure, v1beta1constants.GardenerOperation); err != nil { + if err := extensionscontroller.RemoveAnnotation(ctx, r.client, infrastructure, v1beta1constants.GardenerOperation); err != nil { msg := fmt.Sprintf("error removing annotation from Infrastructure: %+v", err) r.recorder.Eventf(infrastructure, corev1.EventTypeWarning, EventInfrastructureMigration, msg) return fmt.Errorf(msg) diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/log.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/log.go index fb8593c10..18a55903e 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/log.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/log.go @@ -18,8 +18,7 @@ import ( "fmt" "github.com/go-logr/logr" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/event" ) @@ -61,54 +60,36 @@ func PrefixLogValues(prefix string, logValues []interface{}) []interface{} { return out } -func eventObjectLogValues(meta metav1.Object, obj runtime.Object) []interface{} { - var values []interface{} - if meta != nil { - values = append(values, MetaObjectLogValues(meta)...) - } - if obj != nil { - values = append(values, RuntimeObjectLogValues(obj)...) - } - return values -} - // CreateEventLogValues extracts the log values from the given CreateEvent. func CreateEventLogValues(event event.CreateEvent) []interface{} { - return eventObjectLogValues(event.Meta, event.Object) + return ObjectLogValues(event.Object) } // DeleteEventLogValues extracts the log values from the given DeleteEvent. func DeleteEventLogValues(event event.DeleteEvent) []interface{} { - return append(eventObjectLogValues(event.Meta, event.Object), "delete-state-unknown", event.DeleteStateUnknown) + return append(ObjectLogValues(event.Object), "delete-state-unknown", event.DeleteStateUnknown) } // GenericEventLogValues extracts the log values from the given GenericEvent. func GenericEventLogValues(event event.GenericEvent) []interface{} { - return eventObjectLogValues(event.Meta, event.Object) + return ObjectLogValues(event.Object) } // UpdateEventLogValues extracts the log values from the given UpdateEvent. func UpdateEventLogValues(event event.UpdateEvent) []interface{} { var values []interface{} - values = append(values, PrefixLogValues("old", eventObjectLogValues(event.MetaOld, event.ObjectOld))...) - values = append(values, PrefixLogValues("new", eventObjectLogValues(event.MetaNew, event.ObjectNew))...) + values = append(values, PrefixLogValues("old", ObjectLogValues(event.ObjectOld))...) + values = append(values, PrefixLogValues("new", ObjectLogValues(event.ObjectNew))...) return values } -// MetaObjectLogValues extracts the log values from the given metav1.Object. -func MetaObjectLogValues(obj metav1.Object) []interface{} { +// ObjectLogValues extracts the log values from the given client.Object. +func ObjectLogValues(obj client.Object) []interface{} { values := []interface{}{"meta.name", obj.GetName()} if namespace := obj.GetNamespace(); namespace != "" { values = append(values, "meta.namespace", namespace) } - return values -} - -// RuntimeObjectLogValues extracts the log values from the given runtime.Object. -func RuntimeObjectLogValues(obj runtime.Object) []interface{} { apiVersion, kind := obj.GetObjectKind().GroupVersionKind().ToAPIVersionAndKind() - return []interface{}{ - "object.apiVersion", apiVersion, - "object.kind", kind, - } + values = append(values, "object.apiVersion", apiVersion, "object.kind", kind) + return values } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/reconciler.go index 426356f0c..f4b274378 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/reconciler.go @@ -18,10 +18,7 @@ import ( "context" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" - contextutil "github.com/gardener/gardener/pkg/utils/context" - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" @@ -30,17 +27,16 @@ import ( type operationAnnotationWrapper struct { reconcile.Reconciler client client.Client - ctx context.Context - objectType runtime.Object + newObjFunc func() client.Object } // OperationAnnotationWrapper is a wrapper for an reconciler that // removes the Gardener operation annotation before `Reconcile` is called. // // This is useful in conjunction with the HasOperationAnnotationPredicate. -func OperationAnnotationWrapper(objectType runtime.Object, reconciler reconcile.Reconciler) reconcile.Reconciler { +func OperationAnnotationWrapper(newObjFunc func() client.Object, reconciler reconcile.Reconciler) reconcile.Reconciler { return &operationAnnotationWrapper{ - objectType: objectType, + newObjFunc: newObjFunc, Reconciler: reconciler, } } @@ -56,25 +52,14 @@ func (o *operationAnnotationWrapper) InjectFunc(f inject.Func) error { return f(o.Reconciler) } -// InjectStopChannel is an implementation for getting the respective stop channel managed by the controller-runtime. -func (o *operationAnnotationWrapper) InjectStopChannel(stopCh <-chan struct{}) error { - o.ctx = contextutil.FromStopChannel(stopCh) - return nil -} - // Reconcile removes the Gardener operation annotation if available and calls the inner `Reconcile`. -func (o *operationAnnotationWrapper) Reconcile(request reconcile.Request) (reconcile.Result, error) { - obj := o.objectType.DeepCopyObject() - if err := o.client.Get(o.ctx, request.NamespacedName, obj); client.IgnoreNotFound(err) != nil { - return reconcile.Result{}, err - } - - acc, err := meta.Accessor(obj) - if err != nil { +func (o *operationAnnotationWrapper) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { + obj := o.newObjFunc() + if err := o.client.Get(ctx, request.NamespacedName, obj); client.IgnoreNotFound(err) != nil { return reconcile.Result{}, err } - annotations := acc.GetAnnotations() + annotations := obj.GetAnnotations() if annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationWaitForState { return reconcile.Result{}, nil } @@ -82,10 +67,10 @@ func (o *operationAnnotationWrapper) Reconcile(request reconcile.Request) (recon if annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationReconcile { withOpAnnotation := obj.DeepCopyObject() delete(annotations, v1beta1constants.GardenerOperation) - acc.SetAnnotations(annotations) - if err := o.client.Patch(o.ctx, obj, client.MergeFrom(withOpAnnotation)); err != nil { + obj.SetAnnotations(annotations) + if err := o.client.Patch(ctx, obj, client.MergeFrom(withOpAnnotation)); err != nil { return reconcile.Result{}, err } } - return o.Reconciler.Reconcile(request) + return o.Reconciler.Reconcile(ctx, request) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/shoot.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/shoot.go index 330d61706..49ed0a84c 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/shoot.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/shoot.go @@ -20,7 +20,7 @@ import ( ) const ( - // ShootNoCleanupLabel is a constant for a label on a resource indicating the the Gardener cleaner should not delete this + // ShootNoCleanupLabel is a constant for a label on a resource indicating that the Gardener cleaner should not delete this // resource when cleaning a shoot during the deletion flow. ShootNoCleanupLabel = "shoot.gardener.cloud/no-cleanup" ) diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go index 66e822570..36b00a5e5 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go @@ -24,7 +24,7 @@ import ( gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - contextutil "github.com/gardener/gardener/pkg/utils/context" + "github.com/gardener/gardener/pkg/controllerutils" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" resourcemanagerv1alpha1 "github.com/gardener/gardener-resource-manager/pkg/apis/resources/v1alpha1" @@ -42,7 +42,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/manager" - "sigs.k8s.io/controller-runtime/pkg/manager/signals" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -91,11 +90,6 @@ func ReconcileErrCauseOrErr(err error) error { return err } -// SetupSignalHandlerContext sets up a context from signals.SetupSignalHandler stop channel. -func SetupSignalHandlerContext() context.Context { - return contextutil.FromStopChannel(signals.SetupSignalHandler()) -} - // AddToManagerBuilder aggregates various AddToManager functions. type AddToManagerBuilder []func(manager.Manager) error @@ -143,48 +137,16 @@ func HasFinalizer(obj runtime.Object, finalizerName string) (bool, error) { // EnsureFinalizer ensures that a finalizer of the given name is set on the given object. // If the finalizer is not set, it adds it to the list of finalizers and updates the remote object. -func EnsureFinalizer(ctx context.Context, client client.Client, finalizerName string, obj runtime.Object) error { - finalizers, accessor, err := finalizersAndAccessorOf(obj) - if err != nil { - return err - } - - if finalizers.Has(finalizerName) { - return nil - } - - finalizers.Insert(finalizerName) - accessor.SetFinalizers(finalizers.UnsortedList()) - - return client.Update(ctx, obj) -} +var EnsureFinalizer = controllerutils.EnsureFinalizer // DeleteFinalizer ensures that the given finalizer is not present anymore in the given object. // If it is set, it removes it and issues an update. -func DeleteFinalizer(ctx context.Context, client client.Client, finalizerName string, obj runtime.Object) error { - finalizers, accessor, err := finalizersAndAccessorOf(obj) - if err != nil { - return err - } - - if !finalizers.Has(finalizerName) { - return nil - } - - finalizers.Delete(finalizerName) - accessor.SetFinalizers(finalizers.UnsortedList()) - - return client.Update(ctx, obj) -} +var DeleteFinalizer = controllerutils.RemoveFinalizer // DeleteAllFinalizers removes all finalizers from the object and issues an update. -func DeleteAllFinalizers(ctx context.Context, client client.Client, obj runtime.Object) error { +func DeleteAllFinalizers(ctx context.Context, client client.Client, obj client.Object) error { return TryUpdate(ctx, retry.DefaultBackoff, client, obj, func() error { - accessor, err := meta.Accessor(obj) - if err != nil { - return err - } - accessor.SetFinalizers(nil) + obj.SetFinalizers(nil) return nil }) } @@ -265,16 +227,12 @@ func GetVerticalPodAutoscalerObject() *unstructured.Unstructured { } // RemoveAnnotation removes an annotation key passed as annotation -func RemoveAnnotation(ctx context.Context, c client.Client, obj runtime.Object, annotation string) error { - accessor, err := meta.Accessor(obj) - if err != nil { - return err - } +func RemoveAnnotation(ctx context.Context, c client.Client, obj client.Object, annotation string) error { withAnnotation := obj.DeepCopyObject() - annotations := accessor.GetAnnotations() + annotations := obj.GetAnnotations() delete(annotations, annotation) - accessor.SetAnnotations(annotations) + obj.SetAnnotations(annotations) return c.Patch(ctx, obj, client.MergeFrom(withAnnotation)) } @@ -294,6 +252,6 @@ func IsMigrated(obj runtime.Object) bool { // GetObjectByReference gets an object by the given reference, in the given namespace. // If the object kind doesn't match the given reference kind this will result in an error. -func GetObjectByReference(ctx context.Context, c client.Client, ref *autoscalingv1.CrossVersionObjectReference, namespace string, obj runtime.Object) error { +func GetObjectByReference(ctx context.Context, c client.Client, ref *autoscalingv1.CrossVersionObjectReference, namespace string, obj client.Object) error { return c.Get(ctx, client.ObjectKey{Namespace: namespace, Name: v1beta1constants.ReferencedResourcesPrefix + ref.Name}, obj) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/controller.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/controller.go index 4c71d3ba5..bee9a2227 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/controller.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/controller.go @@ -15,17 +15,17 @@ package worker import ( - extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" - extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" machinev1alpha1 "github.com/gardener/machine-controller-manager/pkg/apis/machine/v1alpha1" - "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/source" + + extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" + extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) const ( @@ -77,7 +77,7 @@ func DefaultPredicates(ignoreOperationAnnotation bool) []predicate.Predicate { // Add creates a new Worker Controller and adds it to the Manager. // and Start it when the Manager is Started. func Add(mgr manager.Manager, args AddArgs) error { - args.ControllerOptions.Reconciler = NewReconciler(mgr, args.Actuator) + args.ControllerOptions.Reconciler = NewReconciler(args.Actuator) predicates := extensionspredicate.AddTypePredicate(args.Predicates, args.Type) if err := add(mgr, args, predicates); err != nil { return err @@ -94,9 +94,10 @@ func add(mgr manager.Manager, args AddArgs, predicates []predicate.Predicate) er } if args.IgnoreOperationAnnotation { - if err := ctrl.Watch(&source.Kind{Type: &extensionsv1alpha1.Cluster{}}, &extensionshandler.EnqueueRequestsFromMapFunc{ - ToRequests: extensionshandler.SimpleMapper(ClusterToWorkerMapper(predicates), extensionshandler.UpdateWithNew), - }); err != nil { + if err := ctrl.Watch( + &source.Kind{Type: &extensionsv1alpha1.Cluster{}}, + extensionshandler.EnqueueRequestsFromMapper(ClusterToWorkerMapper(predicates), extensionshandler.UpdateWithNew), + ); err != nil { return err } } @@ -130,13 +131,17 @@ func addStateUpdatingController(mgr manager.Manager, options controller.Options, return err } - if err := ctrl.Watch(&source.Kind{Type: &machinev1alpha1.MachineSet{}}, &extensionshandler.EnqueueRequestsFromMapFunc{ - ToRequests: extensionshandler.SimpleMapper(MachineSetToWorkerMapper(workerPredicates), extensionshandler.UpdateWithNew), - }, machinePredicates...); err != nil { + if err := ctrl.Watch( + &source.Kind{Type: &machinev1alpha1.MachineSet{}}, + extensionshandler.EnqueueRequestsFromMapper(MachineSetToWorkerMapper(workerPredicates), extensionshandler.UpdateWithNew), + machinePredicates..., + ); err != nil { return err } - return ctrl.Watch(&source.Kind{Type: &machinev1alpha1.Machine{}}, &extensionshandler.EnqueueRequestsFromMapFunc{ - ToRequests: extensionshandler.SimpleMapper(MachineToWorkerMapper(workerPredicates), extensionshandler.UpdateWithNew), - }, machinePredicates...) + return ctrl.Watch( + &source.Kind{Type: &machinev1alpha1.Machine{}}, + extensionshandler.EnqueueRequestsFromMapper(MachineToWorkerMapper(workerPredicates), extensionshandler.UpdateWithNew), + machinePredicates..., + ) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator.go index c8d208fc5..18f4e9670 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator.go @@ -134,7 +134,7 @@ func (a *genericActuator) cleanupMachineDeployments(ctx context.Context, logger return nil } -func (a *genericActuator) listMachineClassNames(ctx context.Context, namespace string, machineClassList runtime.Object) (sets.String, error) { +func (a *genericActuator) listMachineClassNames(ctx context.Context, namespace string, machineClassList client.ObjectList) (sets.String, error) { if err := a.client.List(ctx, machineClassList, client.InNamespace(namespace)); err != nil { return nil, err } @@ -156,19 +156,15 @@ func (a *genericActuator) listMachineClassNames(ctx context.Context, namespace s return classNames, nil } -func (a *genericActuator) cleanupMachineClasses(ctx context.Context, logger logr.Logger, namespace string, machineClassList runtime.Object, wantedMachineDeployments worker.MachineDeployments) error { +func (a *genericActuator) cleanupMachineClasses(ctx context.Context, logger logr.Logger, namespace string, machineClassList client.ObjectList, wantedMachineDeployments worker.MachineDeployments) error { logger.Info("Cleaning up machine classes") if err := a.client.List(ctx, machineClassList, client.InNamespace(namespace)); err != nil { return err } - return meta.EachListItem(machineClassList, func(machineClass runtime.Object) error { - accessor, err := meta.Accessor(machineClass) - if err != nil { - return err - } - - if !wantedMachineDeployments.HasClass(accessor.GetName()) { + return meta.EachListItem(machineClassList, func(obj runtime.Object) error { + machineClass := obj.(client.Object) + if !wantedMachineDeployments.HasClass(machineClass.GetName()) { logger.Info("Deleting machine class", "machineClass", machineClass) if err := a.client.Delete(ctx, machineClass); err != nil { return err @@ -257,7 +253,7 @@ func (a *genericActuator) shallowDeleteMachineClassSecrets(ctx context.Context, return nil } -// cleanupMachineClassSecrets deletes MachineSets having number of desired and actual replicas equaling 0 +// cleanupMachineSets deletes MachineSets having number of desired and actual replicas equaling 0 func (a *genericActuator) cleanupMachineSets(ctx context.Context, logger logr.Logger, namespace string) error { logger.Info("Cleaning up machine sets") machineSetList := &machinev1alpha1.MachineSetList{} @@ -279,7 +275,7 @@ func (a *genericActuator) cleanupMachineSets(ctx context.Context, logger logr.Lo return nil } -func (a *genericActuator) shallowDeleteAllObjects(ctx context.Context, logger logr.Logger, namespace string, objectList runtime.Object) error { +func (a *genericActuator) shallowDeleteAllObjects(ctx context.Context, logger logr.Logger, namespace string, objectList client.ObjectList) error { var objectKind interface{} = strings.TrimSuffix(fmt.Sprintf("%T", objectList), "List") if gvk, err := apiutil.GVKForObject(objectList, a.scheme); err == nil { objectKind = gvk @@ -291,7 +287,7 @@ func (a *genericActuator) shallowDeleteAllObjects(ctx context.Context, logger lo } return meta.EachListItem(objectList, func(obj runtime.Object) error { - object := obj.DeepCopyObject() + object := obj.(client.Object) if err := extensionscontroller.DeleteAllFinalizers(ctx, a.client, object); err != nil { return err } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_delete.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_delete.go index 25f84eb4c..17e71519c 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_delete.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_delete.go @@ -31,7 +31,6 @@ import ( gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "github.com/gardener/gardener/pkg/utils/flow" - kutil "github.com/gardener/gardener/pkg/utils/kubernetes" retryutils "github.com/gardener/gardener/pkg/utils/retry" ) @@ -41,7 +40,7 @@ const ( ) func (a *genericActuator) Delete(ctx context.Context, worker *extensionsv1alpha1.Worker, cluster *controller.Cluster) error { - logger := a.logger.WithValues("worker", kutil.KeyFromObject(worker), "operation", "delete") + logger := a.logger.WithValues("worker", client.ObjectKeyFromObject(worker), "operation", "delete") workerDelegate, err := a.delegateFactory.WorkerDelegate(ctx, worker, cluster) if err != nil { @@ -165,6 +164,8 @@ func (a *genericActuator) waitUntilMachineResourcesDeleted(ctx context.Context, countMachineDeployments = -1 countMachineClasses = -1 countMachineClassSecrets = -1 + + releasedMachineClassCredentialsSecret = false ) logger.Info("Waiting until all machine resources have been deleted") @@ -238,8 +239,34 @@ func (a *genericActuator) waitUntilMachineResourcesDeleted(ctx context.Context, msg += fmt.Sprintf("%d machine class secrets, ", countMachineClassSecrets) } - if countMachines != 0 || countMachineSets != 0 || countMachineDeployments != 0 || countMachineClasses != 0 || countMachineClassSecrets != 0 { - msg := fmt.Sprintf("Waiting until the following machine resources have been deleted: %s", strings.TrimSuffix(msg, ", ")) + // Check whether the finalizer of the machine class credentials secret is removed. + // This check is only applicable when the given workerDelegate does not implement the + // deprecated WorkerCredentialsDelegate interface, i.e. machine classes reference a separate + // Secret for cloud provider credentials. + if !releasedMachineClassCredentialsSecret { + _, ok := workerDelegate.(WorkerCredentialsDelegate) + if ok { + releasedMachineClassCredentialsSecret = true + } else { + secret, err := controller.GetSecretByReference(ctx, a.client, &worker.Spec.SecretRef) + if err != nil { + return retryutils.SevereError(fmt.Errorf("could not get the secret referenced by worker: %+v", err)) + } + + hasFinalizer, err := controller.HasFinalizer(secret, mcmFinalizer) + if err != nil { + return retryutils.SevereError(fmt.Errorf("could not check whether machine class credentials secret has finalizer: %+v", err)) + } + if hasFinalizer { + msg += "1 machine class credentials secret, " + } else { + releasedMachineClassCredentialsSecret = true + } + } + } + + if countMachines != 0 || countMachineSets != 0 || countMachineDeployments != 0 || countMachineClasses != 0 || countMachineClassSecrets != 0 || !releasedMachineClassCredentialsSecret { + msg := fmt.Sprintf("Waiting until the following machine resources have been deleted or released: %s", strings.TrimSuffix(msg, ", ")) logger.Info(msg) return retryutils.MinorError(errors.New(msg)) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_restore.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_restore.go index 0462fdc31..29e16b70f 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_restore.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_restore.go @@ -23,7 +23,6 @@ import ( "github.com/go-logr/logr" "github.com/pkg/errors" apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" @@ -146,7 +145,7 @@ func (a *genericActuator) deployMachineSetsAndMachines(ctx context.Context, logg return nil } -func (a *genericActuator) waitUntilStatusIsUpdates(ctx context.Context, obj runtime.Object, transform func() error) error { +func (a *genericActuator) waitUntilStatusIsUpdates(ctx context.Context, obj client.Object, transform func() error) error { return gardeneretry.Until(ctx, 5*time.Second, func(ctx context.Context) (done bool, err error) { if err := extensionscontroller.TryUpdateStatus(ctx, retry.DefaultBackoff, a.client, obj, transform); err != nil { if apierrors.IsNotFound(err) { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/interface.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/interface.go index 8959376aa..ab49b2b5d 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/interface.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/interface.go @@ -17,16 +17,16 @@ package genericactuator import ( "context" + "sigs.k8s.io/controller-runtime/pkg/client" + extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" "github.com/gardener/gardener/extensions/pkg/controller/worker" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - "k8s.io/apimachinery/pkg/runtime" ) // WorkerDelegate is used for the Worker reconciliation. type WorkerDelegate interface { - // GetMachineControllerManagerChartValues should return the the chart and the values for the machine-controller-manager + // GetMachineControllerManagerChartValues should return the chart and the values for the machine-controller-manager // deployment. GetMachineControllerManagerChartValues(context.Context) (map[string]interface{}, error) // GetMachineControllerManagerShootChartValues should return the values to render the chart containing resources @@ -36,9 +36,9 @@ type WorkerDelegate interface { // MachineClassKind yields the name of the provider specific machine class. MachineClassKind() string // MachineClass yields a newly initialized machine class object. - MachineClass() runtime.Object + MachineClass() client.Object // MachineClassList yields a newly initialized machine class list object. - MachineClassList() runtime.Object + MachineClassList() client.ObjectList // DeployMachineClasses generates and creates the provider specific machine classes. DeployMachineClasses(context.Context) error diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/mapper.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/mapper.go index c375fde31..b1c3e3a56 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/mapper.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/mapper.go @@ -17,42 +17,44 @@ package worker import ( "context" - extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" - extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" machinev1alpha1 "github.com/gardener/machine-controller-manager/pkg/apis/machine/v1alpha1" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" + + extensionshandler "github.com/gardener/gardener/extensions/pkg/handler" + extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" + contextutil "github.com/gardener/gardener/pkg/utils/context" ) // ClusterToWorkerMapper returns a mapper that returns requests for Worker whose // referenced clusters have been modified. -func ClusterToWorkerMapper(predicates []predicate.Predicate) handler.Mapper { - return extensionshandler.ClusterToObjectMapper(func() runtime.Object { return &extensionsv1alpha1.WorkerList{} }, predicates) +func ClusterToWorkerMapper(predicates []predicate.Predicate) extensionshandler.Mapper { + return extensionshandler.ClusterToObjectMapper(func() client.ObjectList { return &extensionsv1alpha1.WorkerList{} }, predicates) } // MachineSetToWorkerMapper returns a mapper that returns requests for Worker whose // referenced MachineSets have been modified. -func MachineSetToWorkerMapper(predicates []predicate.Predicate) handler.Mapper { - return newMachineSetToObjectMapper(func() runtime.Object { return &extensionsv1alpha1.WorkerList{} }, predicates) +func MachineSetToWorkerMapper(predicates []predicate.Predicate) extensionshandler.Mapper { + return newMachineSetToObjectMapper(func() client.ObjectList { return &extensionsv1alpha1.WorkerList{} }, predicates) } // MachineToWorkerMapper returns a mapper that returns requests for Worker whose // referenced Machines have been modified. -func MachineToWorkerMapper(predicates []predicate.Predicate) handler.Mapper { - return newMachineToObjectMapper(func() runtime.Object { return &extensionsv1alpha1.WorkerList{} }, predicates) +func MachineToWorkerMapper(predicates []predicate.Predicate) extensionshandler.Mapper { + return newMachineToObjectMapper(func() client.ObjectList { return &extensionsv1alpha1.WorkerList{} }, predicates) } type machineSetToObjectMapper struct { + ctx context.Context client client.Client - newObjListFunc func() runtime.Object + newObjListFunc func() client.ObjectList predicates []predicate.Predicate } @@ -61,6 +63,11 @@ func (m *machineSetToObjectMapper) InjectClient(c client.Client) error { return nil } +func (m *machineSetToObjectMapper) InjectStopChannel(stopCh <-chan struct{}) error { + m.ctx = contextutil.FromStopChannel(stopCh) + return nil +} + func (m *machineSetToObjectMapper) InjectFunc(f inject.Func) error { for _, p := range m.predicates { if err := f(p); err != nil { @@ -70,20 +77,14 @@ func (m *machineSetToObjectMapper) InjectFunc(f inject.Func) error { return nil } -func (m *machineSetToObjectMapper) Map(obj handler.MapObject) []reconcile.Request { - ctx := context.TODO() - - if obj.Object == nil { - return nil - } - - machineSet, ok := obj.Object.(*machinev1alpha1.MachineSet) +func (m *machineSetToObjectMapper) Map(obj client.Object) []reconcile.Request { + machineSet, ok := obj.(*machinev1alpha1.MachineSet) if !ok { return nil } objList := m.newObjListFunc() - if err := m.client.List(ctx, objList, client.InNamespace(machineSet.Namespace)); err != nil { + if err := m.client.List(m.ctx, objList, client.InNamespace(machineSet.Namespace)); err != nil { return nil } @@ -92,13 +93,14 @@ func (m *machineSetToObjectMapper) Map(obj handler.MapObject) []reconcile.Reques // newMachineSetToObjectMapper returns a mapper that returns requests for objects whose // referenced MachineSets have been modified. -func newMachineSetToObjectMapper(newObjListFunc func() runtime.Object, predicates []predicate.Predicate) handler.Mapper { +func newMachineSetToObjectMapper(newObjListFunc func() client.ObjectList, predicates []predicate.Predicate) extensionshandler.Mapper { return &machineSetToObjectMapper{newObjListFunc: newObjListFunc, predicates: predicates} } type machineToObjectMapper struct { + ctx context.Context client client.Client - newObjListFunc func() runtime.Object + newObjListFunc func() client.ObjectList predicates []predicate.Predicate } @@ -107,6 +109,11 @@ func (m *machineToObjectMapper) InjectClient(c client.Client) error { return nil } +func (m *machineToObjectMapper) InjectStopChannel(stopCh <-chan struct{}) error { + m.ctx = contextutil.FromStopChannel(stopCh) + return nil +} + func (m *machineToObjectMapper) InjectFunc(f inject.Func) error { for _, p := range m.predicates { if err := f(p); err != nil { @@ -116,20 +123,14 @@ func (m *machineToObjectMapper) InjectFunc(f inject.Func) error { return nil } -func (m *machineToObjectMapper) Map(obj handler.MapObject) []reconcile.Request { - ctx := context.TODO() - - if obj.Object == nil { - return nil - } - - machine, ok := obj.Object.(*machinev1alpha1.Machine) +func (m *machineToObjectMapper) Map(obj client.Object) []reconcile.Request { + machine, ok := obj.(*machinev1alpha1.Machine) if !ok { return nil } objList := m.newObjListFunc() - if err := m.client.List(ctx, objList, client.InNamespace(machine.Namespace)); err != nil { + if err := m.client.List(m.ctx, objList, client.InNamespace(machine.Namespace)); err != nil { return nil } @@ -138,7 +139,7 @@ func (m *machineToObjectMapper) Map(obj handler.MapObject) []reconcile.Request { // newMachineToObjectMapper returns a mapper that returns requests for objects whose // referenced Machines have been modified. -func newMachineToObjectMapper(newObjListFunc func() runtime.Object, predicates []predicate.Predicate) handler.Mapper { +func newMachineToObjectMapper(newObjListFunc func() client.ObjectList, predicates []predicate.Predicate) extensionshandler.Mapper { return &machineToObjectMapper{newObjListFunc: newObjListFunc, predicates: predicates} } @@ -146,19 +147,15 @@ func getReconcileRequestsFromObjectList(objList runtime.Object, predicates []pre var requests []reconcile.Request utilruntime.HandleError(meta.EachListItem(objList, func(obj runtime.Object) error { - accessor, err := meta.Accessor(obj) - if err != nil { - return err - } - - if !extensionspredicate.EvalGeneric(obj, predicates...) { + o := obj.(client.Object) + if !extensionspredicate.EvalGeneric(o, predicates...) { return nil } requests = append(requests, reconcile.Request{ NamespacedName: types.NamespacedName{ - Namespace: accessor.GetNamespace(), - Name: accessor.GetName(), + Namespace: o.GetNamespace(), + Name: o.GetName(), }, }) return nil diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/reconciler.go index e0ca3e183..455069b31 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/reconciler.go @@ -24,7 +24,6 @@ import ( v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - contextutil "github.com/gardener/gardener/pkg/utils/context" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "github.com/go-logr/logr" @@ -33,7 +32,6 @@ import ( "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" ) @@ -42,15 +40,14 @@ type reconciler struct { logger logr.Logger actuator Actuator - ctx context.Context client client.Client } // NewReconciler creates a new reconcile.Reconciler that reconciles // Worker resources of Gardener's `extensions.gardener.cloud` API group. -func NewReconciler(mgr manager.Manager, actuator Actuator) reconcile.Reconciler { +func NewReconciler(actuator Actuator) reconcile.Reconciler { return extensionscontroller.OperationAnnotationWrapper( - &extensionsv1alpha1.Worker{}, + func() client.Object { return &extensionsv1alpha1.Worker{} }, &reconciler{ logger: log.Log.WithName(ControllerName), actuator: actuator, @@ -67,21 +64,16 @@ func (r *reconciler) InjectClient(client client.Client) error { return nil } -func (r *reconciler) InjectStopChannel(stopCh <-chan struct{}) error { - r.ctx = contextutil.FromStopChannel(stopCh) - return nil -} - -func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { worker := &extensionsv1alpha1.Worker{} - if err := r.client.Get(r.ctx, request.NamespacedName, worker); err != nil { + if err := r.client.Get(ctx, request.NamespacedName, worker); err != nil { if errors.IsNotFound(err) { return reconcile.Result{}, nil } return reconcile.Result{}, err } - cluster, err := extensionscontroller.GetCluster(r.ctx, r.client, worker.Namespace) + cluster, err := extensionscontroller.GetCluster(ctx, r.client, worker.Namespace) if err != nil { return reconcile.Result{}, err } @@ -99,26 +91,26 @@ func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err logger.Info("Stop reconciling Worker of migrated Shoot") return reconcile.Result{}, nil case operationType == gardencorev1beta1.LastOperationTypeMigrate: - return r.migrate(logger.WithValues("operation", "migrate"), worker, cluster) + return r.migrate(ctx, logger.WithValues("operation", "migrate"), worker, cluster) case worker.DeletionTimestamp != nil: - return r.delete(logger.WithValues("operation", "delete"), worker, cluster) + return r.delete(ctx, logger.WithValues("operation", "delete"), worker, cluster) case worker.Annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationRestore: - return r.restore(logger.WithValues("operation", "restore"), worker, cluster) + return r.restore(ctx, logger.WithValues("operation", "restore"), worker, cluster) default: - return r.reconcile(logger.WithValues("operation", "reconcile"), worker, cluster, operationType) + return r.reconcile(ctx, logger.WithValues("operation", "reconcile"), worker, cluster, operationType) } } -func (r *reconciler) updateStatusProcessing(logger logr.Logger, worker *extensionsv1alpha1.Worker, lastOperationType gardencorev1beta1.LastOperationType, description string) error { +func (r *reconciler) updateStatusProcessing(ctx context.Context, logger logr.Logger, worker *extensionsv1alpha1.Worker, lastOperationType gardencorev1beta1.LastOperationType, description string) error { logger.Info(description) - return extensionscontroller.TryUpdateStatus(r.ctx, retry.DefaultBackoff, r.client, worker, func() error { + return extensionscontroller.TryUpdateStatus(ctx, retry.DefaultBackoff, r.client, worker, func() error { worker.Status.LastOperation = extensionscontroller.LastOperation(lastOperationType, gardencorev1beta1.LastOperationStateProcessing, 1, description) return nil }) } -func (r *reconciler) updateStatusError(err error, worker *extensionsv1alpha1.Worker, lastOperationType gardencorev1beta1.LastOperationType, description string) { - updateErr := extensionscontroller.TryUpdateStatus(r.ctx, retry.DefaultBackoff, r.client, worker, func() error { +func (r *reconciler) updateStatusError(ctx context.Context, err error, worker *extensionsv1alpha1.Worker, lastOperationType gardencorev1beta1.LastOperationType, description string) { + updateErr := extensionscontroller.TryUpdateStatus(ctx, retry.DefaultBackoff, r.client, worker, func() error { worker.Status.ObservedGeneration = worker.Generation worker.Status.LastOperation, worker.Status.LastError = extensionscontroller.ReconcileError(lastOperationType, gardencorev1beta1helper.FormatLastErrDescription(fmt.Errorf("%s: %v", description, extensionscontroller.ReconcileErrCauseOrErr(err))), 50, gardencorev1beta1helper.ExtractErrorCodes(gardencorev1beta1helper.DetermineError(err, err.Error()))...) return nil @@ -126,55 +118,55 @@ func (r *reconciler) updateStatusError(err error, worker *extensionsv1alpha1.Wor utilruntime.HandleError(updateErr) } -func (r *reconciler) updateStatusSuccess(logger logr.Logger, worker *extensionsv1alpha1.Worker, lastOperationType gardencorev1beta1.LastOperationType, description string) error { +func (r *reconciler) updateStatusSuccess(ctx context.Context, logger logr.Logger, worker *extensionsv1alpha1.Worker, lastOperationType gardencorev1beta1.LastOperationType, description string) error { logger.Info(description) - return extensionscontroller.TryUpdateStatus(r.ctx, retry.DefaultBackoff, r.client, worker, func() error { + return extensionscontroller.TryUpdateStatus(ctx, retry.DefaultBackoff, r.client, worker, func() error { worker.Status.ObservedGeneration = worker.Generation worker.Status.LastOperation, worker.Status.LastError = extensionscontroller.ReconcileSucceeded(lastOperationType, description) return nil }) } -func (r *reconciler) removeFinalizerFromWorker(logger logr.Logger, worker *extensionsv1alpha1.Worker) error { +func (r *reconciler) removeFinalizerFromWorker(ctx context.Context, logger logr.Logger, worker *extensionsv1alpha1.Worker) error { logger.Info("Removing finalizer") - if err := extensionscontroller.DeleteFinalizer(r.ctx, r.client, FinalizerName, worker); err != nil { + if err := extensionscontroller.DeleteFinalizer(ctx, r.client, worker, FinalizerName); err != nil { return fmt.Errorf("error removing finalizer from Worker: %+v", err) } return nil } -func (r *reconciler) removeAnnotation(logger logr.Logger, worker *extensionsv1alpha1.Worker) error { +func (r *reconciler) removeAnnotation(ctx context.Context, logger logr.Logger, worker *extensionsv1alpha1.Worker) error { logger.Info("Removing operation annotation") - return extensionscontroller.RemoveAnnotation(r.ctx, r.client, worker, v1beta1constants.GardenerOperation) + return extensionscontroller.RemoveAnnotation(ctx, r.client, worker, v1beta1constants.GardenerOperation) } -func (r *reconciler) migrate(logger logr.Logger, worker *extensionsv1alpha1.Worker, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { - if err := r.updateStatusProcessing(logger, worker, gardencorev1beta1.LastOperationTypeMigrate, "Starting Migration of the worker"); err != nil { +func (r *reconciler) migrate(ctx context.Context, logger logr.Logger, worker *extensionsv1alpha1.Worker, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { + if err := r.updateStatusProcessing(ctx, logger, worker, gardencorev1beta1.LastOperationTypeMigrate, "Starting Migration of the worker"); err != nil { return reconcile.Result{}, err } - if err := r.actuator.Migrate(r.ctx, worker, cluster); err != nil { - r.updateStatusError(err, worker, gardencorev1beta1.LastOperationTypeMigrate, "Error migrating worker") + if err := r.actuator.Migrate(ctx, worker, cluster); err != nil { + r.updateStatusError(ctx, err, worker, gardencorev1beta1.LastOperationTypeMigrate, "Error migrating worker") return extensionscontroller.ReconcileErr(err) } - if err := r.updateStatusSuccess(logger, worker, gardencorev1beta1.LastOperationTypeMigrate, "Successfully migrate worker"); err != nil { + if err := r.updateStatusSuccess(ctx, logger, worker, gardencorev1beta1.LastOperationTypeMigrate, "Successfully migrate worker"); err != nil { return reconcile.Result{}, err } - if err := r.removeFinalizerFromWorker(logger, worker); err != nil { + if err := r.removeFinalizerFromWorker(ctx, logger, worker); err != nil { return reconcile.Result{}, err } // remove operation annotation 'migrate' - if err := r.removeAnnotation(logger, worker); err != nil { + if err := r.removeAnnotation(ctx, logger, worker); err != nil { return reconcile.Result{}, fmt.Errorf("error removing annotation from Worker: %+v", err) } return reconcile.Result{}, nil } -func (r *reconciler) delete(logger logr.Logger, worker *extensionsv1alpha1.Worker, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { +func (r *reconciler) delete(ctx context.Context, logger logr.Logger, worker *extensionsv1alpha1.Worker, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { hasFinalizer, err := extensionscontroller.HasFinalizer(worker, FinalizerName) if err != nil { return reconcile.Result{}, fmt.Errorf("could not instantiate finalizer deletion: %+v", err) @@ -184,60 +176,60 @@ func (r *reconciler) delete(logger logr.Logger, worker *extensionsv1alpha1.Worke return reconcile.Result{}, nil } - if err := r.updateStatusProcessing(logger, worker, gardencorev1beta1.LastOperationTypeDelete, "Deleting the worker"); err != nil { + if err := r.updateStatusProcessing(ctx, logger, worker, gardencorev1beta1.LastOperationTypeDelete, "Deleting the worker"); err != nil { return reconcile.Result{}, err } - if err := r.actuator.Delete(r.ctx, worker, cluster); err != nil { - r.updateStatusError(err, worker, gardencorev1beta1.LastOperationTypeDelete, "Error deleting worker") + if err := r.actuator.Delete(ctx, worker, cluster); err != nil { + r.updateStatusError(ctx, err, worker, gardencorev1beta1.LastOperationTypeDelete, "Error deleting worker") return extensionscontroller.ReconcileErr(err) } - if err := r.updateStatusSuccess(logger, worker, gardencorev1beta1.LastOperationTypeDelete, "Successfully deleted worker"); err != nil { + if err := r.updateStatusSuccess(ctx, logger, worker, gardencorev1beta1.LastOperationTypeDelete, "Successfully deleted worker"); err != nil { return reconcile.Result{}, err } - err = r.removeFinalizerFromWorker(logger, worker) + err = r.removeFinalizerFromWorker(ctx, logger, worker) return reconcile.Result{}, err } -func (r *reconciler) reconcile(logger logr.Logger, worker *extensionsv1alpha1.Worker, cluster *extensionscontroller.Cluster, operationType gardencorev1beta1.LastOperationType) (reconcile.Result, error) { +func (r *reconciler) reconcile(ctx context.Context, logger logr.Logger, worker *extensionsv1alpha1.Worker, cluster *extensionscontroller.Cluster, operationType gardencorev1beta1.LastOperationType) (reconcile.Result, error) { logger.Info("Ensuring finalizer") - if err := controller.EnsureFinalizer(r.ctx, r.client, FinalizerName, worker); err != nil { + if err := controller.EnsureFinalizer(ctx, r.client, worker, FinalizerName); err != nil { return reconcile.Result{}, err } - if err := r.updateStatusProcessing(logger, worker, operationType, "Reconciling the worker"); err != nil { + if err := r.updateStatusProcessing(ctx, logger, worker, operationType, "Reconciling the worker"); err != nil { return reconcile.Result{}, err } - if err := r.actuator.Reconcile(r.ctx, worker, cluster); err != nil { - r.updateStatusError(err, worker, operationType, "Error reconciling worker") + if err := r.actuator.Reconcile(ctx, worker, cluster); err != nil { + r.updateStatusError(ctx, err, worker, operationType, "Error reconciling worker") return extensionscontroller.ReconcileErr(err) } - if err := r.updateStatusSuccess(logger, worker, operationType, "Successfully reconciled worker"); err != nil { + if err := r.updateStatusSuccess(ctx, logger, worker, operationType, "Successfully reconciled worker"); err != nil { return reconcile.Result{}, err } return reconcile.Result{}, nil } -func (r *reconciler) restore(logger logr.Logger, worker *extensionsv1alpha1.Worker, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { - if err := r.updateStatusProcessing(logger, worker, gardencorev1beta1.LastOperationTypeRestore, "Restoring the worker"); err != nil { +func (r *reconciler) restore(ctx context.Context, logger logr.Logger, worker *extensionsv1alpha1.Worker, cluster *extensionscontroller.Cluster) (reconcile.Result, error) { + if err := r.updateStatusProcessing(ctx, logger, worker, gardencorev1beta1.LastOperationTypeRestore, "Restoring the worker"); err != nil { return reconcile.Result{}, err } - if err := r.actuator.Restore(r.ctx, worker, cluster); err != nil { - r.updateStatusError(err, worker, gardencorev1beta1.LastOperationTypeRestore, "Error restoring worker") + if err := r.actuator.Restore(ctx, worker, cluster); err != nil { + r.updateStatusError(ctx, err, worker, gardencorev1beta1.LastOperationTypeRestore, "Error restoring worker") return extensionscontroller.ReconcileErr(err) } - if err := r.updateStatusSuccess(logger, worker, gardencorev1beta1.LastOperationTypeRestore, "Successfully reconciled worker"); err != nil { + if err := r.updateStatusSuccess(ctx, logger, worker, gardencorev1beta1.LastOperationTypeRestore, "Successfully reconciled worker"); err != nil { return reconcile.Result{}, err } // remove operation annotation 'restore' - if err := r.removeAnnotation(logger, worker); err != nil { + if err := r.removeAnnotation(ctx, logger, worker); err != nil { return reconcile.Result{}, fmt.Errorf("error removing annotation from Worker: %+v", err) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/state_reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/state_reconciler.go index d608c92bd..9f2aeb521 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/state_reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/state_reconciler.go @@ -21,7 +21,6 @@ import ( gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - contextutil "github.com/gardener/gardener/pkg/utils/context" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "github.com/go-logr/logr" @@ -51,7 +50,6 @@ type stateReconciler struct { actuator StateActuator recorder record.EventRecorder - ctx context.Context client client.Client } @@ -74,14 +72,9 @@ func (r *stateReconciler) InjectClient(client client.Client) error { return nil } -func (r *stateReconciler) InjectStopChannel(stopCh <-chan struct{}) error { - r.ctx = contextutil.FromStopChannel(stopCh) - return nil -} - -func (r *stateReconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *stateReconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { worker := &extensionsv1alpha1.Worker{} - if err := r.client.Get(r.ctx, request.NamespacedName, worker); err != nil { + if err := r.client.Get(ctx, request.NamespacedName, worker); err != nil { if errors.IsNotFound(err) { return reconcile.Result{}, nil } @@ -92,7 +85,7 @@ func (r *stateReconciler) Reconcile(request reconcile.Request) (reconcile.Result // Deletion flow if worker.DeletionTimestamp != nil { - //Nothing to do + // Nothing to do return reconcile.Result{}, nil } @@ -101,13 +94,13 @@ func (r *stateReconciler) Reconcile(request reconcile.Request) (reconcile.Result if operationType != gardencorev1beta1.LastOperationTypeReconcile { return reconcile.Result{Requeue: true}, nil } else if isWorkerMigrated(worker) { - //Nothing to do + // Nothing to do return reconcile.Result{}, nil } r.recorder.Event(worker, corev1.EventTypeNormal, StartToSyncState, "Updating the worker state") - if err := r.actuator.Reconcile(r.ctx, worker); err != nil { + if err := r.actuator.Reconcile(ctx, worker); err != nil { msg := "Error updating worker state" logger.Error(err, msg) r.recorder.Event(worker, corev1.EventTypeWarning, ErrorStateSync, msg) diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/event/event.go b/vendor/github.com/gardener/gardener/extensions/pkg/event/event.go deleted file mode 100644 index a2b7abde2..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/event/event.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// 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 event - -import ( - "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "sigs.k8s.io/controller-runtime/pkg/event" -) - -// NewFromObject creates a new GenericEvent from the given runtime.Object. -// -// It tries to extract a metav1.Object from the given Object. If it fails, the Meta -// of the resulting GenericEvent will be `nil`. -func NewFromObject(obj runtime.Object) event.GenericEvent { - accessor, err := meta.Accessor(obj) - if err != nil { - return NewGeneric(nil, obj) - } - - return NewGeneric(accessor, obj) -} - -// NewGeneric creates a new GenericEvent from the given metav1.Object and runtime.Object. -func NewGeneric(meta metav1.Object, obj runtime.Object) event.GenericEvent { - return event.GenericEvent{ - Meta: meta, - Object: obj, - } -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/handler/enqueue_mapped.go b/vendor/github.com/gardener/gardener/extensions/pkg/handler/enqueue_mapped.go new file mode 100644 index 000000000..157249424 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/handler/enqueue_mapped.go @@ -0,0 +1,116 @@ +// Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// 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 handler + +import ( + "k8s.io/client-go/util/workqueue" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/event" + "sigs.k8s.io/controller-runtime/pkg/handler" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + "sigs.k8s.io/controller-runtime/pkg/runtime/inject" +) + +// Mapper maps an object to a collection of keys to be enqueued +type Mapper interface { + // Map maps an object + Map(obj client.Object) []reconcile.Request +} + +var _ Mapper = MapFunc(nil) + +// MapFunc is the signature required for enqueueing requests from a generic function. +// This type is usually used with EnqueueRequestsFromMapFunc when registering an event handler. +type MapFunc func(client.Object) []reconcile.Request + +// Map implements Mapper. +func (f MapFunc) Map(obj client.Object) []reconcile.Request { + return f(obj) +} + +// EnqueueRequestsFromMapper is similar to controller-runtime's handler.EnqueueRequestsFromMapFunc. +// Instead of taking only a MapFunc it also allows passing a Mapper interface. Also, it allows customizing the +// behaviour on UpdateEvents. +// For UpdateEvents, the given UpdateBehaviour decides if only the old, only the new or both objects should be mapped +// and enqueued. +func EnqueueRequestsFromMapper(m Mapper, updateBehavior UpdateBehavior) handler.EventHandler { + return &enqueueRequestsFromMapFunc{ + mapper: m, + updateBehavior: updateBehavior, + } +} + +type enqueueRequestsFromMapFunc struct { + // mapper transforms the argument into a slice of keys to be reconciled + mapper Mapper + // updateBehaviour decides which object(s) to map and enqueue on updates + updateBehavior UpdateBehavior +} + +// Create implements EventHandler +func (e *enqueueRequestsFromMapFunc) Create(evt event.CreateEvent, q workqueue.RateLimitingInterface) { + e.mapAndEnqueue(q, evt.Object) +} + +// Update implements EventHandler +func (e *enqueueRequestsFromMapFunc) Update(evt event.UpdateEvent, q workqueue.RateLimitingInterface) { + switch e.updateBehavior { + case UpdateWithOldAndNew: + e.mapAndEnqueue(q, evt.ObjectOld) + e.mapAndEnqueue(q, evt.ObjectNew) + case UpdateWithOld: + e.mapAndEnqueue(q, evt.ObjectOld) + case UpdateWithNew: + e.mapAndEnqueue(q, evt.ObjectNew) + } +} + +// Delete implements EventHandler +func (e *enqueueRequestsFromMapFunc) Delete(evt event.DeleteEvent, q workqueue.RateLimitingInterface) { + e.mapAndEnqueue(q, evt.Object) +} + +// Generic implements EventHandler +func (e *enqueueRequestsFromMapFunc) Generic(evt event.GenericEvent, q workqueue.RateLimitingInterface) { + e.mapAndEnqueue(q, evt.Object) +} + +func (e *enqueueRequestsFromMapFunc) mapAndEnqueue(q workqueue.RateLimitingInterface, object client.Object) { + for _, req := range e.mapper.Map(object) { + q.Add(req) + } +} + +// EnqueueRequestsFromMapper can inject fields into the mapper. + +// InjectFunc implements inject.Injector. +func (e *enqueueRequestsFromMapFunc) InjectFunc(f inject.Func) error { + if f == nil { + return nil + } + return f(e.mapper) +} + +// UpdateBehavior determines how an update should be handled. +type UpdateBehavior uint8 + +const ( + // UpdateWithOldAndNew considers both, the old as well as the new object, in case of an update. + UpdateWithOldAndNew UpdateBehavior = iota + // UpdateWithOld considers only the old object in case of an update. + UpdateWithOld + // UpdateWithNew considers only the new object in case of an update. + UpdateWithNew +) diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/handler/enqueued_mapped.go b/vendor/github.com/gardener/gardener/extensions/pkg/handler/enqueued_mapped.go deleted file mode 100644 index be82e1013..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/handler/enqueued_mapped.go +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// 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 handler - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/util/workqueue" - "sigs.k8s.io/controller-runtime/pkg/event" - "sigs.k8s.io/controller-runtime/pkg/handler" - "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/runtime/inject" -) - -var _ handler.EventHandler = (*EnqueueRequestsFromMapFunc)(nil) - -// EnqueueRequestsFromMapFunc enqueues Requests by running a transformation function that outputs a collection -// of reconcile.Requests on each Event. The reconcile.Requests may be for an arbitrary set of objects -// defined by some user specified transformation of the source Event. (e.g. trigger Reconciler for a set of objects -// in response to a cluster resize event caused by adding or deleting a Node) -// -// EnqueueRequestsFromMapFunc is frequently used to fan-out updates from one object to one or more other -// objects of a differing type. -type EnqueueRequestsFromMapFunc struct { - // Mapper transforms the argument into a slice of keys to be reconciled - ToRequests Mapper -} - -// InjectFunc implements Injector. -func (e *EnqueueRequestsFromMapFunc) InjectFunc(f inject.Func) error { - return f(e.ToRequests) -} - -// Create implements EventHandler -func (e *EnqueueRequestsFromMapFunc) Create(evt event.CreateEvent, q workqueue.RateLimitingInterface) { - enqueueRequests(q, e.ToRequests.MapCreate(MapCreateObject{Meta: evt.Meta, Object: evt.Object})) -} - -// Update implements EventHandler -func (e *EnqueueRequestsFromMapFunc) Update(evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - enqueueRequests(q, e.ToRequests.MapUpdate(MapUpdateObject{ - MetaOld: evt.MetaOld, ObjectOld: evt.ObjectOld, MetaNew: evt.MetaNew, ObjectNew: evt.ObjectNew, - })) -} - -// Delete implements EventHandler -func (e *EnqueueRequestsFromMapFunc) Delete(evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - enqueueRequests(q, e.ToRequests.MapDelete(MapDeleteObject{Meta: evt.Meta, Object: evt.Object})) -} - -// Generic implements EventHandler -func (e *EnqueueRequestsFromMapFunc) Generic(evt event.GenericEvent, q workqueue.RateLimitingInterface) { - enqueueRequests(q, e.ToRequests.MapGeneric(MapGenericObject{Meta: evt.Meta, Object: evt.Object})) -} - -func enqueueRequests(q workqueue.RateLimitingInterface, requests []reconcile.Request) { - for _, req := range requests { - q.Add(req) - } -} - -// Mapper maps an object to a collection of keys to be enqueued -type Mapper interface { - // Map maps an object for a create event. - MapCreate(MapCreateObject) []reconcile.Request - // Map maps an object for a delete event. - MapDelete(MapDeleteObject) []reconcile.Request - // Map maps an object for a generic event. - MapGeneric(MapGenericObject) []reconcile.Request - // Map maps an object for an update event. - MapUpdate(MapUpdateObject) []reconcile.Request -} - -// MapGenericObject contains information from a generic event to be transformed into a Request. -type MapGenericObject struct { - // Meta is the meta data for an object from an event. - Meta metav1.Object - - // Object is the object from an event. - Object runtime.Object -} - -// MapCreateObject contains information from a create event to be transformed into a Request. -type MapCreateObject struct { - // Meta is the meta data for an object from an event. - Meta metav1.Object - - // Object is the object from an event. - Object runtime.Object -} - -// MapDeleteObject contains information from a delete event to be transformed into a Request. -type MapDeleteObject struct { - // Meta is the meta data for an object from an event. - Meta metav1.Object - - // Object is the object from an event. - Object runtime.Object -} - -// MapUpdateObject contains information from an update event to be transformed into a Request. -type MapUpdateObject struct { - // MetaOld is the old meta data for an object from an update event. - MetaOld metav1.Object - // ObjectOld is the old object from an update event. - ObjectOld runtime.Object - - // MetaNew is the new meta data for an object from an update event. - MetaNew metav1.Object - // ObjectNew is the new object from an update event. - ObjectNew runtime.Object -} - -// UpdateBehavior determines how an update should be handled. -type UpdateBehavior uint8 - -const ( - // UpdateWithOldAndNew considers both, the old as well as the new object, in case of an update. - UpdateWithOldAndNew UpdateBehavior = iota - // UpdateWithOld considers only the old object in case of an update. - UpdateWithOld - // UpdateWithNew considers only the new object in case of an update. - UpdateWithNew -) - -type handlerMapper struct { - updateBehavior UpdateBehavior - mapper handler.Mapper -} - -// InjectFunc implements Injector. -func (h *handlerMapper) InjectFunc(f inject.Func) error { - return f(h.mapper) -} - -func (h *handlerMapper) MapCreate(c MapCreateObject) []reconcile.Request { - return h.mapper.Map(handler.MapObject{Meta: c.Meta, Object: c.Object}) -} - -func (h *handlerMapper) MapDelete(c MapDeleteObject) []reconcile.Request { - return h.mapper.Map(handler.MapObject{Meta: c.Meta, Object: c.Object}) -} - -func (h *handlerMapper) MapGeneric(c MapGenericObject) []reconcile.Request { - return h.mapper.Map(handler.MapObject{Meta: c.Meta, Object: c.Object}) -} - -func (h *handlerMapper) MapUpdate(c MapUpdateObject) []reconcile.Request { - switch h.updateBehavior { - case UpdateWithOldAndNew: - var requests []reconcile.Request - requests = append(requests, h.mapper.Map(handler.MapObject{Meta: c.MetaOld, Object: c.ObjectOld})...) - requests = append(requests, h.mapper.Map(handler.MapObject{Meta: c.MetaNew, Object: c.ObjectNew})...) - return requests - case UpdateWithOld: - return h.mapper.Map(handler.MapObject{Meta: c.MetaOld, Object: c.ObjectOld}) - case UpdateWithNew: - return h.mapper.Map(handler.MapObject{Meta: c.MetaNew, Object: c.ObjectNew}) - default: - return nil - } -} - -// SimpleMapper wraps a mapper and calls its update function according to the given `updateBehavior`. -func SimpleMapper(mapper handler.Mapper, updateBehavior UpdateBehavior) Mapper { - return &handlerMapper{updateBehavior, mapper} -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/handler/mapper.go b/vendor/github.com/gardener/gardener/extensions/pkg/handler/mapper.go index 3ad7280b9..2e80a8478 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/handler/mapper.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/handler/mapper.go @@ -17,22 +17,24 @@ package handler import ( "context" - extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" + + extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" + contextutil "github.com/gardener/gardener/pkg/utils/context" ) type clusterToObjectMapper struct { + ctx context.Context client client.Client - newObjListFunc func() runtime.Object + newObjListFunc func() client.ObjectList predicates []predicate.Predicate } @@ -41,6 +43,11 @@ func (m *clusterToObjectMapper) InjectClient(c client.Client) error { return nil } +func (m *clusterToObjectMapper) InjectStopChannel(stopCh <-chan struct{}) error { + m.ctx = contextutil.FromStopChannel(stopCh) + return nil +} + func (m *clusterToObjectMapper) InjectFunc(f inject.Func) error { for _, p := range m.predicates { if err := f(p); err != nil { @@ -50,39 +57,29 @@ func (m *clusterToObjectMapper) InjectFunc(f inject.Func) error { return nil } -func (m *clusterToObjectMapper) Map(obj handler.MapObject) []reconcile.Request { - ctx := context.TODO() - - if obj.Object == nil { - return nil - } - - cluster, ok := obj.Object.(*extensionsv1alpha1.Cluster) +func (m *clusterToObjectMapper) Map(obj client.Object) []reconcile.Request { + cluster, ok := obj.(*extensionsv1alpha1.Cluster) if !ok { return nil } objList := m.newObjListFunc() - if err := m.client.List(ctx, objList, client.InNamespace(cluster.Name)); err != nil { + if err := m.client.List(m.ctx, objList, client.InNamespace(cluster.Name)); err != nil { return nil } var requests []reconcile.Request utilruntime.HandleError(meta.EachListItem(objList, func(obj runtime.Object) error { - accessor, err := meta.Accessor(obj) - if err != nil { - return err - } - - if !extensionspredicate.EvalGeneric(obj, m.predicates...) { + o := obj.(client.Object) + if !extensionspredicate.EvalGeneric(o, m.predicates...) { return nil } requests = append(requests, reconcile.Request{ NamespacedName: types.NamespacedName{ - Namespace: accessor.GetNamespace(), - Name: accessor.GetName(), + Namespace: o.GetNamespace(), + Name: o.GetName(), }, }) return nil @@ -92,6 +89,6 @@ func (m *clusterToObjectMapper) Map(obj handler.MapObject) []reconcile.Request { // ClusterToObjectMapper returns a mapper that returns requests for objects whose // referenced clusters have been modified. -func ClusterToObjectMapper(newObjListFunc func() runtime.Object, predicates []predicate.Predicate) handler.Mapper { +func ClusterToObjectMapper(newObjListFunc func() client.ObjectList, predicates []predicate.Predicate) Mapper { return &clusterToObjectMapper{newObjListFunc: newObjListFunc, predicates: predicates} } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/predicate/mapper.go b/vendor/github.com/gardener/gardener/extensions/pkg/predicate/mapper.go index 2a199ac7e..a24c79afb 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/predicate/mapper.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/predicate/mapper.go @@ -15,8 +15,6 @@ package predicate import ( - extensionsevent "github.com/gardener/gardener/extensions/pkg/event" - "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" @@ -74,7 +72,7 @@ func (m *mapperWithTriggers) InjectFunc(f inject.Func) error { // Create implements Predicate. func (m *mapperWithTriggers) Create(e event.CreateEvent) bool { if _, ok := m.triggers[CreateTrigger]; ok { - return m.mapper.Map(extensionsevent.NewGeneric(e.Meta, e.Object)) + return m.mapper.Map(event.GenericEvent(e)) } return true } @@ -82,7 +80,7 @@ func (m *mapperWithTriggers) Create(e event.CreateEvent) bool { // Delete implements Predicate. func (m *mapperWithTriggers) Delete(e event.DeleteEvent) bool { if _, ok := m.triggers[DeleteTrigger]; ok { - return m.mapper.Map(extensionsevent.NewGeneric(e.Meta, e.Object)) + return m.mapper.Map(event.GenericEvent{Object: e.Object}) } return true } @@ -90,10 +88,10 @@ func (m *mapperWithTriggers) Delete(e event.DeleteEvent) bool { // Update implements Predicate. func (m *mapperWithTriggers) Update(e event.UpdateEvent) bool { if _, ok := m.triggers[UpdateOldTrigger]; ok { - return m.mapper.Map(extensionsevent.NewGeneric(e.MetaOld, e.ObjectOld)) + return m.mapper.Map(event.GenericEvent{Object: e.ObjectOld}) } if _, ok := m.triggers[UpdateNewTrigger]; ok { - return m.mapper.Map(extensionsevent.NewGeneric(e.MetaNew, e.ObjectNew)) + return m.mapper.Map(event.GenericEvent{Object: e.ObjectNew}) } return true } @@ -101,7 +99,7 @@ func (m *mapperWithTriggers) Update(e event.UpdateEvent) bool { // Generic implements Predicate. func (m *mapperWithTriggers) Generic(e event.GenericEvent) bool { if _, ok := m.triggers[GenericTrigger]; ok { - return m.mapper.Map(extensionsevent.NewGeneric(e.Meta, e.Object)) + return m.mapper.Map(event.GenericEvent{Object: e.Object}) } return true } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/predicate/predicate.go b/vendor/github.com/gardener/gardener/extensions/pkg/predicate/predicate.go index d54a5e329..a43f43f4e 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/predicate/predicate.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/predicate/predicate.go @@ -17,8 +17,9 @@ package predicate import ( "errors" + "sigs.k8s.io/controller-runtime/pkg/client" + extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - extensionsevent "github.com/gardener/gardener/extensions/pkg/event" extensionsinject "github.com/gardener/gardener/extensions/pkg/inject" gardencore "github.com/gardener/gardener/pkg/api/core" "github.com/gardener/gardener/pkg/api/extensions" @@ -38,9 +39,8 @@ import ( var Log logr.Logger = log.Log // EvalGeneric returns true if all predicates match for the given object. -func EvalGeneric(obj runtime.Object, predicates ...predicate.Predicate) bool { - e := extensionsevent.NewFromObject(obj) - +func EvalGeneric(obj client.Object, predicates ...predicate.Predicate) bool { + e := event.GenericEvent{Object: obj} for _, p := range predicates { if !p.Generic(e) { return false @@ -58,18 +58,14 @@ type shootNotFailedMapper struct { } func (s *shootNotFailedMapper) Map(e event.GenericEvent) bool { - if e.Meta == nil { - return false - } - // Wait for cache sync because of backing client cache. - if !s.Cache.WaitForCacheSync(s.Context.Done()) { + if !s.Cache.WaitForCacheSync(s.Context) { err := errors.New("failed to wait for caches to sync") s.log.Error(err, "Could not wait for Cache to sync", "predicate", "ShootNotFailed") return false } - cluster, err := extensionscontroller.GetCluster(s.Context, s.Client, e.Meta.GetNamespace()) + cluster, err := extensionscontroller.GetCluster(s.Context, s.Client, e.Object.GetNamespace()) if err != nil { s.log.Error(err, "Could not retrieve corresponding cluster") return false @@ -104,16 +100,16 @@ func HasType(typeName string) predicate.Predicate { // HasName returns a predicate that matches the given name of a resource. func HasName(name string) predicate.Predicate { return FromMapper(MapperFunc(func(e event.GenericEvent) bool { - return e.Meta.GetName() == name + return e.Object.GetName() == name }), CreateTrigger, UpdateNewTrigger, DeleteTrigger, GenericTrigger) } // HasOperationAnnotation is a predicate for the operation annotation. func HasOperationAnnotation() predicate.Predicate { return FromMapper(MapperFunc(func(e event.GenericEvent) bool { - return e.Meta.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationReconcile || - e.Meta.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationRestore || - e.Meta.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationMigrate + return e.Object.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationReconcile || + e.Object.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationRestore || + e.Object.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationMigrate }), CreateTrigger, UpdateNewTrigger, GenericTrigger) } @@ -149,7 +145,7 @@ func LastOperationNotSuccessful() predicate.Predicate { // IsDeleting is a predicate for objects having a deletion timestamp. func IsDeleting() predicate.Predicate { return FromMapper(MapperFunc(func(e event.GenericEvent) bool { - return e.Meta.GetDeletionTimestamp() != nil + return e.Object.GetDeletionTimestamp() != nil }), CreateTrigger, UpdateNewTrigger, GenericTrigger) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/config.go b/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/config.go index fbea07136..ce5494e63 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/config.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/config.go @@ -208,22 +208,6 @@ func DefaultInitializer(c client.Client, main, variables string, tfvars []byte, }) } -// prepare checks whether all required ConfigMaps and Secrets exist. It returns the number of -// existing ConfigMaps/Secrets, or the error in case something unexpected happens. -func (t *terraformer) prepare(ctx context.Context) (int, error) { - numberOfExistingResources, err := t.NumberOfResources(ctx) - if err != nil { - return -1, err - } - - // Clean up possible existing pod artifacts from previous runs - if err := t.EnsureCleanedUp(ctx); err != nil { - return -1, err - } - - return numberOfExistingResources, nil -} - // NumberOfResources returns the number of existing Terraform resources or an error in case something went wrong. func (t *terraformer) NumberOfResources(ctx context.Context) (int, error) { numberOfExistingResources := 0 @@ -280,12 +264,13 @@ func (t *terraformer) CleanupConfiguration(ctx context.Context) error { // EnsureCleanedUp deletes the Terraformer pods, and waits until everything has been cleaned up. func (t *terraformer) EnsureCleanedUp(ctx context.Context) error { - t.logger.Info("Ensuring all terraformer Pods have been deleted") + t.logger.Info("Ensuring all Terraformer pods have been deleted") - podList, err := t.listTerraformerPods(ctx) + podList, err := t.listPods(ctx) if err != nil { return err } + if err := t.deleteTerraformerPods(ctx, podList); err != nil { return err } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/errors.go b/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/errors.go index a1d779980..9af71feb5 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/errors.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/errors.go @@ -24,23 +24,21 @@ import ( // retrieveTerraformErrors gets a map whose keys are pod names and whose values are the corresponding logs, // and it parses the logs for Terraform errors. If none are found, it will return nil, and otherwise the list of // found errors as string slice. -func retrieveTerraformErrors(logList map[string]string) []string { +func retrieveTerraformErrors(podName, logs string) []string { var ( - foundErrors = map[string]string{} + foundErrors = map[string]struct{}{} errorList []string ) - for podName, output := range logList { - errorMessage := findTerraformErrors(output) + errorMessage := findTerraformErrors(logs) - // Add the errorMessage to the list of found errors (only if it does not already exist). - if _, ok := foundErrors[errorMessage]; !ok && errorMessage != "" { - foundErrors[errorMessage] = podName - } + // Add the errorMessage to the list of found errors (only if it does not already exist). + if _, ok := foundErrors[errorMessage]; !ok && errorMessage != "" { + foundErrors[errorMessage] = struct{}{} } - for errorMessage, podName := range foundErrors { - errorList = append(errorList, fmt.Sprintf("-> Pod '%s' reported:\n%s", podName, errorMessage)) + for message := range foundErrors { + errorList = append(errorList, fmt.Sprintf("-> Pod '%s' reported:\n%s", podName, message)) } if len(errorList) == 0 { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/terraformer.go b/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/terraformer.go index 291e6de17..22ca71a7d 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/terraformer.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/terraformer.go @@ -35,15 +35,15 @@ import ( v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" "github.com/gardener/gardener/pkg/client/kubernetes" - kutils "github.com/gardener/gardener/pkg/utils/kubernetes" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "github.com/gardener/gardener/pkg/utils/retry" ) const ( - // TerraformerLabelKeyName is a key for label on a Terraformer Pod indicating the Terraformer name. - TerraformerLabelKeyName = "terraformer.gardener.cloud/name" - // TerraformerLabelKeyPurpose is a key for label on a Terraformer Pod indicating the Terraformer purpose. - TerraformerLabelKeyPurpose = "terraformer.gardener.cloud/purpose" + // LabelKeyName is a key for label on a Terraformer Pod indicating the Terraformer name. + LabelKeyName = "terraformer.gardener.cloud/name" + // LabelKeyPurpose is a key for label on a Terraformer Pod indicating the Terraformer purpose. + LabelKeyPurpose = "terraformer.gardener.cloud/purpose" ) type factory struct{} @@ -73,7 +73,10 @@ func NewForConfig( namespace, name, image string, -) (Terraformer, error) { +) ( + Terraformer, + error, +) { c, err := client.New(config, client.Options{}) if err != nil { return nil, err @@ -113,14 +116,14 @@ func New( purpose: purpose, image: image, - configName: prefix + TerraformerConfigSuffix, - variablesName: prefix + TerraformerVariablesSuffix, - stateName: prefix + TerraformerStateSuffix, + configName: prefix + ConfigSuffix, + variablesName: prefix + VariablesSuffix, + stateName: prefix + StateSuffix, logLevel: "info", terminationGracePeriodSeconds: int64(3600), - deadlineCleaning: 10 * time.Minute, + deadlineCleaning: 20 * time.Minute, deadlinePod: 20 * time.Minute, } } @@ -144,118 +147,141 @@ func (t *terraformer) Destroy(ctx context.Context) error { // execute creates a Terraform Pod which runs the provided scriptName (apply or destroy), waits for the Pod to be completed // (either successful or not), prints its logs, deletes it and returns whether it was successful or not. func (t *terraformer) execute(ctx context.Context, command string) error { - var ( - logger = t.logger.WithValues("command", command) - - succeeded = true // Success status of the Terraform apply/destroy pod - execute = false // Should we skip the rest of the function depending on whether all ConfigMaps/Secrets exist/do not exist? - skipApplyOrDestroyPod = false // Should we skip the execution of the Terraform apply/destroy command (actual execution of the Terraform config)? - ) + logger := t.logger.WithValues("command", command) + var allConfigurationResourcesExist = false logger.V(1).Info("Waiting until all configuration resources exist") // We should retry the preparation check in order to allow the kube-apiserver to actually create the ConfigMaps. if err := retry.UntilTimeout(ctx, 5*time.Second, 30*time.Second, func(ctx context.Context) (done bool, err error) { - numberOfExistingResources, err := t.prepare(ctx) + numberOfExistingResources, err := t.NumberOfResources(ctx) if err != nil { return retry.SevereError(err) } if numberOfExistingResources == 0 { - logger.Info("All ConfigMaps and Secrets missing, can not execute Terraformer Pod") + logger.Info("All ConfigMaps and Secrets missing, can not execute Terraformer pod") return retry.Ok() } else if numberOfExistingResources == numberOfConfigResources { - logger.Info("All ConfigMaps and Secrets exist, will execute Terraformer Pod") - execute = true + logger.Info("All ConfigMaps and Secrets exist, will execute Terraformer pod") + allConfigurationResourcesExist = true return retry.Ok() } else { - logger.Error(fmt.Errorf("ConfigMaps or Secrets are missing"), "Cannot execute Terraformer Pod") - return retry.MinorError(fmt.Errorf("%d/%d terraform resources are missing", numberOfConfigResources-numberOfExistingResources, numberOfConfigResources)) + logger.Error(fmt.Errorf("ConfigMaps or Secrets are missing"), "Cannot execute Terraformer pod") + return retry.MinorError(fmt.Errorf("%d/%d Terraform resources are missing", numberOfConfigResources-numberOfExistingResources, numberOfConfigResources)) } }); err != nil { return err } - if !execute { + if !allConfigurationResourcesExist { return nil } + // Check if an existing Terraformer pod is still running. If yes, then adopt it. If no, then deploy a new pod (if + // necessary). + var ( + pod *corev1.Pod + deployNewPod = true + ) + + podList, err := t.listPods(ctx) + if err != nil { + return err + } + + switch { + case len(podList.Items) == 1: + if cmd := getTerraformerCommand(&podList.Items[0]); cmd == command { + // adopt still existing pod + pod = &podList.Items[0] + deployNewPod = false + } else { + // delete still existing pod and wait until it's gone + logger.Info(fmt.Sprintf("still existing Terraform pod with command %q found - ensuring the cleanup before starting a new Terraform pod with command %q", cmd, command)) + if err := t.EnsureCleanedUp(ctx); err != nil { + return err + } + } + + case len(podList.Items) > 1: + // unreachable + logger.Error(fmt.Errorf("too many Terraformer pods"), "unexpected number of still existing Terraformer pods: %d", len(podList.Items)) + if err := t.EnsureCleanedUp(ctx); err != nil { + return err + } + } + // In case of command == 'destroy', we need to first check whether the Terraform state contains // something at all. If it does not contain anything, then the 'apply' could never be executed, probably // because of syntax errors. In this case, we want to skip the Terraform destroy pod (as it wouldn't do anything // anyway) and just delete the related ConfigMaps/Secrets. if command == "destroy" { - skipApplyOrDestroyPod = t.IsStateEmpty(ctx) + deployNewPod = !t.IsStateEmpty(ctx) } - if !skipApplyOrDestroyPod { - // TODO: remove after several releases - // ensure ownerRef for already existing state configmaps - if err := t.ensureStateHasOwnerRef(ctx); err != nil { - return fmt.Errorf("failed to ensure owner reference for the state configmap: %w", err) - } - + if deployNewPod { // Create Terraform Pod which executes the provided command generateName := t.computePodGenerateName(command) - logger.Info("Deploying Terraformer Pod", "generateName", generateName) - pod, err := t.deployTerraformerPod(ctx, generateName, command) + logger.Info("Deploying Terraformer pod", "generateName", generateName) + pod, err = t.deployTerraformerPod(ctx, generateName, command) if err != nil { - return fmt.Errorf("failed to deploy the Terraformer Pod with .meta.generateName %q: %w", generateName, err) + return fmt.Errorf("failed to deploy the Terraformer pod with .meta.generateName %q: %w", generateName, err) } + logger.Info("Successfully created Terraformer pod", "pod", kutil.KeyFromObject(pod)) + } - logger.Info("Successfully created Terraformer Pod", "pod", kutils.KeyFromObject(pod)) + if pod != nil { + // TODO: remove after several releases + // ensure ownerRef for already existing state configmaps + if err := t.ensureStateHasOwnerRef(ctx); err != nil { + return fmt.Errorf("failed to ensure owner reference for the state configmap: %w", err) + } // Wait for the Terraform apply/destroy Pod to be completed exitCode := t.waitForPod(ctx, logger, pod, t.deadlinePod) - succeeded = exitCode == 0 + succeeded := exitCode == 0 if succeeded { - logger.Info("Terraformer Pod finished successfully") + logger.Info("Terraformer pod finished successfully") } else { - logger.Info("Terraformer Pod finished with error", "exitCode", exitCode) + logger.Info("Terraformer pod finished with error", "exitCode", exitCode) } - } - - // Retrieve the logs of the apply/destroy Pods - podList, err := t.listTerraformerPods(ctx) - if err != nil { - logger.Error(err, "Could not retrieve list of Terraformer pods") - podList = &corev1.PodList{} - } - logger.V(1).Info("Fetching the logs for all Terraformer pods") - logList, err := t.retrievePodLogs(ctx, logger, podList) - if err != nil { - logger.Error(err, "Could not retrieve the logs of the Terraformer pods") - logList = map[string]string{} - } - for podName, podLogs := range logList { - logger.V(1).Info("Logs of Terraformer Pod: "+podLogs, "pod", client.ObjectKey{Namespace: t.namespace, Name: podName}) - } + // Retrieve the logs of the pod + logger.V(1).Info("Fetching the logs for Terraformer pod") + logs, err := t.retrievePodLogs(ctx, logger, pod) + if err != nil { + logger.Error(err, "Could not retrieve the logs of the Terraformer pod") + return err + } + logger.V(1).Info("Logs of Terraformer pod: "+logs, "pod", client.ObjectKey{Namespace: t.namespace, Name: pod.Name}) - // Delete the Terraformer Pods - logger.Info("Cleaning up pods created by Terraformer") - if err := t.deleteTerraformerPods(ctx, podList); err != nil { - return err - } + // Delete the Terraformer Pod + logger.Info("Cleaning up Terraformer pod") + if err := t.client.Delete(ctx, pod); client.IgnoreNotFound(err) != nil { + return err + } - // Evaluate whether the execution was successful or not - logger.Info("Terraformer execution has been completed") - if !succeeded { - errorMessage := fmt.Sprintf("Terraform execution for command '%s' could not be completed.", command) - if terraformErrors := retrieveTerraformErrors(logList); terraformErrors != nil { - errorMessage += fmt.Sprintf(" The following issues have been found in the logs:\n\n%s", strings.Join(terraformErrors, "\n\n")) + // Evaluate whether the execution was successful or not + logger.Info("Terraformer execution has been completed") + if !succeeded { + errorMessage := fmt.Sprintf("Terraform execution for command '%s' could not be completed.", command) + if terraformErrors := retrieveTerraformErrors(pod.Name, logs); terraformErrors != nil { + errorMessage += fmt.Sprintf(" The following issues have been found in the logs:\n\n%s", strings.Join(terraformErrors, "\n\n")) + } + return gardencorev1beta1helper.DetermineError(errors.New(errorMessage), errorMessage) } - return gardencorev1beta1helper.DetermineError(errors.New(errorMessage), errorMessage) } + return nil } const ( - terraformerName = "terraformer" - rbacName = "gardener.cloud:system:terraformer" + name = "terraformer" + rbacName = "gardener.cloud:system:terraformer" ) func (t *terraformer) createOrUpdateServiceAccount(ctx context.Context) error { - serviceAccount := &corev1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Namespace: t.namespace, Name: terraformerName}} + serviceAccount := &corev1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Namespace: t.namespace, Name: name}} _, err := controllerutil.CreateOrUpdate(ctx, t.client, serviceAccount, func() error { return nil }) @@ -285,7 +311,7 @@ func (t *terraformer) createOrUpdateRoleBinding(ctx context.Context) error { } roleBinding.Subjects = []rbacv1.Subject{{ Kind: rbacv1.ServiceAccountKind, - Name: terraformerName, + Name: name, Namespace: t.namespace, }} return nil @@ -309,12 +335,12 @@ func (t *terraformer) ensureStateHasOwnerRef(ctx context.Context) error { } configMap := &corev1.ConfigMap{} - if err := t.client.Get(ctx, kutils.Key(t.namespace, t.stateName), configMap); err != nil { + if err := t.client.Get(ctx, kutil.Key(t.namespace, t.stateName), configMap); err != nil { return err } oldConfigMap := configMap.DeepCopy() - configMap.SetOwnerReferences(kutils.MergeOwnerReferences(configMap.OwnerReferences, *t.ownerRef)) + configMap.SetOwnerReferences(kutil.MergeOwnerReferences(configMap.OwnerReferences, *t.ownerRef)) return t.client.Patch(ctx, configMap, client.MergeFromWithOptions( oldConfigMap, @@ -333,8 +359,8 @@ func (t *terraformer) deployTerraformerPod(ctx context.Context, generateName, co Namespace: t.namespace, Labels: map[string]string{ // Terraformer labels - TerraformerLabelKeyName: t.name, - TerraformerLabelKeyPurpose: t.purpose, + LabelKeyName: t.name, + LabelKeyPurpose: t.purpose, // Network policy labels v1beta1constants.LabelNetworkPolicyToDNS: v1beta1constants.LabelNetworkPolicyAllowed, v1beta1constants.LabelNetworkPolicyToPrivateNetworks: v1beta1constants.LabelNetworkPolicyAllowed, @@ -361,7 +387,7 @@ func (t *terraformer) deployTerraformerPod(ctx context.Context, generateName, co Env: t.env(), }}, RestartPolicy: corev1.RestartPolicyNever, - ServiceAccountName: terraformerName, + ServiceAccountName: name, TerminationGracePeriodSeconds: pointer.Int64Ptr(t.terminationGracePeriodSeconds), }, } @@ -388,6 +414,19 @@ func (t *terraformer) computeTerraformerCommand(command string) []string { } } +func getTerraformerCommand(pod *corev1.Pod) string { + if pod == nil { + return "" + } + if len(pod.Spec.Containers) != 1 { + return "" + } + if len(pod.Spec.Containers[0].Command) < 2 { + return "" + } + return pod.Spec.Containers[0].Command[1] +} + func (t *terraformer) env() []corev1.EnvVar { var envVars []corev1.EnvVar @@ -406,47 +445,32 @@ func (t *terraformer) env() []corev1.EnvVar { // listTerraformerPods lists all pods in the Terraformer namespace which have labels 'terraformer.gardener.cloud/name' // and 'terraformer.gardener.cloud/purpose' matching the current Terraformer name and purpose. -func (t *terraformer) listTerraformerPods(ctx context.Context) (*corev1.PodList, error) { +func (t *terraformer) listPods(ctx context.Context) (*corev1.PodList, error) { var ( - labels = map[string]string{ - TerraformerLabelKeyName: t.name, - TerraformerLabelKeyPurpose: t.purpose, - } podList = &corev1.PodList{} + labels = map[string]string{LabelKeyName: t.name, LabelKeyPurpose: t.purpose} ) - if err := t.client.List(ctx, podList, - client.InNamespace(t.namespace), - client.MatchingLabels(labels)); err != nil { + if err := t.client.List(ctx, podList, client.InNamespace(t.namespace), client.MatchingLabels(labels)); err != nil { return nil, err } + return podList, nil } // retrievePodLogs fetches the logs of the created Pods by the Terraformer and returns them as a map whose // keys are pod names and whose values are the corresponding logs. -func (t *terraformer) retrievePodLogs(ctx context.Context, logger logr.Logger, podList *corev1.PodList) (map[string]string, error) { - logChan := make(chan map[string]string, 1) - go func() { - var logList = map[string]string{} - for _, pod := range podList.Items { - name := pod.Name - logs, err := kubernetes.GetPodLogs(ctx, t.coreV1Client.Pods(pod.Namespace), name, &corev1.PodLogOptions{}) - if err != nil { - logger.Error(err, "Could not retrieve the logs of Terraformer pod", "pod", kutils.KeyFromObject(&pod)) - continue - } - logList[name] = string(logs) - } - logChan <- logList - }() - - select { - case result := <-logChan: - return result, nil - case <-time.After(2 * time.Minute): - return nil, fmt.Errorf("timeout when reading the logs of all pods created by Terraformer") +func (t *terraformer) retrievePodLogs(ctx context.Context, logger logr.Logger, pod *corev1.Pod) (string, error) { + ctx, cancel := context.WithTimeout(ctx, 2*time.Minute) + defer cancel() + + logs, err := kubernetes.GetPodLogs(ctx, t.coreV1Client.Pods(pod.Namespace), pod.Name, &corev1.PodLogOptions{}) + if err != nil { + logger.Error(err, "Could not retrieve the logs of Terraformer pod", "pod", kutil.KeyFromObject(pod)) + return "", err } + + return string(logs), nil } func (t *terraformer) deleteTerraformerPods(ctx context.Context, podList *corev1.PodList) error { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/types.go b/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/types.go index 1c448ec24..298204782 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/types.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/types.go @@ -80,14 +80,14 @@ type RawState struct { const ( numberOfConfigResources = 3 - // TerraformerConfigSuffix is the suffix used for the ConfigMap which stores the Terraform configuration and variables declaration. - TerraformerConfigSuffix = ".tf-config" + // ConfigSuffix is the suffix used for the ConfigMap which stores the Terraform configuration and variables declaration. + ConfigSuffix = ".tf-config" - // TerraformerVariablesSuffix is the suffix used for the Secret which stores the Terraform variables definition. - TerraformerVariablesSuffix = ".tf-vars" + // VariablesSuffix is the suffix used for the Secret which stores the Terraform variables definition. + VariablesSuffix = ".tf-vars" - // TerraformerStateSuffix is the suffix used for the ConfigMap which stores the Terraform state. - TerraformerStateSuffix = ".tf-state" + // StateSuffix is the suffix used for the ConfigMap which stores the Terraform state. + StateSuffix = ".tf-state" // Base64Encoding denotes base64 encoding for the RawState.Data Base64Encoding = "base64" diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/waiter.go b/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/waiter.go index 2cc26a864..0c4fb5184 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/waiter.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/terraformer/waiter.go @@ -19,28 +19,28 @@ import ( "fmt" "time" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + "github.com/gardener/gardener/pkg/utils/retry" + "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" - - kutil "github.com/gardener/gardener/pkg/utils/kubernetes" - "github.com/gardener/gardener/pkg/utils/retry" ) -// WaitForCleanEnvironment waits until no Terraform Pod(s) exist for the current instance -// of the Terraformer. +// WaitForCleanEnvironment waits until no Terraform Pod(s) exist for the current instance of the Terraformer. func (t *terraformer) WaitForCleanEnvironment(ctx context.Context) error { ctx, cancel := context.WithTimeout(ctx, t.deadlineCleaning) defer cancel() t.logger.Info("Waiting for clean environment") return retry.Until(ctx, 5*time.Second, func(ctx context.Context) (done bool, err error) { - podList, err := t.listTerraformerPods(ctx) + podList, err := t.listPods(ctx) if err != nil { return retry.SevereError(err) } + if len(podList.Items) > 0 { - t.logger.Info("Waiting until all Terraformer Pods have been cleaned up") + t.logger.Info("Waiting until all Terraformer pods have been cleaned up") return retry.MinorError(fmt.Errorf("at least one terraformer pod still exists: %s", podList.Items[0].Name)) } @@ -60,15 +60,15 @@ func (t *terraformer) waitForPod(ctx context.Context, logger logr.Logger, pod *c logger = logger.WithValues("pod", kutil.KeyFromObject(pod)) - logger.Info("Waiting for Terraformer Pod to be completed...") + logger.Info("Waiting for Terraformer pod to be completed...") if err := retry.Until(ctx, 5*time.Second, func(ctx context.Context) (done bool, err error) { err = t.client.Get(ctx, kutil.KeyFromObject(pod), pod) if apierrors.IsNotFound(err) { - logger.Info("Terraformer Pod disappeared unexpectedly, somebody must have manually deleted it") + logger.Info("Terraformer pod disappeared unexpectedly, somebody must have manually deleted it") return retry.Ok() } if err != nil { - logger.Error(err, "Error retrieving Pod") + logger.Error(err, "Error retrieving pod") return retry.SevereError(err) } @@ -85,7 +85,7 @@ func (t *terraformer) waitForPod(ctx context.Context, logger logr.Logger, pod *c return retry.Ok() } - logger.Info("Waiting for terraformer pod to be completed, pod hasn't finished yet", "phase", phase, "len-of-containerstatuses", len(containerStatuses)) + logger.Info("Waiting for Terraformer pod to be completed, pod hasn't finished yet", "phase", phase, "len-of-containerstatuses", len(containerStatuses)) return retry.MinorError(fmt.Errorf("pod was not successful: phase=%s, len-of-containerstatuses=%d", phase, len(containerStatuses))) }); err != nil { exitCode = 1 diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/context/context.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/context/context.go index 4aa26c6b5..630cda0b4 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/context/context.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/context/context.go @@ -20,7 +20,6 @@ import ( extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" "github.com/pkg/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -31,12 +30,12 @@ type GardenContext interface { type gardenContext struct { client client.Client - object metav1.Object + object client.Object cluster *extensionscontroller.Cluster } // NewGardenContext creates a context object. -func NewGardenContext(client client.Client, object metav1.Object) GardenContext { +func NewGardenContext(client client.Client, object client.Object) GardenContext { return &gardenContext{ client: client, object: object, diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/controlplane.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/controlplane.go index 72b4b0943..99a50b6c0 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/controlplane.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/controlplane.go @@ -17,14 +17,14 @@ package controlplane import ( "fmt" - extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" - - v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" + + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" ) const ( @@ -52,7 +52,7 @@ type Args struct { // Provider is the provider of this webhook. Provider string // Types is a list of resource types. - Types []runtime.Object + Types []client.Object // Mutator is a mutator to be used by the admission handler. Mutator extensionswebhook.Mutator } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/mutator.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/mutator.go index 6ca894442..c96b5630d 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/mutator.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/mutator.go @@ -30,9 +30,6 @@ import ( "github.com/pkg/errors" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1" "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client" @@ -104,30 +101,23 @@ type mutator struct { } // InjectClient injects the given client into the ensurer. -// TODO Replace this with the more generic InjectFunc when controller runtime supports it func (m *mutator) InjectClient(client client.Client) error { m.client = client - if _, err := inject.ClientInto(client, m.ensurer); err != nil { - return errors.Wrap(err, "could not inject the client into the ensurer") - } return nil } +// InjectFunc injects stuff into the ensurer. +func (m *mutator) InjectFunc(f inject.Func) error { + return f(m.ensurer) +} + // Mutate validates and if needed mutates the given object. -func (m *mutator) Mutate(ctx context.Context, new, old runtime.Object) error { - acc, err := meta.Accessor(new) - if err != nil { - return errors.Wrapf(err, "could not create accessor during webhook") - } +func (m *mutator) Mutate(ctx context.Context, new, old client.Object) error { // If the object does have a deletion timestamp then we don't want to mutate anything. - if acc.GetDeletionTimestamp() != nil { + if new.GetDeletionTimestamp() != nil { return nil } - o, ok := new.(metav1.Object) - if !ok { - return errors.Wrapf(err, "could not cast runtime object to metav1 object") - } - gctx := gcontext.NewGardenContext(m.client, o) + gctx := gcontext.NewGardenContext(m.client, new) switch x := new.(type) { case *corev1.Service: @@ -135,9 +125,10 @@ func (m *mutator) Mutate(ctx context.Context, new, old runtime.Object) error { case v1beta1constants.DeploymentNameKubeAPIServer: var oldSvc *corev1.Service if old != nil { + var ok bool oldSvc, ok = old.(*corev1.Service) if !ok { - return errors.Wrapf(err, "could not cast old object to corev1.Service") + return errors.New("could not cast old object to corev1.Service") } } @@ -147,9 +138,10 @@ func (m *mutator) Mutate(ctx context.Context, new, old runtime.Object) error { case *appsv1.Deployment: var oldDep *appsv1.Deployment if old != nil { + var ok bool oldDep, ok = old.(*appsv1.Deployment) if !ok { - return errors.Wrapf(err, "could not cast old object to appsv1.Deployment") + return errors.New("could not cast old object to appsv1.Deployment") } } @@ -169,9 +161,10 @@ func (m *mutator) Mutate(ctx context.Context, new, old runtime.Object) error { case v1beta1constants.ETCDMain, v1beta1constants.ETCDEvents: var oldEtcd *druidv1alpha1.Etcd if old != nil { + var ok bool oldEtcd, ok = old.(*druidv1alpha1.Etcd) if !ok { - return errors.Wrapf(err, "could not cast old object to druidv1alpha1.Etcd") + return errors.New("could not cast old object to druidv1alpha1.Etcd") } } @@ -182,9 +175,10 @@ func (m *mutator) Mutate(ctx context.Context, new, old runtime.Object) error { if x.Spec.Purpose == extensionsv1alpha1.OperatingSystemConfigPurposeReconcile { var oldOSC *extensionsv1alpha1.OperatingSystemConfig if old != nil { + var ok bool oldOSC, ok = old.(*extensionsv1alpha1.OperatingSystemConfig) if !ok { - return errors.Wrapf(err, "could not cast old object to extensionsv1alpha1.OperatingSystemConfig") + return errors.New("could not cast old object to extensionsv1alpha1.OperatingSystemConfig") } } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler.go index bd73d2638..7ed17cd6d 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler.go @@ -20,25 +20,25 @@ import ( "fmt" "net/http" - extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" - "github.com/go-logr/logr" "github.com/pkg/errors" "k8s.io/apimachinery/pkg/api/equality" - "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/serializer" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/apiutil" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" + + extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" ) // HandlerBuilder contains information which are required to create an admission handler. type HandlerBuilder struct { - mutatorMap map[Mutator][]runtime.Object + mutatorMap map[Mutator][]client.Object predicates []predicate.Predicate scheme *runtime.Scheme logger logr.Logger @@ -47,21 +47,21 @@ type HandlerBuilder struct { // NewBuilder creates a new HandlerBuilder. func NewBuilder(mgr manager.Manager, logger logr.Logger) *HandlerBuilder { return &HandlerBuilder{ - mutatorMap: make(map[Mutator][]runtime.Object), + mutatorMap: make(map[Mutator][]client.Object), scheme: mgr.GetScheme(), logger: logger.WithName("handler"), } } // WithMutator adds the given mutator for the given types to the HandlerBuilder. -func (b *HandlerBuilder) WithMutator(mutator Mutator, types ...runtime.Object) *HandlerBuilder { +func (b *HandlerBuilder) WithMutator(mutator Mutator, types ...client.Object) *HandlerBuilder { b.mutatorMap[mutator] = append(b.mutatorMap[mutator], types...) return b } // WithValidator adds the given validator for the given types to the HandlerBuilder. -func (b *HandlerBuilder) WithValidator(validator Validator, types ...runtime.Object) *HandlerBuilder { +func (b *HandlerBuilder) WithValidator(validator Validator, types ...client.Object) *HandlerBuilder { mutator := hybridValidator(validator) b.mutatorMap[mutator] = append(b.mutatorMap[mutator], types...) return b @@ -76,7 +76,7 @@ func (b *HandlerBuilder) WithPredicates(predicates ...predicate.Predicate) *Hand // Build creates a new admission.Handler with the settings previously specified with the HandlerBuilder's functions. func (b *HandlerBuilder) Build() (admission.Handler, error) { h := &handler{ - typesMap: make(map[metav1.GroupVersionKind]runtime.Object), + typesMap: make(map[metav1.GroupVersionKind]client.Object), mutatorMap: make(map[metav1.GroupVersionKind]Mutator), predicates: b.predicates, scheme: b.scheme, @@ -100,7 +100,7 @@ func (b *HandlerBuilder) Build() (admission.Handler, error) { } type handler struct { - typesMap map[metav1.GroupVersionKind]runtime.Object + typesMap map[metav1.GroupVersionKind]client.Object mutatorMap map[metav1.GroupVersionKind]Mutator predicates []predicate.Predicate decoder runtime.Decoder @@ -154,29 +154,22 @@ func (h *handler) Handle(ctx context.Context, req admission.Request) admission.R return handle(ctx, req, mutator, t, h.decoder, h.logger, h.predicates...) } -func handle(ctx context.Context, req admission.Request, m Mutator, t runtime.Object, decoder runtime.Decoder, logger logr.Logger, predicates ...predicate.Predicate) admission.Response { +func handle(ctx context.Context, req admission.Request, m Mutator, t client.Object, decoder runtime.Decoder, logger logr.Logger, predicates ...predicate.Predicate) admission.Response { ar := req.AdmissionRequest // Decode object - obj := t.DeepCopyObject() + obj := t.DeepCopyObject().(client.Object) _, _, err := decoder.Decode(req.Object.Raw, nil, obj) if err != nil { logger.Error(errors.WithStack(err), "could not decode request", "request", ar) return admission.Errored(http.StatusBadRequest, fmt.Errorf("could not decode request %v: %v", ar, err)) } - // Get object accessor - accessor, err := meta.Accessor(obj) - if err != nil { - logger.Error(errors.WithStack(err), "could not get accessor", "object", obj) - return admission.Errored(http.StatusBadRequest, fmt.Errorf("could not get accessor for %v: %v", obj, err)) - } - - var oldObj runtime.Object + var oldObj client.Object // Only UPDATE and DELETE operations have oldObjects. if len(req.OldObject.Raw) != 0 { - oldObj = t.DeepCopyObject() + oldObj = t.DeepCopyObject().(client.Object) if _, _, err := decoder.Decode(ar.OldObject.Raw, nil, oldObj); err != nil { logger.Error(errors.WithStack(err), "could not decode old object", "object", oldObj) return admission.Errored(http.StatusBadRequest, fmt.Errorf("could not decode old object %v: %v", oldObj, err)) @@ -189,9 +182,9 @@ func handle(ctx context.Context, req admission.Request, m Mutator, t runtime.Obj } // Process the resource - newObj := obj.DeepCopyObject() + newObj := obj.DeepCopyObject().(client.Object) if err = m.Mutate(ctx, newObj, oldObj); err != nil { - logger.Error(errors.Wrap(err, "could not process"), "admission denied", "kind", ar.Kind.Kind, "namespace", accessor.GetNamespace(), "name", accessor.GetName()) + logger.Error(errors.Wrap(err, "could not process"), "admission denied", "kind", ar.Kind.Kind, "namespace", obj.GetNamespace(), "name", obj.GetName()) return admission.Errored(http.StatusBadRequest, err) } @@ -215,8 +208,8 @@ func handle(ctx context.Context, req admission.Request, m Mutator, t runtime.Obj } // buildTypesMap builds a map of the given types keyed by their GroupVersionKind, using the scheme from the given Manager. -func buildTypesMap(scheme *runtime.Scheme, types []runtime.Object) (map[metav1.GroupVersionKind]runtime.Object, error) { - typesMap := make(map[metav1.GroupVersionKind]runtime.Object) +func buildTypesMap(scheme *runtime.Scheme, types []client.Object) (map[metav1.GroupVersionKind]client.Object, error) { + typesMap := make(map[metav1.GroupVersionKind]client.Object) for _, t := range types { // Get GVK from the type gvk, err := apiutil.GVKForObject(t, scheme) diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler_shootclient.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler_shootclient.go index e8d90748d..64a6d1028 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler_shootclient.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler_shootclient.go @@ -16,20 +16,12 @@ package webhook import ( "context" - "encoding/json" "fmt" - "io" - "io/ioutil" "net/http" "strings" - "github.com/gardener/gardener/extensions/pkg/util" - - v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" "github.com/go-logr/logr" "github.com/pkg/errors" - "k8s.io/api/admission/v1beta1" - admissionv1beta1 "k8s.io/api/admission/v1beta1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -38,31 +30,34 @@ import ( "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" -) -var ( - admissionScheme = runtime.NewScheme() - admissionCodecs = serializer.NewCodecFactory(admissionScheme) + "github.com/gardener/gardener/extensions/pkg/util" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" ) // NewHandlerWithShootClient creates a new handler for the given types, using the given mutator, and logger. -func NewHandlerWithShootClient(mgr manager.Manager, types []runtime.Object, mutator MutatorWithShootClient, logger logr.Logger) (*handlerShootClient, error) { +func NewHandlerWithShootClient(mgr manager.Manager, types []client.Object, mutator MutatorWithShootClient, logger logr.Logger) (http.Handler, error) { // Build a map of the given types keyed by their GVKs typesMap, err := buildTypesMap(mgr.GetScheme(), types) if err != nil { return nil, err } - // Create and return a handler - return &handlerShootClient{ - typesMap: typesMap, - mutator: mutator, - logger: logger.WithName("handlerShootClient"), + // inject RemoteAddr into admission http.Handler, we need it to identify which API server called the webhook server + // in order to create a client for that shoot cluster. + return remoteAddrInjectingHandler{ + Handler: &admission.Webhook{ + Handler: &handlerShootClient{ + typesMap: typesMap, + mutator: mutator, + logger: logger.WithName("handlerShootClient"), + }, + }, }, nil } type handlerShootClient struct { - typesMap map[metav1.GroupVersionKind]runtime.Object + typesMap map[metav1.GroupVersionKind]client.Object mutator MutatorWithShootClient client client.Client decoder runtime.Decoder @@ -75,21 +70,36 @@ func (h *handlerShootClient) InjectScheme(s *runtime.Scheme) error { return nil } -// InjectClient injects the given client into the mutator. -// TODO Replace this with the more generic InjectFunc when controller runtime supports it +// InjectFunc injects stuff into the mutator. +func (h *handlerShootClient) InjectFunc(f inject.Func) error { + return f(h.mutator) +} + +// InjectClient injects a client. func (h *handlerShootClient) InjectClient(client client.Client) error { h.client = client - if _, err := inject.ClientInto(client, h.mutator); err != nil { - return errors.Wrap(err, "could not inject the client into the mutator") - } return nil } -func (h *handlerShootClient) HandleWithRequest(ctx context.Context, req admission.Request, r *http.Request) admission.Response { - var mut MutateFunc = func(ctx context.Context, new, old runtime.Object) error { - ipPort := strings.Split(r.RemoteAddr, ":") +func (h *handlerShootClient) Handle(ctx context.Context, req admission.Request) admission.Response { + var mut MutateFunc = func(ctx context.Context, new, old client.Object) error { + // TODO: replace this logic with a proper authentication mechanism + // see https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#authenticate-apiservers + // API servers should authenticate against webhooks servers using TLS client certs, from which the webhook + // can identify from which shoot cluster the webhook call is coming + remoteAddrValue := ctx.Value(remoteAddrContextKey) + if remoteAddrValue == nil { + return fmt.Errorf("didn't receive remote address") + } + + remoteAddr, ok := remoteAddrValue.(string) + if !ok { + return fmt.Errorf("remote address expected to be string, got %T", remoteAddrValue) + } + + ipPort := strings.Split(remoteAddr, ":") if len(ipPort) < 1 { - return fmt.Errorf("remote address not parseable: %s", r.RemoteAddr) + return fmt.Errorf("remote address not parseable: %s", remoteAddr) } ip := ipPort[0] @@ -129,59 +139,3 @@ func (h *handlerShootClient) HandleWithRequest(ctx context.Context, req admissio return handle(ctx, req, mut, t, h.decoder, h.logger) } - -// ServeHTTP is a handler for serving an HTTP endpoint that is used for shoot webhooks. -func (h *handlerShootClient) ServeHTTP(w http.ResponseWriter, r *http.Request) { - var body []byte - var err error - - var reviewResponse admission.Response - if r.Body != nil { - if body, err = ioutil.ReadAll(r.Body); err != nil { - h.logger.Error(err, "unable to read the body from the incoming request") - reviewResponse = admission.Errored(http.StatusBadRequest, err) - h.writeResponse(w, reviewResponse) - return - } - } else { - err = errors.New("request body is empty") - h.logger.Error(err, "bad request") - reviewResponse = admission.Errored(http.StatusBadRequest, err) - h.writeResponse(w, reviewResponse) - return - } - - // verify the content type is accurate - contentType := r.Header.Get("Content-Type") - if contentType != "application/json" { - err = fmt.Errorf("contentType=%s, expected application/json", contentType) - h.logger.Error(err, "unable to process a request with an unknown content type", "content type", contentType) - reviewResponse = admission.Errored(http.StatusBadRequest, err) - h.writeResponse(w, reviewResponse) - return - } - - req := admission.Request{} - ar := admissionv1beta1.AdmissionReview{ - // avoid an extra copy - Request: &req.AdmissionRequest, - } - if _, _, err := admissionCodecs.UniversalDeserializer().Decode(body, nil, &ar); err != nil { - h.logger.Error(err, "unable to decode the request") - reviewResponse = admission.Errored(http.StatusBadRequest, err) - h.writeResponse(w, reviewResponse) - return - } - - reviewResponse = h.HandleWithRequest(context.Background(), req, r) - h.writeResponse(w, reviewResponse) -} - -func (h *handlerShootClient) writeResponse(w io.Writer, response admission.Response) { - if err := json.NewEncoder(w).Encode(v1beta1.AdmissionReview{ - Response: &response.AdmissionResponse, - }); err != nil { - h.logger.Error(err, "unable to encode the response") - h.writeResponse(w, admission.Errored(http.StatusInternalServerError, err)) - } -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/mutator.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/mutator.go index 7addfc179..3025c8cf6 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/mutator.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/mutator.go @@ -17,7 +17,6 @@ package webhook import ( "context" - "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -25,20 +24,20 @@ import ( type Mutator interface { // Mutate validates and if needed mutates the given object. // "old" is optional and it must always be checked for nil. - Mutate(ctx context.Context, new, old runtime.Object) error + Mutate(ctx context.Context, new, old client.Object) error } // MutatorWithShootClient validates and if needed mutates objects. It needs the shoot client. type MutatorWithShootClient interface { // Mutate validates and if needed mutates the given object. // "old" is optional and it must always be checked for nil. - Mutate(ctx context.Context, new, old runtime.Object, shootClient client.Client) error + Mutate(ctx context.Context, new, old client.Object, shootClient client.Client) error } // MutateFunc is a func to be used directly as an implementation for Mutator -type MutateFunc func(ctx context.Context, new, old runtime.Object) error +type MutateFunc func(ctx context.Context, new, old client.Object) error // Mutate validates and if needed mutates the given object. -func (mf MutateFunc) Mutate(ctx context.Context, new, old runtime.Object) error { +func (mf MutateFunc) Mutate(ctx context.Context, new, old client.Object) error { return mf(ctx, new, old) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/network/mutator.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/network/mutator.go index 82f5733bc..3e5471796 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/network/mutator.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/network/mutator.go @@ -18,14 +18,11 @@ import ( "context" "fmt" - "github.com/gardener/gardener/extensions/pkg/webhook" - - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "github.com/go-logr/logr" - "github.com/pkg/errors" - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/gardener/gardener/extensions/pkg/webhook" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) type MutateFn func(new, old *extensionsv1alpha1.Network) error @@ -51,18 +48,14 @@ func (m *mutator) InjectClient(client client.Client) error { } // Mutate validates and if needed mutates the given object. -func (m *mutator) Mutate(ctx context.Context, new, old runtime.Object) error { +func (m *mutator) Mutate(ctx context.Context, new, old client.Object) error { var ( newNetwork, oldNetwork *extensionsv1alpha1.Network ok bool ) - acc, err := meta.Accessor(new) - if err != nil { - return errors.Wrapf(err, "could not create accessor during webhook") - } // If the object does have a deletion timestamp then we don't want to mutate anything. - if acc.GetDeletionTimestamp() != nil { + if new.GetDeletionTimestamp() != nil { return nil } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/network/network.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/network/network.go index 37d56fde3..48dce51a1 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/network/network.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/network/network.go @@ -15,15 +15,15 @@ package network import ( - "github.com/gardener/gardener/extensions/pkg/webhook" - extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" - v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" - "sigs.k8s.io/controller-runtime/pkg/webhook/admission" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" + + "github.com/gardener/gardener/extensions/pkg/webhook" + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" ) const ( @@ -40,7 +40,7 @@ type Args struct { // CloudProvider is the cloud provider of this webhook. CloudProvider string // Types is a list of resource types. - Types []runtime.Object + Types []client.Object // Mutator is a mutator to be used by the admission handler. Mutator webhook.Mutator } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go index 4e3ac2d3c..f9eb52775 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go @@ -33,12 +33,19 @@ import ( "sigs.k8s.io/controller-runtime/pkg/manager" ) +const ( + // NamePrefix is the prefix used for {Valida,Muta}tingWebhookConfigurations of extensions. + NamePrefix = "gardener-extension-" + // NameSuffixShoots is the suffix used for {Valida,Muta}tingWebhookConfigurations of extensions targeting a shoot. + NameSuffixShoot = "-shoot" +) + // RegisterWebhooks registers the given webhooks in the Kubernetes cluster targeted by the provided manager. func RegisterWebhooks(ctx context.Context, mgr manager.Manager, namespace, providerName string, servicePort int, mode, url string, caBundle []byte, webhooks []*Webhook) (webhooksToRegisterSeed []admissionregistrationv1beta1.MutatingWebhook, webhooksToRegisterShoot []admissionregistrationv1beta1.MutatingWebhook, err error) { var ( fail = admissionregistrationv1beta1.Fail ignore = admissionregistrationv1beta1.Ignore - mutatingWebhookConfigurationSeed = &admissionregistrationv1beta1.MutatingWebhookConfiguration{ObjectMeta: metav1.ObjectMeta{Name: "gardener-extension-" + providerName}} + mutatingWebhookConfigurationSeed = &admissionregistrationv1beta1.MutatingWebhookConfiguration{ObjectMeta: metav1.ObjectMeta{Name: NamePrefix + providerName}} ) for _, webhook := range webhooks { @@ -55,6 +62,7 @@ func RegisterWebhooks(ctx context.Context, mgr manager.Manager, namespace, provi Name: fmt.Sprintf("%s.%s.extensions.gardener.cloud", webhook.Name, strings.TrimPrefix(providerName, "provider-")), NamespaceSelector: webhook.Selector, Rules: rules, + TimeoutSeconds: pointer.Int32Ptr(10), } switch webhook.Target { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/remote_addr.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/remote_addr.go new file mode 100644 index 000000000..556997c5a --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/remote_addr.go @@ -0,0 +1,45 @@ +// Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// 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 webhook + +import ( + "context" + "net/http" + + "sigs.k8s.io/controller-runtime/pkg/runtime/inject" +) + +// remoteAddrContextKey is a context key. It will be filled by the remoteAddrInjectingHandler with the received +// request's RemoteAddr field value. +// The associated value will be of type string. +var remoteAddrContextKey = struct{}{} + +// remoteAddrInjectingHandler is a wrapper around a given http.Handler that injects the requests.RemoteAddr into the +// request's context and delegates to the underlying handler. +type remoteAddrInjectingHandler struct { + // Handler is the underlying handler. + http.Handler +} + +// InjectFunc injects into the underlying handler. +func (h remoteAddrInjectingHandler) InjectFunc(f inject.Func) error { + return f(h.Handler) +} + +// ServerHTTP implements http.Handler by delegating to the underlying handler but injecting request.RemoteAddr into +// the request's context. +func (h remoteAddrInjectingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + h.Handler.ServeHTTP(w, r.Clone(context.WithValue(r.Context(), remoteAddrContextKey, r.RemoteAddr))) +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/shoot.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/shoot.go index 7230dee6f..6934ffc67 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/shoot.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/shoot.go @@ -17,15 +17,14 @@ package shoot import ( "fmt" - extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" - - v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" - "sigs.k8s.io/controller-runtime/pkg/runtime/inject" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" + + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" ) const ( @@ -40,7 +39,7 @@ var logger = log.Log.WithName("shoot-webhook") // Args are arguments for creating a webhook targeting a shoot. type Args struct { // Types is a list of resource types. - Types []runtime.Object + Types []client.Object // Mutator is a mutator to be used by the admission handler. It doesn't need the shoot client. Mutator extensionswebhook.Mutator // MutatorWithShootClient is a mutator to be used by the admission handler. It needs the shoot client. @@ -81,10 +80,6 @@ func New(mgr manager.Manager, args Args) (*extensionswebhook.Webhook, error) { return nil, err } - if _, err := inject.SchemeInto(mgr.GetScheme(), handler); err != nil { - return nil, err - } - wh.Handler = handler return wh, nil } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/validator.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/validator.go index 437ff72c8..8b506519c 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/validator.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/validator.go @@ -18,13 +18,13 @@ import ( "context" "github.com/pkg/errors" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" ) // Validator validates objects. type Validator interface { - Validate(ctx context.Context, new, old runtime.Object) error + Validate(ctx context.Context, new, old client.Object) error } type validationWrapper struct { @@ -32,7 +32,7 @@ type validationWrapper struct { } // Mutate implements the `Mutator` interface and calls the `Validate` function of the underlying validator. -func (d *validationWrapper) Mutate(ctx context.Context, new, old runtime.Object) error { +func (d *validationWrapper) Mutate(ctx context.Context, new, old client.Object) error { return d.Validate(ctx, new, old) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go index b311e9d20..491192a36 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go @@ -18,7 +18,7 @@ import ( "net/http" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/predicate" @@ -44,7 +44,7 @@ type Webhook struct { Provider string Path string Target string - Types []runtime.Object + Types []client.Object Webhook *admission.Webhook Handler http.Handler Selector *metav1.LabelSelector @@ -55,8 +55,8 @@ type Args struct { Name string Path string Predicates []predicate.Predicate - Validators map[Validator][]runtime.Object - Mutators map[Mutator][]runtime.Object + Validators map[Validator][]client.Object + Mutators map[Mutator][]client.Object } // New creates a new Webhook with the given args. diff --git a/vendor/github.com/gardener/gardener/hack/update-codegen.sh b/vendor/github.com/gardener/gardener/hack/update-codegen.sh index 380f6b1c8..192f27755 100755 --- a/vendor/github.com/gardener/gardener/hack/update-codegen.sh +++ b/vendor/github.com/gardener/gardener/hack/update-codegen.sh @@ -49,6 +49,23 @@ bash "${PROJECT_ROOT}"/vendor/k8s.io/code-generator/generate-groups.sh \ github.com/gardener/gardener/pkg/apis \ "extensions:v1alpha1" \ -h "${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt" + +# seedmanagement.gardener.cloud APIs + +bash "${PROJECT_ROOT}"/vendor/k8s.io/code-generator/generate-groups.sh \ + "all" \ + github.com/gardener/gardener/pkg/client/seedmanagement \ + github.com/gardener/gardener/pkg/apis \ + "seedmanagement:v1alpha1" \ + -h "${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt" + +bash "${PROJECT_ROOT}"/vendor/k8s.io/code-generator/generate-internal-groups.sh \ + "deepcopy,defaulter,conversion" \ + github.com/gardener/gardener/pkg/client/seedmanagement \ + github.com/gardener/gardener/pkg/apis \ + github.com/gardener/gardener/pkg/apis \ + "seedmanagement:v1alpha1" \ + -h "${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt" # settings.gardener.cloud APIs @@ -173,6 +190,7 @@ ${GOPATH}/bin/openapi-gen "$@" \ --input-dirs=github.com/gardener/gardener/pkg/apis/core/v1alpha1 \ --input-dirs=github.com/gardener/gardener/pkg/apis/core/v1beta1 \ --input-dirs=github.com/gardener/gardener/pkg/apis/settings/v1alpha1 \ + --input-dirs=github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1 \ --input-dirs=k8s.io/api/core/v1 \ --input-dirs=k8s.io/api/rbac/v1 \ --input-dirs=k8s.io/api/autoscaling/v1 \ diff --git a/vendor/github.com/gardener/gardener/pkg/api/extensions/utils.go b/vendor/github.com/gardener/gardener/pkg/api/extensions/utils.go index 5d05c3fd9..c877f3dd7 100644 --- a/vendor/github.com/gardener/gardener/pkg/api/extensions/utils.go +++ b/vendor/github.com/gardener/gardener/pkg/api/extensions/utils.go @@ -15,25 +15,26 @@ package extensions import ( + "sigs.k8s.io/controller-runtime/pkg/client" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - "k8s.io/apimachinery/pkg/runtime" ) // GetShootNamespacedCRsLists returns an empty CR list struct, for each CR used for Shoot management -func GetShootNamespacedCRsLists() []runtime.Object { - return []runtime.Object{ - //The ControlPlane CR is now handled as a shoot component - //&extensionsv1alpha1.ControlPlaneList{}, - //The Extension CR is now handled as a shoot component - //&extensionsv1alpha1.ExtensionList{}, - //The Infrastructure CR is now handled as a shoot component - //&extensionsv1alpha1.InfrastructureList{}, - //The Network CR is now handled as a shoot component - //&extensionsv1alpha1.NetworkList{}, +func GetShootNamespacedCRsLists() []client.ObjectList { + return []client.ObjectList{ + // The ControlPlane CR is now handled as a shoot component + // &extensionsv1alpha1.ControlPlaneList{}, + // The Extension CR is now handled as a shoot component + // &extensionsv1alpha1.ExtensionList{}, + // The Infrastructure CR is now handled as a shoot component + // &extensionsv1alpha1.InfrastructureList{}, + // The Network CR is now handled as a shoot component + // &extensionsv1alpha1.NetworkList{}, &extensionsv1alpha1.OperatingSystemConfigList{}, - //The Worker CR is now handled as a shoot component - //&extensionsv1alpha1.WorkerList{}, - //The ContainerRuntime CR is now handled as a shoot component - //&extensionsv1alpha1.ContainerRuntimeList{}, + // The Worker CR is now handled as a shoot component + // &extensionsv1alpha1.WorkerList{}, + // The ContainerRuntime CR is now handled as a shoot component + // &extensionsv1alpha1.ContainerRuntimeList{}, } } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go index b3e307f2d..6619ff8a4 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go @@ -114,7 +114,7 @@ type SeedBackup struct { // SeedDNS contains the external domain and configuration for the DNS provider type SeedDNS struct { // IngressDomain is the domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. // This will be removed in the next API version and replaced by spec.ingress.domain. IngressDomain *string // Provider configures a DNSProvider @@ -136,7 +136,7 @@ type SeedDNSProvider struct { // Ingress configures the Ingress specific settings of the Seed cluster type Ingress struct { // Domain specifies the ingress domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. Domain string // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain Controller IngressController diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go index bf2b700db..b3f2b6dd4 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go @@ -179,7 +179,7 @@ type NginxIngress struct { // DNS holds information about the provider, the hosted zone id and the domain. type DNS struct { // Domain is the external available domain of the Shoot cluster. This domain will be written into the - // kubeconfig that is handed out to end-users. + // kubeconfig that is handed out to end-users. Once set it is immutable. Domain *string // Providers is a list of DNS providers that shall be enabled for this shoot cluster. Only relevant if // not a default domain is used. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto index c8bb879ef..b50c3c854 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto @@ -499,7 +499,7 @@ message ControllerResource { // DNS holds information about the provider, the hosted zone id and the domain. message DNS { // Domain is the external available domain of the Shoot cluster. This domain will be written into the - // kubeconfig that is handed out to end-users. + // kubeconfig that is handed out to end-users. Once set it is immutable. // +optional optional string domain = 1; @@ -715,7 +715,7 @@ message HorizontalPodAutoscalerConfig { // Ingress configures the Ingress specific settings of the Seed cluster. message Ingress { // Domain specifies the IngressDomain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. optional string domain = 1; // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain @@ -1681,7 +1681,7 @@ message SeedBackup { // SeedDNS contains DNS-relevant information about this seed cluster. message SeedDNS { // IngressDomain is the domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. // This will be removed in the next API version and replaced by spec.ingress.domain. // +optional optional string ingressDomain = 1; diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go index 105c5e79f..25d8e7e1f 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go @@ -125,7 +125,7 @@ type SeedBackup struct { // SeedDNS contains DNS-relevant information about this seed cluster. type SeedDNS struct { // IngressDomain is the domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. // This will be removed in the next API version and replaced by spec.ingress.domain. // +optional IngressDomain *string `json:"ingressDomain,omitempty" protobuf:"bytes,1,opt,name=ingressDomain"` @@ -151,7 +151,7 @@ type SeedDNSProvider struct { // Ingress configures the Ingress specific settings of the Seed cluster. type Ingress struct { // Domain specifies the IngressDomain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. Domain string `json:"domain" protobuf:"bytes,1,opt,name=domain"` // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain Controller IngressController `json:"controller" protobuf:"bytes,2,opt,name=controller"` diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go index 72f4fbf92..59dbd5292 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go @@ -213,7 +213,7 @@ type NginxIngress struct { // DNS holds information about the provider, the hosted zone id and the domain. type DNS struct { // Domain is the external available domain of the Shoot cluster. This domain will be written into the - // kubeconfig that is handed out to end-users. + // kubeconfig that is handed out to end-users. Once set it is immutable. // +optional Domain *string `json:"domain,omitempty" protobuf:"bytes,1,opt,name=domain"` // Providers is a list of DNS providers that shall be enabled for this shoot cluster. Only relevant if diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go index 29645e7f9..dac01d544 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go @@ -152,6 +152,8 @@ const ( GardenRoleMonitoring = "monitoring" // GardenRoleOptionalAddon is the value of the GardenRole key indicating type 'optional-addon'. GardenRoleOptionalAddon = "optional-addon" + // GardenRoleCloudConfig is the value of the GardenRole key indicating type 'cloud-config'. + GardenRoleCloudConfig = "cloud-config" // GardenRoleKubeconfig is the value of the GardenRole key indicating type 'kubeconfig'. GardenRoleKubeconfig = "kubeconfig" // GardenRoleSSHKeyPair is the value of the GardenRole key indicating type 'ssh-keypair'. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto index aebca8214..ddc222f69 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto @@ -498,7 +498,7 @@ message ControllerResource { // DNS holds information about the provider, the hosted zone id and the domain. message DNS { // Domain is the external available domain of the Shoot cluster. This domain will be written into the - // kubeconfig that is handed out to end-users. + // kubeconfig that is handed out to end-users. Once set it is immutable. // +optional optional string domain = 1; @@ -679,7 +679,7 @@ message HorizontalPodAutoscalerConfig { // Ingress configures the Ingress specific settings of the Seed cluster message Ingress { // Domain specifies the IngressDomain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. optional string domain = 1; // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain @@ -1637,7 +1637,7 @@ message SeedBackup { // SeedDNS contains DNS-relevant information about this seed cluster. message SeedDNS { // IngressDomain is the domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. // This will be removed in the next API version and replaced by spec.ingress.domain. // +optional optional string ingressDomain = 1; diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go index d2ba3c8b4..fe4af0d38 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go @@ -128,7 +128,7 @@ type SeedBackup struct { // SeedDNS contains DNS-relevant information about this seed cluster. type SeedDNS struct { // IngressDomain is the domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. // This will be removed in the next API version and replaced by spec.ingress.domain. // +optional IngressDomain *string `json:"ingressDomain,omitempty" protobuf:"bytes,1,opt,name=ingressDomain"` @@ -154,7 +154,7 @@ type SeedDNSProvider struct { // Ingress configures the Ingress specific settings of the Seed cluster type Ingress struct { // Domain specifies the IngressDomain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. Domain string `json:"domain" protobuf:"bytes,1,opt,name=domain"` // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain Controller IngressController `json:"controller" protobuf:"bytes,2,opt,name=controller"` diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go index 6d797360f..7dc41bbb2 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go @@ -210,7 +210,7 @@ type NginxIngress struct { // DNS holds information about the provider, the hosted zone id and the domain. type DNS struct { // Domain is the external available domain of the Shoot cluster. This domain will be written into the - // kubeconfig that is handed out to end-users. + // kubeconfig that is handed out to end-users. Once set it is immutable. // +optional Domain *string `json:"domain,omitempty" protobuf:"bytes,1,opt,name=domain"` // Providers is a list of DNS providers that shall be enabled for this shoot cluster. Only relevant if diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/validation/seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/validation/seed.go index 70ed7f1f4..e74fee97c 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/validation/seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/validation/seed.go @@ -198,6 +198,19 @@ func ValidateSeedSpecUpdate(newSeedSpec, oldSeedSpec *core.SeedSpec, fldPath *fi allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSeedSpec.Networks.Nodes, oldSeedSpec.Networks.Nodes, fldPath.Child("networks", "nodes"))...) } + if oldSeedSpec.DNS.IngressDomain != nil && newSeedSpec.DNS.IngressDomain != nil { + allErrs = append(allErrs, apivalidation.ValidateImmutableField(*newSeedSpec.DNS.IngressDomain, *oldSeedSpec.DNS.IngressDomain, fldPath.Child("dns", "ingressDomain"))...) + } + if oldSeedSpec.Ingress != nil && newSeedSpec.Ingress != nil { + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSeedSpec.Ingress.Domain, oldSeedSpec.Ingress.Domain, fldPath.Child("ingress", "domain"))...) + } + if oldSeedSpec.Ingress != nil && newSeedSpec.DNS.IngressDomain != nil { + allErrs = append(allErrs, apivalidation.ValidateImmutableField(*newSeedSpec.DNS.IngressDomain, oldSeedSpec.Ingress.Domain, fldPath.Child("dns", "ingressDomain"))...) + } + if oldSeedSpec.DNS.IngressDomain != nil && newSeedSpec.Ingress != nil { + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSeedSpec.Ingress.Domain, *oldSeedSpec.DNS.IngressDomain, fldPath.Child("ingress", "domain"))...) + } + if oldSeedSpec.Backup != nil { if newSeedSpec.Backup != nil { allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSeedSpec.Backup.Provider, oldSeedSpec.Backup.Provider, fldPath.Child("backup", "provider"))...) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupbucket.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupbucket.go index d5ddb39fe..b3545246f 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupbucket.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupbucket.go @@ -27,6 +27,12 @@ const BackupBucketResource = "BackupBucket" // +genclient // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Cluster,path=backupbuckets,shortName=bb,singular=backupbucket +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the cloud provider for this resource." +// +kubebuilder:printcolumn:name=Region,JSONPath=".spec.region",type=string,description="The region into which the backup bucket should be created." +// +kubebuilder:printcolumn:name=State,JSONPath=".status.lastOperation.state",type=string,description="status of the last operation, one of Aborted, Processing, Succeeded, Error, Failed" +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // BackupBucket is a specification for backup bucket. type BackupBucket struct { @@ -34,7 +40,8 @@ type BackupBucket struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec BackupBucketSpec `json:"spec"` + Spec BackupBucketSpec `json:"spec"` + // +optional Status BackupBucketStatus `json:"status"` } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupentry.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupentry.go index 146ed6086..914395e87 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupentry.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupentry.go @@ -28,6 +28,13 @@ const BackupEntryResource = "BackupEntry" // +genclient // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Cluster,path=backupentries,shortName=be,singular=backupentry +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the cloud provider for this resource." +// +kubebuilder:printcolumn:name=Region,JSONPath=".spec.region",type=string,description="The region into which the backup entry should be created." +// +kubebuilder:printcolumn:name=Bucket,JSONPath=".spec.bucketName",type=string,description="The name of the bucket into which the backup entry should be created." +// +kubebuilder:printcolumn:name=State,JSONPath=".status.lastOperation.state",type=string,description="status of the last operation, one of Aborted, Processing, Succeeded, Error, Failed" +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // BackupEntry is a specification for backup Entry. type BackupEntry struct { @@ -35,7 +42,8 @@ type BackupEntry struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec BackupEntrySpec `json:"spec"` + Spec BackupEntrySpec `json:"spec"` + // +optional Status BackupEntryStatus `json:"status"` } @@ -67,6 +75,8 @@ type BackupEntrySpec struct { DefaultSpec `json:",inline"` // BackupBucketProviderStatus contains the provider status that has // been generated by the controller responsible for the `BackupBucket` resource. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional BackupBucketProviderStatus *runtime.RawExtension `json:"backupBucketProviderStatus,omitempty"` // Region is the region of this Entry. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_cluster.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_cluster.go index ccfda96fa..df700279c 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_cluster.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_cluster.go @@ -25,6 +25,9 @@ const ClusterResource = "Cluster" // +genclient // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Cluster,path=clusters,singular=cluster +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // Cluster is a specification for a Cluster resource. type Cluster struct { @@ -49,10 +52,16 @@ type ClusterList struct { type ClusterSpec struct { // CloudProfile is a raw extension field that contains the cloudprofile resource referenced // by the shoot that has to be reconciled. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields CloudProfile runtime.RawExtension `json:"cloudProfile"` // Seed is a raw extension field that contains the seed resource referenced by the shoot that // has to be reconciled. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields Seed runtime.RawExtension `json:"seed"` // Shoot is a raw extension field that contains the shoot resource that has to be reconciled. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields Shoot runtime.RawExtension `json:"shoot"` } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_containerruntime.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_containerruntime.go index a911a1550..7578e242b 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_containerruntime.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_containerruntime.go @@ -31,14 +31,20 @@ const ( // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=containerruntimes,shortName=cr,singular=containerruntime +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the Container Runtime resource." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="status of the last operation, one of Aborted, Processing, Succeeded, Error, Failed" +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // ContainerRuntime is a specification for a container runtime resource. type ContainerRuntime struct { metav1.TypeMeta `json:",inline"` // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ContainerRuntimeSpec `json:"spec"` - Status ContainerRuntimeStatus `json:"status"` + Spec ContainerRuntimeSpec `json:"spec"` + // +optional + Status ContainerRuntimeStatus `json:"status"` } // GetExtensionSpec implements Object. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_controlplane.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_controlplane.go index 563edbaf9..fec2ca2ea 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_controlplane.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_controlplane.go @@ -27,13 +27,20 @@ const ControlPlaneResource = "ControlPlane" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=controlplanes,shortName=cp,singular=controlplane +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The control plane type." +// +kubebuilder:printcolumn:name=Purpose,JSONPath=".spec.purpose",type=string,description="Purpose of control plane resource." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of control plane resource." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // ControlPlane is a specification for a ControlPlane resource. type ControlPlane struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ControlPlaneSpec `json:"spec"` + Spec ControlPlaneSpec `json:"spec"` + // +optional Status ControlPlaneStatus `json:"status"` } @@ -72,6 +79,8 @@ type ControlPlaneSpec struct { Purpose *Purpose `json:"purpose,omitempty"` // InfrastructureProviderStatus contains the provider status that has // been generated by the controller responsible for the `Infrastructure` resource. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional InfrastructureProviderStatus *runtime.RawExtension `json:"infrastructureProviderStatus,omitempty"` // Region is the region of this control plane. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go index 619d4790e..a6339036e 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go @@ -24,8 +24,9 @@ type DefaultSpec struct { // Type contains the instance of the resource's kind. Type string `json:"type"` // ProviderConfig is the provider specific configuration. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional - ProviderConfig *runtime.RawExtension `json:"providerConfig,omitempty"` } @@ -47,6 +48,8 @@ func (d *DefaultSpec) GetProviderConfig() *runtime.RawExtension { // DefaultStatus contains common status fields for every extension resource. type DefaultStatus struct { // ProviderStatus contains provider-specific status. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional ProviderStatus *runtime.RawExtension `json:"providerStatus,omitempty"` // Conditions represents the latest available observations of a Seed's current state. @@ -61,6 +64,8 @@ type DefaultStatus struct { // ObservedGeneration is the most recent generation observed for this resource. ObservedGeneration int64 `json:"observedGeneration,omitempty"` // State can be filled by the operating controller with what ever data it needs. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional State *runtime.RawExtension `json:"state,omitempty"` // Resources holds a list of named resource references that can be referred to in the state by their names. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_extension.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_extension.go index 94953e470..26744ee78 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_extension.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_extension.go @@ -25,6 +25,11 @@ const ExtensionResource = "Extension" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=extensions,shortName=ext,singular=extension +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the Extension resource." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of Extension resource." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // Extension is a specification for a Extension resource. type Extension struct { @@ -32,7 +37,8 @@ type Extension struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ExtensionSpec `json:"spec"` + Spec ExtensionSpec `json:"spec"` + // +optional Status ExtensionStatus `json:"status"` } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_infrastructure.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_infrastructure.go index 7e514a3ff..d568a4782 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_infrastructure.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_infrastructure.go @@ -26,6 +26,12 @@ const InfrastructureResource = "Infrastructure" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=infrastructures,shortName=infra,singular=infrastructure +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the cloud provider for this resource." +// +kubebuilder:printcolumn:name=Region,JSONPath=".spec.region",type=string,description="The region into which the infrastructure should be deployed." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of infrastructure resource." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // Infrastructure is a specification for cloud provider infrastructure. type Infrastructure struct { @@ -33,7 +39,8 @@ type Infrastructure struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec InfrastructureSpec `json:"spec"` + Spec InfrastructureSpec `json:"spec"` + // +optional Status InfrastructureStatus `json:"status"` } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_network.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_network.go index 0888e9417..f47bce118 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_network.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_network.go @@ -25,6 +25,13 @@ const NetworkResource = "Network" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=networks,singular=network +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the network provider for this resource." +// +kubebuilder:printcolumn:name=Pod CIDR,JSONPath=".spec.podCIDR",type=string,description="The CIDR that will be used for pods." +// +kubebuilder:printcolumn:name=Service CIDR,JSONPath=".spec.serviceCIDR",type=string,description="The CIDR that will be used for services." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of network resource." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // Network is the specification for cluster networking. type Network struct { @@ -32,18 +39,19 @@ type Network struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec NetworkSpec `json:"spec"` + Spec NetworkSpec `json:"spec"` + // +optional Status NetworkStatus `json:"status"` } // GetExtensionSpec implements Object. -func (i *Network) GetExtensionSpec() Spec { - return &i.Spec +func (n *Network) GetExtensionSpec() Spec { + return &n.Spec } // GetExtensionStatus implements Object. -func (i *Network) GetExtensionStatus() Status { - return &i.Status +func (n *Network) GetExtensionStatus() Status { + return &n.Status } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go index ecbda5780..866ac8600 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go @@ -26,6 +26,12 @@ const OperatingSystemConfigResource = "OperatingSystemConfig" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=operatingsystemconfigs,shortName=osc,singular=operatingsystemconfig +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the operating system configuration." +// +kubebuilder:printcolumn:name=Purpose,JSONPath=".spec.purpose",type=string,description="The purpose of the operating system configuration." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of operating system configuration." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // OperatingSystemConfig is a specification for a OperatingSystemConfig resource type OperatingSystemConfig struct { @@ -33,7 +39,8 @@ type OperatingSystemConfig struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec OperatingSystemConfigSpec `json:"spec"` + Spec OperatingSystemConfigSpec `json:"spec"` + // +optional Status OperatingSystemConfigStatus `json:"status"` } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_worker.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_worker.go index bcd5595fb..95a299ecd 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_worker.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_worker.go @@ -30,6 +30,12 @@ const WorkerResource = "Worker" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=workers,singular=worker +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the cloud provider for this resource." +// +kubebuilder:printcolumn:name=Region,JSONPath=".spec.region",type=string,description="The region into which the worker should be deployed." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of the worker." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // Worker is a specification for a Worker resource. type Worker struct { @@ -37,7 +43,8 @@ type Worker struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec WorkerSpec `json:"spec"` + Spec WorkerSpec `json:"spec"` + // +optional Status WorkerStatus `json:"status"` } @@ -70,6 +77,8 @@ type WorkerSpec struct { // InfrastructureProviderStatus is a raw extension field that contains the provider status that has // been generated by the controller responsible for the `Infrastructure` resource. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional InfrastructureProviderStatus *runtime.RawExtension `json:"infrastructureProviderStatus,omitempty"` // Region is the name of the region where the worker pool should be deployed to. @@ -113,6 +122,8 @@ type WorkerPool struct { // Name is the name of this worker pool. Name string `json:"name"` // ProviderConfig is a provider specific configuration for the worker pool. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional ProviderConfig *runtime.RawExtension `json:"providerConfig,omitempty"` // UserData is a base64-encoded string that contains the data that is sent to the provider's APIs diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/backupbucket.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/backupbucket.go index 4eb17c98d..cb0884e38 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/backupbucket.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/backupbucket.go @@ -26,10 +26,13 @@ import ( ) // BackupBucketLister helps list BackupBuckets. +// All objects returned here must be treated as read-only. type BackupBucketLister interface { // List lists all BackupBuckets in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.BackupBucket, err error) // Get retrieves the BackupBucket from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.BackupBucket, error) BackupBucketListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/backupentry.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/backupentry.go index cbe20669a..719e742ca 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/backupentry.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/backupentry.go @@ -26,8 +26,10 @@ import ( ) // BackupEntryLister helps list BackupEntries. +// All objects returned here must be treated as read-only. type BackupEntryLister interface { // List lists all BackupEntries in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.BackupEntry, err error) // BackupEntries returns an object that can list and get BackupEntries. BackupEntries(namespace string) BackupEntryNamespaceLister @@ -58,10 +60,13 @@ func (s *backupEntryLister) BackupEntries(namespace string) BackupEntryNamespace } // BackupEntryNamespaceLister helps list and get BackupEntries. +// All objects returned here must be treated as read-only. type BackupEntryNamespaceLister interface { // List lists all BackupEntries in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.BackupEntry, err error) // Get retrieves the BackupEntry from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.BackupEntry, error) BackupEntryNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/cloudprofile.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/cloudprofile.go index 2a4ff7638..a9ed58afa 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/cloudprofile.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/cloudprofile.go @@ -26,10 +26,13 @@ import ( ) // CloudProfileLister helps list CloudProfiles. +// All objects returned here must be treated as read-only. type CloudProfileLister interface { // List lists all CloudProfiles in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.CloudProfile, err error) // Get retrieves the CloudProfile from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.CloudProfile, error) CloudProfileListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/controllerinstallation.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/controllerinstallation.go index 18b6d89c6..5ac4af34e 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/controllerinstallation.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/controllerinstallation.go @@ -26,10 +26,13 @@ import ( ) // ControllerInstallationLister helps list ControllerInstallations. +// All objects returned here must be treated as read-only. type ControllerInstallationLister interface { // List lists all ControllerInstallations in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.ControllerInstallation, err error) // Get retrieves the ControllerInstallation from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.ControllerInstallation, error) ControllerInstallationListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/controllerregistration.go index e7ed9f2a0..696719af3 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/controllerregistration.go @@ -26,10 +26,13 @@ import ( ) // ControllerRegistrationLister helps list ControllerRegistrations. +// All objects returned here must be treated as read-only. type ControllerRegistrationLister interface { // List lists all ControllerRegistrations in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.ControllerRegistration, err error) // Get retrieves the ControllerRegistration from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.ControllerRegistration, error) ControllerRegistrationListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/plant.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/plant.go index 0edf03cd9..078d454db 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/plant.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/plant.go @@ -26,8 +26,10 @@ import ( ) // PlantLister helps list Plants. +// All objects returned here must be treated as read-only. type PlantLister interface { // List lists all Plants in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.Plant, err error) // Plants returns an object that can list and get Plants. Plants(namespace string) PlantNamespaceLister @@ -58,10 +60,13 @@ func (s *plantLister) Plants(namespace string) PlantNamespaceLister { } // PlantNamespaceLister helps list and get Plants. +// All objects returned here must be treated as read-only. type PlantNamespaceLister interface { // List lists all Plants in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.Plant, err error) // Get retrieves the Plant from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.Plant, error) PlantNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/project.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/project.go index 36e5bc83e..c08f436e6 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/project.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/project.go @@ -26,10 +26,13 @@ import ( ) // ProjectLister helps list Projects. +// All objects returned here must be treated as read-only. type ProjectLister interface { // List lists all Projects in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.Project, err error) // Get retrieves the Project from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.Project, error) ProjectListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/quota.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/quota.go index 603a40183..65485cc98 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/quota.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/quota.go @@ -26,8 +26,10 @@ import ( ) // QuotaLister helps list Quotas. +// All objects returned here must be treated as read-only. type QuotaLister interface { // List lists all Quotas in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.Quota, err error) // Quotas returns an object that can list and get Quotas. Quotas(namespace string) QuotaNamespaceLister @@ -58,10 +60,13 @@ func (s *quotaLister) Quotas(namespace string) QuotaNamespaceLister { } // QuotaNamespaceLister helps list and get Quotas. +// All objects returned here must be treated as read-only. type QuotaNamespaceLister interface { // List lists all Quotas in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.Quota, err error) // Get retrieves the Quota from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.Quota, error) QuotaNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/secretbinding.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/secretbinding.go index 1366412b7..9c8e29019 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/secretbinding.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/secretbinding.go @@ -26,8 +26,10 @@ import ( ) // SecretBindingLister helps list SecretBindings. +// All objects returned here must be treated as read-only. type SecretBindingLister interface { // List lists all SecretBindings in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.SecretBinding, err error) // SecretBindings returns an object that can list and get SecretBindings. SecretBindings(namespace string) SecretBindingNamespaceLister @@ -58,10 +60,13 @@ func (s *secretBindingLister) SecretBindings(namespace string) SecretBindingName } // SecretBindingNamespaceLister helps list and get SecretBindings. +// All objects returned here must be treated as read-only. type SecretBindingNamespaceLister interface { // List lists all SecretBindings in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.SecretBinding, err error) // Get retrieves the SecretBinding from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.SecretBinding, error) SecretBindingNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/seed.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/seed.go index 52e096516..ca8fa6e99 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/seed.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/seed.go @@ -26,10 +26,13 @@ import ( ) // SeedLister helps list Seeds. +// All objects returned here must be treated as read-only. type SeedLister interface { // List lists all Seeds in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.Seed, err error) // Get retrieves the Seed from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.Seed, error) SeedListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/shoot.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/shoot.go index decabf5d1..dbb233abc 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/shoot.go @@ -26,8 +26,10 @@ import ( ) // ShootLister helps list Shoots. +// All objects returned here must be treated as read-only. type ShootLister interface { // List lists all Shoots in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.Shoot, err error) // Shoots returns an object that can list and get Shoots. Shoots(namespace string) ShootNamespaceLister @@ -58,10 +60,13 @@ func (s *shootLister) Shoots(namespace string) ShootNamespaceLister { } // ShootNamespaceLister helps list and get Shoots. +// All objects returned here must be treated as read-only. type ShootNamespaceLister interface { // List lists all Shoots in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.Shoot, err error) // Get retrieves the Shoot from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.Shoot, error) ShootNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/shootstate.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/shootstate.go index 8c60379f5..03cf226df 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/shootstate.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1alpha1/shootstate.go @@ -26,8 +26,10 @@ import ( ) // ShootStateLister helps list ShootStates. +// All objects returned here must be treated as read-only. type ShootStateLister interface { // List lists all ShootStates in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.ShootState, err error) // ShootStates returns an object that can list and get ShootStates. ShootStates(namespace string) ShootStateNamespaceLister @@ -58,10 +60,13 @@ func (s *shootStateLister) ShootStates(namespace string) ShootStateNamespaceList } // ShootStateNamespaceLister helps list and get ShootStates. +// All objects returned here must be treated as read-only. type ShootStateNamespaceLister interface { // List lists all ShootStates in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.ShootState, err error) // Get retrieves the ShootState from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1alpha1.ShootState, error) ShootStateNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupbucket.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupbucket.go index c67f867a6..31ac02f2e 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupbucket.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupbucket.go @@ -26,10 +26,13 @@ import ( ) // BackupBucketLister helps list BackupBuckets. +// All objects returned here must be treated as read-only. type BackupBucketLister interface { // List lists all BackupBuckets in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.BackupBucket, err error) // Get retrieves the BackupBucket from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.BackupBucket, error) BackupBucketListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupentry.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupentry.go index b225740b6..8ff296348 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupentry.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupentry.go @@ -26,8 +26,10 @@ import ( ) // BackupEntryLister helps list BackupEntries. +// All objects returned here must be treated as read-only. type BackupEntryLister interface { // List lists all BackupEntries in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.BackupEntry, err error) // BackupEntries returns an object that can list and get BackupEntries. BackupEntries(namespace string) BackupEntryNamespaceLister @@ -58,10 +60,13 @@ func (s *backupEntryLister) BackupEntries(namespace string) BackupEntryNamespace } // BackupEntryNamespaceLister helps list and get BackupEntries. +// All objects returned here must be treated as read-only. type BackupEntryNamespaceLister interface { // List lists all BackupEntries in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.BackupEntry, err error) // Get retrieves the BackupEntry from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.BackupEntry, error) BackupEntryNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/cloudprofile.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/cloudprofile.go index c6db5c235..276956574 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/cloudprofile.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/cloudprofile.go @@ -26,10 +26,13 @@ import ( ) // CloudProfileLister helps list CloudProfiles. +// All objects returned here must be treated as read-only. type CloudProfileLister interface { // List lists all CloudProfiles in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.CloudProfile, err error) // Get retrieves the CloudProfile from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.CloudProfile, error) CloudProfileListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerinstallation.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerinstallation.go index c82590a1e..c16590128 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerinstallation.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerinstallation.go @@ -26,10 +26,13 @@ import ( ) // ControllerInstallationLister helps list ControllerInstallations. +// All objects returned here must be treated as read-only. type ControllerInstallationLister interface { // List lists all ControllerInstallations in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.ControllerInstallation, err error) // Get retrieves the ControllerInstallation from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.ControllerInstallation, error) ControllerInstallationListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerregistration.go index 74188d333..3462b34ec 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerregistration.go @@ -26,10 +26,13 @@ import ( ) // ControllerRegistrationLister helps list ControllerRegistrations. +// All objects returned here must be treated as read-only. type ControllerRegistrationLister interface { // List lists all ControllerRegistrations in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.ControllerRegistration, err error) // Get retrieves the ControllerRegistration from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.ControllerRegistration, error) ControllerRegistrationListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/plant.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/plant.go index 9549a8f66..f0b959f99 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/plant.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/plant.go @@ -26,8 +26,10 @@ import ( ) // PlantLister helps list Plants. +// All objects returned here must be treated as read-only. type PlantLister interface { // List lists all Plants in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.Plant, err error) // Plants returns an object that can list and get Plants. Plants(namespace string) PlantNamespaceLister @@ -58,10 +60,13 @@ func (s *plantLister) Plants(namespace string) PlantNamespaceLister { } // PlantNamespaceLister helps list and get Plants. +// All objects returned here must be treated as read-only. type PlantNamespaceLister interface { // List lists all Plants in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.Plant, err error) // Get retrieves the Plant from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.Plant, error) PlantNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/project.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/project.go index ea262eac6..df4c2f3ce 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/project.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/project.go @@ -26,10 +26,13 @@ import ( ) // ProjectLister helps list Projects. +// All objects returned here must be treated as read-only. type ProjectLister interface { // List lists all Projects in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.Project, err error) // Get retrieves the Project from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.Project, error) ProjectListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/quota.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/quota.go index ed3068a97..14590528f 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/quota.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/quota.go @@ -26,8 +26,10 @@ import ( ) // QuotaLister helps list Quotas. +// All objects returned here must be treated as read-only. type QuotaLister interface { // List lists all Quotas in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.Quota, err error) // Quotas returns an object that can list and get Quotas. Quotas(namespace string) QuotaNamespaceLister @@ -58,10 +60,13 @@ func (s *quotaLister) Quotas(namespace string) QuotaNamespaceLister { } // QuotaNamespaceLister helps list and get Quotas. +// All objects returned here must be treated as read-only. type QuotaNamespaceLister interface { // List lists all Quotas in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.Quota, err error) // Get retrieves the Quota from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.Quota, error) QuotaNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/secretbinding.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/secretbinding.go index c8e8f011d..d9c19222e 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/secretbinding.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/secretbinding.go @@ -26,8 +26,10 @@ import ( ) // SecretBindingLister helps list SecretBindings. +// All objects returned here must be treated as read-only. type SecretBindingLister interface { // List lists all SecretBindings in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.SecretBinding, err error) // SecretBindings returns an object that can list and get SecretBindings. SecretBindings(namespace string) SecretBindingNamespaceLister @@ -58,10 +60,13 @@ func (s *secretBindingLister) SecretBindings(namespace string) SecretBindingName } // SecretBindingNamespaceLister helps list and get SecretBindings. +// All objects returned here must be treated as read-only. type SecretBindingNamespaceLister interface { // List lists all SecretBindings in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.SecretBinding, err error) // Get retrieves the SecretBinding from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.SecretBinding, error) SecretBindingNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/seed.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/seed.go index 3bb8aff12..a0108360b 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/seed.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/seed.go @@ -26,10 +26,13 @@ import ( ) // SeedLister helps list Seeds. +// All objects returned here must be treated as read-only. type SeedLister interface { // List lists all Seeds in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.Seed, err error) // Get retrieves the Seed from the index for a given name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.Seed, error) SeedListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/shoot.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/shoot.go index 59bfca960..9d42c6dc2 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/shoot.go @@ -26,8 +26,10 @@ import ( ) // ShootLister helps list Shoots. +// All objects returned here must be treated as read-only. type ShootLister interface { // List lists all Shoots in the indexer. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.Shoot, err error) // Shoots returns an object that can list and get Shoots. Shoots(namespace string) ShootNamespaceLister @@ -58,10 +60,13 @@ func (s *shootLister) Shoots(namespace string) ShootNamespaceLister { } // ShootNamespaceLister helps list and get Shoots. +// All objects returned here must be treated as read-only. type ShootNamespaceLister interface { // List lists all Shoots in the indexer for a given namespace. + // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1beta1.Shoot, err error) // Get retrieves the Shoot from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. Get(name string) (*v1beta1.Shoot, error) ShootNamespaceListerExpansion } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/applier.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/applier.go index 0df139e61..1718e8540 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/applier.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/applier.go @@ -85,11 +85,7 @@ func (a *defaultApplier) applyObject(ctx context.Context, desired *unstructured. } } - key, err := client.ObjectKeyFromObject(desired) - if err != nil { - return err - } - + key := client.ObjectKeyFromObject(desired) if len(key.Name) == 0 { return fmt.Errorf("missing 'metadata.name' in: %+v", desired) } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go index 275eaead2..55e60fb08 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go @@ -20,7 +20,6 @@ import ( "fmt" gardencoreclientset "github.com/gardener/gardener/pkg/client/core/clientset/versioned" - "github.com/gardener/gardener/pkg/client/kubernetes/utils" versionutils "github.com/gardener/gardener/pkg/utils/version" corev1 "k8s.io/api/core/v1" @@ -262,17 +261,10 @@ func newClientSet(conf *Config) (Interface, error) { } var runtimeClient client.Client - if UseCachedRuntimeClients && !conf.disableCachedClient { - if cacheOpts := conf.cacheReaderOptions; cacheOpts != nil { - runtimeClient, err = utils.NewClientWithSpecificallyCachedReader(runtimeCache, conf.restConfig, conf.clientOptions, cacheOpts.readSpecifiedFromCache, cacheOpts.specificallyCachedObjects...) - if err != nil { - return nil, err - } - } else { - runtimeClient, err = newRuntimeClientWithCache(conf.restConfig, conf.clientOptions, runtimeCache) - if err != nil { - return nil, err - } + if UseCachedRuntimeClients && !conf.disableCache { + runtimeClient, err = newRuntimeClientWithCache(conf.restConfig, conf.clientOptions, runtimeCache, conf.uncachedObjects...) + if err != nil { + return nil, err } } else { runtimeClient = directClient diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientmap/internal/generic_clientmap.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientmap/internal/generic_clientmap.go index 4644d606f..d14cb0c87 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientmap/internal/generic_clientmap.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientmap/internal/generic_clientmap.go @@ -145,7 +145,7 @@ func (cm *GenericClientMap) GetClient(ctx context.Context, key clientmap.ClientS defer cancel() // make sure the ClientSet has synced before returning - if !waitForClientSetCacheSync(entry, waitContext.Done()) { + if !waitForClientSetCacheSync(waitContext, entry) { return nil, fmt.Errorf("timed out waiting for caches of ClientSet with key %q to sync", key.Key()) } } @@ -254,17 +254,17 @@ func (cm *GenericClientMap) startClientSet(entry *clientMapEntry) { entry.cancel = clientSetCancel - entry.clientSet.Start(clientSetContext.Done()) + entry.clientSet.Start(clientSetContext) } -func waitForClientSetCacheSync(entry *clientMapEntry, waitStopCh <-chan struct{}) bool { +func waitForClientSetCacheSync(ctx context.Context, entry *clientMapEntry) bool { // We don't need a lock here, as waiting in multiple goroutines is not harmful. // But RLocking here (for every GetClient) would be blocking creating new clients, so we should avoid that. if entry.synced { return true } - if !entry.clientSet.WaitForCacheSync(waitStopCh) { + if !entry.clientSet.WaitForCacheSync(ctx) { return false } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientset.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientset.go index b601962f5..7ab0857f4 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientset.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientset.go @@ -15,6 +15,7 @@ package kubernetes import ( + "context" "sync" "github.com/gardener/gardener/pkg/chartrenderer" @@ -159,10 +160,10 @@ func (c *clientSet) DiscoverVersion() (*version.Info, error) { // Start starts the cache of the ClientSet's controller-runtime client and returns immediately. // It must be called first before using the client to retrieve objects from the API server. -func (c *clientSet) Start(stopCh <-chan struct{}) { +func (c *clientSet) Start(ctx context.Context) { c.startOnce.Do(func() { go func() { - if err := c.cache.Start(stopCh); err != nil { + if err := c.cache.Start(ctx); err != nil { logger.Logger.Errorf("cache.Start returned error, which should never happen, ignoring.") } }() @@ -170,6 +171,6 @@ func (c *clientSet) Start(stopCh <-chan struct{}) { } // WaitForCacheSync waits for the cache of the ClientSet's controller-runtime client to be synced. -func (c *clientSet) WaitForCacheSync(stopCh <-chan struct{}) bool { - return c.cache.WaitForCacheSync(stopCh) +func (c *clientSet) WaitForCacheSync(ctx context.Context) bool { + return c.cache.WaitForCacheSync(ctx) } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/options.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/options.go index 429fea881..842aacb3a 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/options.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/options.go @@ -18,7 +18,6 @@ import ( "errors" "time" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/rest" baseconfig "k8s.io/component-base/config" "sigs.k8s.io/controller-runtime/pkg/client" @@ -26,17 +25,11 @@ import ( // Config carries options for new ClientSets. type Config struct { - clientOptions client.Options - restConfig *rest.Config - cacheResync *time.Duration - disableCachedClient bool - cacheReaderOptions *cacheReaderOptions -} - -// cacheReaderOptions configures the specificallyCachedReader -type cacheReaderOptions struct { - readSpecifiedFromCache bool - specificallyCachedObjects []runtime.Object + clientOptions client.Options + restConfig *rest.Config + cacheResync *time.Duration + disableCache bool + uncachedObjects []client.Object } // NewConfig returns a new Config with an empty REST config to allow testing ConfigFuncs without exporting @@ -94,29 +87,15 @@ func WithCacheResyncPeriod(resync time.Duration) ConfigFunc { // DirectClient(). func WithDisabledCachedClient() ConfigFunc { return func(config *Config) error { - config.disableCachedClient = true + config.disableCache = true return nil } } -// WithDisabledCacheFor disables the cached client for the specified objects' GroupKinds. -func WithDisabledCacheFor(objects ...runtime.Object) ConfigFunc { +// WithUncached disables the cached client for the specified objects' GroupKinds. +func WithUncached(objs ...client.Object) ConfigFunc { return func(config *Config) error { - config.cacheReaderOptions = &cacheReaderOptions{ - readSpecifiedFromCache: false, - specificallyCachedObjects: objects, - } - return nil - } -} - -// WithEnabledCacheFor enables the cached client only for the specified objects' GroupKinds. -func WithEnabledCacheFor(objects ...runtime.Object) ConfigFunc { - return func(config *Config) error { - config.cacheReaderOptions = &cacheReaderOptions{ - readSpecifiedFromCache: true, - specificallyCachedObjects: objects, - } + config.uncachedObjects = append(config.uncachedObjects, objs...) return nil } } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/runtime_client.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/runtime_client.go index 834816b13..e83e41c17 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/runtime_client.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/runtime_client.go @@ -19,7 +19,10 @@ import ( "fmt" "time" + "sigs.k8s.io/controller-runtime/pkg/manager" + "github.com/gardener/gardener/pkg/logger" + "github.com/gardener/gardener/pkg/mock/go/context" "github.com/sirupsen/logrus" "golang.org/x/time/rate" @@ -45,8 +48,8 @@ func NewDirectClient(config *rest.Config, options client.Options) (client.Client } // NewRuntimeClientWithCache creates a new client.client with the given config and options. -// The client uses a new cache, which will be started immediately using the given stop channel. -func NewRuntimeClientWithCache(config *rest.Config, options client.Options, stopCh <-chan struct{}) (client.Client, error) { +// The client uses a new cache, which will be started immediately using the given context. +func NewRuntimeClientWithCache(ctx context.Context, config *rest.Config, options client.Options, uncachedObjects ...client.Object) (client.Client, error) { if err := setClientOptionsDefaults(config, &options); err != nil { return nil, err } @@ -59,36 +62,24 @@ func NewRuntimeClientWithCache(config *rest.Config, options client.Options, stop return nil, fmt.Errorf("could not create new client cache: %w", err) } - runtimeClient, err := newRuntimeClientWithCache(config, options, clientCache) + runtimeClient, err := newRuntimeClientWithCache(config, options, clientCache, uncachedObjects...) if err != nil { return nil, err } go func() { - if err := clientCache.Start(stopCh); err != nil { + if err := clientCache.Start(ctx); err != nil { logger.NewLogger(fmt.Sprint(logrus.ErrorLevel)).Errorf("cache.Start returned error, which should never happen, ignoring.") } }() - clientCache.WaitForCacheSync(stopCh) + clientCache.WaitForCacheSync(ctx) return runtimeClient, nil } -func newRuntimeClientWithCache(config *rest.Config, options client.Options, cache cache.Cache) (client.Client, error) { - c, err := client.New(config, options) - if err != nil { - return nil, err - } - - return &client.DelegatingClient{ - Reader: &client.DelegatingReader{ - CacheReader: cache, - ClientReader: c, - }, - Writer: c, - StatusClient: c, - }, nil +func newRuntimeClientWithCache(config *rest.Config, options client.Options, cache cache.Cache, uncachedObjects ...client.Object) (client.Client, error) { + return manager.NewClientBuilder().WithUncached(uncachedObjects...).Build(cache, config, options) } func setClientOptionsDefaults(config *rest.Config, options *client.Options) error { diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/scaling.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/scaling.go index 19af00a30..fa13c9053 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/scaling.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/scaling.go @@ -22,7 +22,6 @@ import ( appsv1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -64,7 +63,7 @@ func ScaleDeployment(ctx context.Context, c client.Client, key client.ObjectKey, } // scaleResource scales resource's 'spec.replicas' to replicas count -func scaleResource(ctx context.Context, c client.Client, obj runtime.Object, replicas int32) error { +func scaleResource(ctx context.Context, c client.Client, obj client.Object, replicas int32) error { patch := []byte(fmt.Sprintf(`{"spec":{"replicas":%d}}`, replicas)) // TODO: replace this with call to scale subresource once controller-runtime supports it diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go index 596994ac6..7da1186af 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go @@ -173,7 +173,7 @@ type Interface interface { // Start starts the cache of the ClientSet's controller-runtime client and returns immediately. // It must be called first before using the client to retrieve objects from the API server. - Start(stopCh <-chan struct{}) + Start(ctx context.Context) // WaitForCacheSync waits for the cache of the ClientSet's controller-runtime client to be synced. - WaitForCacheSync(stopCh <-chan struct{}) bool + WaitForCacheSync(ctx context.Context) bool } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/utils/client.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/utils/client.go deleted file mode 100644 index 400ff5d47..000000000 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/utils/client.go +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// 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 utils - -import ( - "context" - "strings" - - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - kubernetesscheme "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - "sigs.k8s.io/controller-runtime/pkg/cache" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/client/apiutil" - "sigs.k8s.io/controller-runtime/pkg/manager" -) - -// NewClientFuncWithSpecificallyCachedReader returns a manager.NewClientFunc that creates a new client.Client that either -// - reads directly from the API server by default but reads the specified objects from the cache (readSpecifiedFromCache=true) -// - or reads from the cache by default but reads the specified objects directly from the API server (readSpecifiedFromCache=true). -func NewClientFuncWithSpecificallyCachedReader(readSpecifiedFromCache bool, specifiedObjects ...runtime.Object) manager.NewClientFunc { - return func(cache cache.Cache, config *rest.Config, options client.Options) (client.Client, error) { - return NewClientWithSpecificallyCachedReader(cache, config, options, readSpecifiedFromCache, specifiedObjects...) - } -} - -// NewClientFuncWithDisabledCacheFor returns a manager.NewClientFunc that creates a new client.Client that reads from -// the cache by default but reads the specified objects directly from the API server. -func NewClientFuncWithDisabledCacheFor(directlyReadingObjects ...runtime.Object) manager.NewClientFunc { - return NewClientFuncWithSpecificallyCachedReader(false, directlyReadingObjects...) -} - -// NewClientFuncWithEnabledCacheFor returns a manager.NewClientFunc that creates a new client.Client that reads directly -// from the API server by default but reads the specified objects from the cache. -func NewClientFuncWithEnabledCacheFor(cachedObjects ...runtime.Object) manager.NewClientFunc { - return NewClientFuncWithSpecificallyCachedReader(true, cachedObjects...) -} - -// NewClientWithSpecificallyCachedReader creates a new client.Client that either -// - reads directly from the API server by default but reads the specified objects from the cache (readSpecifiedFromCache=true) -// - or reads from the cache by default but reads the specified objects directly from the API server (readSpecifiedFromCache=false). -func NewClientWithSpecificallyCachedReader(cache cache.Cache, config *rest.Config, options client.Options, readSpecifiedFromCache bool, specifiedObjects ...runtime.Object) (client.Client, error) { - // create the default Client - c, err := client.New(config, options) - if err != nil { - return nil, err - } - - // create cache Reader that decides which objects to read from the cache and which to read directly from the API server - cacheReader, err := NewSpecificallyCachedReaderFor( - cache, - c, - options.Scheme, - readSpecifiedFromCache, - specifiedObjects..., - ) - if err != nil { - return nil, err - } - - return &client.DelegatingClient{ - Reader: &client.DelegatingReader{ - CacheReader: cacheReader, - ClientReader: c, - }, - Writer: c, - StatusClient: c, - }, nil -} - -// NewSpecificallyCachedReaderFor creates a new client.Reader that either -// - reads directly from the API server by default but reads the specified objects from the cache (readSpecifiedFromCache=true) -// - or reads from the cache by default but reads the specified objects directly from the API server (readSpecifiedFromCache=false). -func NewSpecificallyCachedReaderFor(cacheReader, clientReader client.Reader, scheme *runtime.Scheme, readSpecifiedFromCache bool, objectKinds ...runtime.Object) (client.Reader, error) { - if scheme == nil { - scheme = kubernetesscheme.Scheme - } - - delegatingRule, err := newDelegationRule(scheme, readSpecifiedFromCache, objectKinds...) - if err != nil { - return nil, err - } - - return &specificallyCachedReader{ - shouldReadObjectFromCache: delegatingRule, - cacheReader: cacheReader, - clientReader: clientReader, - }, nil -} - -// NewReaderWithDisabledCacheFor creates a new client.Reader that reads from the cache by default but reads the -// specified objects directly from the API server. -func NewReaderWithDisabledCacheFor(cacheReader, clientReader client.Reader, scheme *runtime.Scheme, directlyReadingObjects ...runtime.Object) (client.Reader, error) { - return NewSpecificallyCachedReaderFor(cacheReader, clientReader, scheme, false, directlyReadingObjects...) -} - -// NewReaderWithEnabledCacheFor creates a new client.Reader that reads directly from the API server by default but reads -// the specified objects from the cache. -func NewReaderWithEnabledCacheFor(cacheReader, clientReader client.Reader, scheme *runtime.Scheme, cachedObjects ...runtime.Object) (client.Reader, error) { - return NewSpecificallyCachedReaderFor(cacheReader, clientReader, scheme, true, cachedObjects...) -} - -// specificallyCachedReader implements client.Reader and delegates calls to the cache or direct client according to the -// given delegationRule. -type specificallyCachedReader struct { - shouldReadObjectFromCache delegationRule - - cacheReader client.Reader - clientReader client.Reader -} - -// delegationRule is a function that decides whether a given object should be read from the cache or directly from the -// API server. -type delegationRule func(obj runtime.Object) (readFromCache bool, err error) - -// newDelegationRule returns a delegationRule, that will either -// - only allow to read the specified object kinds from the cache (readSpecifiedFromCache=true) -// - or only read the specified object kinds directly from the API server (readSpecifiedFromCache=false) -func newDelegationRule(scheme *runtime.Scheme, readSpecifiedFromCache bool, objs ...runtime.Object) (delegationRule, error) { - specifiedGKs := make(map[schema.GroupKind]struct{}) - - for _, obj := range objs { - gvk, err := apiutil.GVKForObject(obj, scheme) - if err != nil { - return nil, err - } - specifiedGKs[gvk.GroupKind()] = struct{}{} - } - - return func(obj runtime.Object) (readFromCache bool, err error) { - gvk, err := apiutil.GVKForObject(obj, scheme) - if err != nil { - return false, err - } - - if strings.HasSuffix(gvk.Kind, "List") && meta.IsListType(obj) { - // if this is a list, treat it as a request for the item's resource - gvk.Kind = strings.TrimSuffix(gvk.Kind, "List") - } - - _, ok := specifiedGKs[gvk.GroupKind()] - // read from cache if GroupKind was specified and readSpecifiedFromCache=true - // or GroupKind was not specified and readSpecifiedFromCache=false - return ok == readSpecifiedFromCache, nil - }, nil -} - -// Get implements client.Reader by delegating calls either to the cache or the direct client based on the decision of -// the delegationRule. -func (s *specificallyCachedReader) Get(ctx context.Context, key client.ObjectKey, obj runtime.Object) error { - useCache, err := s.shouldReadObjectFromCache(obj) - if err != nil { - return err - } - if useCache { - return s.cacheReader.Get(ctx, key, obj) - } - return s.clientReader.Get(ctx, key, obj) -} - -// List implements client.Reader by delegating calls either to the cache or the direct client based on the decision of -// the delegationRule. -func (s *specificallyCachedReader) List(ctx context.Context, list runtime.Object, opts ...client.ListOption) error { - useCache, err := s.shouldReadObjectFromCache(list) - if err != nil { - return err - } - if useCache { - return s.cacheReader.List(ctx, list, opts...) - } - return s.clientReader.List(ctx, list, opts...) -} diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/associations.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/associations.go index 561ac903e..29cadc604 100644 --- a/vendor/github.com/gardener/gardener/pkg/controllerutils/associations.go +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/associations.go @@ -138,7 +138,7 @@ func DetermineShootAssociations(ctx context.Context, c client.Client, seedName s }) } -func determineAssociations(ctx context.Context, c client.Client, seedName string, listObj runtime.Object, seedNameFunc func(runtime.Object) (string, error)) ([]string, error) { +func determineAssociations(ctx context.Context, c client.Client, seedName string, listObj client.ObjectList, seedNameFunc func(runtime.Object) (string, error)) ([]string, error) { if err := c.List(ctx, listObj); err != nil { return nil, err } diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/finalizers.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/finalizers.go index c9f53cec6..8ef72535e 100644 --- a/vendor/github.com/gardener/gardener/pkg/controllerutils/finalizers.go +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/finalizers.go @@ -25,15 +25,13 @@ import ( kutil "github.com/gardener/gardener/pkg/utils/kubernetes" apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" ) // PatchFinalizers adds the given finalizers to the object via a patch request. -func PatchFinalizers(ctx context.Context, c client.Client, obj controllerutil.Object, finalizers ...string) error { +func PatchFinalizers(ctx context.Context, c client.Client, obj client.Object, finalizers ...string) error { beforePatch := obj.DeepCopyObject() for _, finalizer := range finalizers { @@ -44,7 +42,7 @@ func PatchFinalizers(ctx context.Context, c client.Client, obj controllerutil.Ob } // PatchRemoveFinalizers removes the given finalizers from the object via a patch request. -func PatchRemoveFinalizers(ctx context.Context, c client.Client, obj controllerutil.Object, finalizers ...string) error { +func PatchRemoveFinalizers(ctx context.Context, c client.Client, obj client.Object, finalizers ...string) error { beforePatch := obj.DeepCopyObject() for _, finalizer := range finalizers { @@ -55,11 +53,9 @@ func PatchRemoveFinalizers(ctx context.Context, c client.Client, obj controlleru } // EnsureFinalizer ensure the is present for the object. -func EnsureFinalizer(ctx context.Context, c client.Client, obj controllerutil.Object, finalizer string) error { +func EnsureFinalizer(ctx context.Context, c client.Client, obj client.Object, finalizer string) error { if err := kutil.TryUpdate(ctx, retry.DefaultBackoff, c, obj, func() error { - finalizers := sets.NewString(obj.GetFinalizers()...) - finalizers.Insert(finalizer) - obj.SetFinalizers(finalizers.UnsortedList()) + controllerutil.AddFinalizer(obj, finalizer) return nil }); err != nil { return fmt.Errorf("could not ensure %q finalizer: %+v", finalizer, err) @@ -68,19 +64,14 @@ func EnsureFinalizer(ctx context.Context, c client.Client, obj controllerutil.Ob } // RemoveGardenerFinalizer removes the gardener finalizer from the object. -func RemoveGardenerFinalizer(ctx context.Context, c client.Client, obj controllerutil.Object) error { +func RemoveGardenerFinalizer(ctx context.Context, c client.Client, obj client.Object) error { return RemoveFinalizer(ctx, c, obj, gardencorev1beta1.GardenerName) } // RemoveFinalizer removes the from the object. -func RemoveFinalizer(ctx context.Context, c client.Client, obj controllerutil.Object, finalizer string) error { +func RemoveFinalizer(ctx context.Context, c client.Client, obj client.Object, finalizer string) error { if err := kutil.TryUpdate(ctx, retry.DefaultBackoff, c, obj, func() error { - if len(obj.GetFinalizers()) == 0 { - return nil - } - finalizers := sets.NewString(obj.GetFinalizers()...) - finalizers.Delete(finalizer) - obj.SetFinalizers(finalizers.UnsortedList()) + controllerutil.RemoveFinalizer(obj, finalizer) return nil }); client.IgnoreNotFound(err) != nil { return fmt.Errorf("could not remove %q finalizer: %+v", finalizer, err) @@ -91,14 +82,14 @@ func RemoveFinalizer(ctx context.Context, c client.Client, obj controllerutil.Ob pollerCtx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() return wait.PollImmediateUntil(time.Second, func() (bool, error) { - err := c.Get(ctx, kutil.KeyFromObject(obj), obj) + err := c.Get(ctx, client.ObjectKeyFromObject(obj), obj) if apierrors.IsNotFound(err) { return true, nil } if err != nil { return false, err } - if !HasFinalizer(obj, finalizer) { + if !controllerutil.ContainsFinalizer(obj, finalizer) { return true, nil } return false, nil @@ -106,6 +97,5 @@ func RemoveFinalizer(ctx context.Context, c client.Client, obj controllerutil.Ob } // HasFinalizer checks whether the given obj has the given finalizer. -func HasFinalizer(obj metav1.Object, finalizer string) bool { - return sets.NewString(obj.GetFinalizers()...).Has(finalizer) -} +// Deprecated: use controllerutil.ContainsFinalizer instead +var HasFinalizer = controllerutil.ContainsFinalizer diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/operations.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/operations.go index bd84b1a11..941b0fb62 100644 --- a/vendor/github.com/gardener/gardener/pkg/controllerutils/operations.go +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/operations.go @@ -22,11 +22,10 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) // RemoveGardenerOperationAnnotation removes a gardener operation annotation and retries the operation with the given . -func RemoveGardenerOperationAnnotation(ctx context.Context, backoff wait.Backoff, cli client.Client, obj controllerutil.Object) error { +func RemoveGardenerOperationAnnotation(ctx context.Context, backoff wait.Backoff, cli client.Client, obj client.Object) error { return kutil.TryUpdate(ctx, backoff, cli, obj, func() error { delete(obj.GetAnnotations(), v1beta1constants.GardenerOperation) return nil diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go index f2cc131c3..735b5e5dd 100644 --- a/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go @@ -36,7 +36,7 @@ import ( // added to the wait group when started and marked done when finished. // Deprecated: Use CreateWorker instead. func DeprecatedCreateWorker(ctx context.Context, queue workqueue.RateLimitingInterface, resourceType string, reconciler func(key string) error, waitGroup *sync.WaitGroup, workerCh chan int) { - CreateWorker(ctx, queue, resourceType, reconcile.Func(func(req reconcile.Request) (reconcile.Result, error) { + CreateWorker(ctx, queue, resourceType, reconcile.Func(func(_ context.Context, req reconcile.Request) (reconcile.Result, error) { meta := kutil.ObjectMeta(req.Namespace, req.Name) key, err := cache.MetaNamespaceKeyFunc(&meta) if err != nil { @@ -68,7 +68,9 @@ func CreateWorker(ctx context.Context, queue workqueue.RateLimitingInterface, re waitGroup.Add(1) workerCh <- 1 go func() { - wait.Until(worker(queue, resourceType, reconciler), time.Second, ctx.Done()) + wait.UntilWithContext(ctx, func(ctx context.Context) { + worker(ctx, queue, resourceType, reconciler) + }, time.Second) workerCh <- -1 waitGroup.Done() }() @@ -92,42 +94,40 @@ func requestFromKey(key interface{}) (reconcile.Request, error) { // worker runs a worker thread that just dequeues items, processes them, and marks them done. // It enforces that the reconciler is never invoked concurrently with the same key. -func worker(queue workqueue.RateLimitingInterface, resourceType string, reconciler reconcile.Reconciler) func() { - return func() { - exit := false - for !exit { - exit = func() bool { - key, quit := queue.Get() - if quit { - return true - } - defer queue.Done(key) +func worker(ctx context.Context, queue workqueue.RateLimitingInterface, resourceType string, reconciler reconcile.Reconciler) { + exit := false + for !exit { + exit = func() bool { + key, quit := queue.Get() + if quit { + return true + } + defer queue.Done(key) - req, err := requestFromKey(key) - if err != nil { - logger.Logger.WithError(err).Error("Cannot obtain request from key") - queue.Forget(key) - return false - } + req, err := requestFromKey(key) + if err != nil { + logger.Logger.WithError(err).Error("Cannot obtain request from key") + queue.Forget(key) + return false + } - res, err := reconciler.Reconcile(req) - if err != nil { - logger.Logger.Infof("Error syncing %s %v: %v", resourceType, key, err) - queue.AddRateLimited(key) - return false - } + res, err := reconciler.Reconcile(ctx, req) + if err != nil { + logger.Logger.Infof("Error syncing %s %v: %v", resourceType, key, err) + queue.AddRateLimited(key) + return false + } - if res.RequeueAfter > 0 { - queue.AddAfter(key, res.RequeueAfter) - return false - } - if res.Requeue { - queue.AddRateLimited(key) - return false - } - queue.Forget(key) + if res.RequeueAfter > 0 { + queue.AddAfter(key, res.RequeueAfter) return false - }() - } + } + if res.Requeue { + queue.AddRateLimited(key) + return false + } + queue.Forget(key) + return false + }() } } diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/helper/helpers.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/helper/helpers.go index c5a5049ac..8505cb2a1 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/helper/helpers.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/helper/helpers.go @@ -16,6 +16,8 @@ package helper import ( "github.com/gardener/gardener/pkg/gardenlet/apis/config" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // SeedNameFromSeedConfig returns an empty string if the given seed config is nil, or the @@ -26,3 +28,13 @@ func SeedNameFromSeedConfig(seedConfig *config.SeedConfig) string { } return seedConfig.Seed.Name } + +// StaleExtensionHealthChecksThreshold returns nil if the given config is nil or the check +// for stale health checks is not enabled. Otherwise it returns the threshold from the given config. +func StaleExtensionHealthChecksThreshold(c *config.StaleExtensionHealthChecks) *metav1.Duration { + if c != nil && c.Enabled { + return c.Threshold + } + + return nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go index 71752a7a5..37789dede 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go @@ -139,7 +139,7 @@ type BackupBucketControllerConfiguration struct { type BackupEntryControllerConfiguration struct { // ConcurrentSyncs is the number of workers used for the controller to work on events. ConcurrentSyncs *int - // DeletionGracePeriodHours holds the period in number of days to delete the Backup Infrastructure after deletion timestamp is set. + // DeletionGracePeriodHours holds the period in number of hours to delete the BackupEntry after deletion timestamp is set. // If value is set to 0 then the BackupEntryController will trigger deletion immediately. DeletionGracePeriodHours *int } @@ -180,7 +180,7 @@ type SeedControllerConfiguration struct { SyncPeriod *metav1.Duration } -// ShootControllerConfiguration defines the configuration of the CloudProfile +// ShootControllerConfiguration defines the configuration of the Shoot // controller. type ShootControllerConfiguration struct { // ConcurrentSyncs is the number of workers used for the controller to work on @@ -217,16 +217,23 @@ type ShootCareControllerConfiguration struct { // often the health check of Shoot clusters is performed (only if no operation is // already running on them). SyncPeriod *metav1.Duration - // StaleExtensionHealthCheckThreshold configures the threshold when Gardener considers a Health check report of an - // Extension CRD as outdated. - // The StaleExtensionHealthCheckThreshold should have some leeway in case a Gardener extension is temporarily unavailable. - // If not set, Gardener does not verify for outdated health check reports. This is for backwards-compatibility reasons - // and will become default in a future version. - StaleExtensionHealthCheckThreshold *metav1.Duration + // StaleExtensionHealthChecks defines the configuration of the check for stale extension health checks. + StaleExtensionHealthChecks *StaleExtensionHealthChecks // ConditionThresholds defines the condition threshold per condition type. ConditionThresholds []ConditionThreshold } +// StaleExtensionHealthChecks defines the configuration of the check for stale extension health checks. +type StaleExtensionHealthChecks struct { + // Enabled specifies whether the check for stale extensions health checks is enabled. + // Defaults to true. + Enabled bool + // Threshold configures the threshold when gardenlet considers a health check report of an extension CRD as outdated. + // The threshold should have some leeway in case a Gardener extension is temporarily unavailable. + // Defaults to 5m. + Threshold *metav1.Duration +} + // ShootedSeedRegistrationControllerConfiguration defines the configuration of the shooted seed registration controller. type ShootedSeedRegistrationControllerConfiguration struct { // SyncJitterPeriod is a jitter duration for the reconciler sync that can be used to distribute the syncs randomly. @@ -240,17 +247,15 @@ type ConditionThreshold struct { // Type is the type of the condition to define the threshold for. Type string // Duration is the duration how long the condition can stay in the progressing state. - Duration *metav1.Duration + Duration metav1.Duration } -// ShootStateSyncControllerConfiguration defines the configuration of the -// ShootStateController controller. +// ShootStateSyncControllerConfiguration defines the configuration of the ShootState Sync controller. type ShootStateSyncControllerConfiguration struct { // ConcurrentSyncs is the number of workers used for the controller to work on // events. ConcurrentSyncs *int - // SyncPeriod is the duration how often the existing extension resources are - // synced to the ShootState resource + // SyncPeriod is the duration how often the existing extension resources are synced to the ShootState resource SyncPeriod *metav1.Duration } diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go index dade1f386..4879878bf 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go @@ -77,11 +77,7 @@ func (in *BackupEntryControllerConfiguration) DeepCopy() *BackupEntryControllerC // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConditionThreshold) DeepCopyInto(out *ConditionThreshold) { *out = *in - if in.Duration != nil { - in, out := &in.Duration, &out.Duration - *out = new(v1.Duration) - **out = **in - } + out.Duration = in.Duration return } @@ -680,17 +676,15 @@ func (in *ShootCareControllerConfiguration) DeepCopyInto(out *ShootCareControlle *out = new(v1.Duration) **out = **in } - if in.StaleExtensionHealthCheckThreshold != nil { - in, out := &in.StaleExtensionHealthCheckThreshold, &out.StaleExtensionHealthCheckThreshold - *out = new(v1.Duration) - **out = **in + if in.StaleExtensionHealthChecks != nil { + in, out := &in.StaleExtensionHealthChecks, &out.StaleExtensionHealthChecks + *out = new(StaleExtensionHealthChecks) + (*in).DeepCopyInto(*out) } if in.ConditionThresholds != nil { in, out := &in.ConditionThresholds, &out.ConditionThresholds *out = make([]ConditionThreshold, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } + copy(*out, *in) } return } @@ -820,6 +814,27 @@ func (in *ShootedSeedRegistrationControllerConfiguration) DeepCopy() *ShootedSee return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StaleExtensionHealthChecks) DeepCopyInto(out *StaleExtensionHealthChecks) { + *out = *in + if in.Threshold != nil { + in, out := &in.Threshold, &out.Threshold + *out = new(v1.Duration) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StaleExtensionHealthChecks. +func (in *StaleExtensionHealthChecks) DeepCopy() *StaleExtensionHealthChecks { + if in == nil { + return nil + } + out := new(StaleExtensionHealthChecks) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TLSServer) DeepCopyInto(out *TLSServer) { *out = *in diff --git a/vendor/github.com/gardener/gardener/pkg/mock/controller-runtime/client/mocks.go b/vendor/github.com/gardener/gardener/pkg/mock/controller-runtime/client/mocks.go index dfa9f20aa..6b6f5bf34 100644 --- a/vendor/github.com/gardener/gardener/pkg/mock/controller-runtime/client/mocks.go +++ b/vendor/github.com/gardener/gardener/pkg/mock/controller-runtime/client/mocks.go @@ -9,6 +9,7 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" + meta "k8s.io/apimachinery/pkg/api/meta" runtime "k8s.io/apimachinery/pkg/runtime" types "k8s.io/apimachinery/pkg/types" client "sigs.k8s.io/controller-runtime/pkg/client" @@ -38,7 +39,7 @@ func (m *MockClient) EXPECT() *MockClientMockRecorder { } // Create mocks base method. -func (m *MockClient) Create(arg0 context.Context, arg1 runtime.Object, arg2 ...client.CreateOption) error { +func (m *MockClient) Create(arg0 context.Context, arg1 client.Object, arg2 ...client.CreateOption) error { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -57,7 +58,7 @@ func (mr *MockClientMockRecorder) Create(arg0, arg1 interface{}, arg2 ...interfa } // Delete mocks base method. -func (m *MockClient) Delete(arg0 context.Context, arg1 runtime.Object, arg2 ...client.DeleteOption) error { +func (m *MockClient) Delete(arg0 context.Context, arg1 client.Object, arg2 ...client.DeleteOption) error { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -76,7 +77,7 @@ func (mr *MockClientMockRecorder) Delete(arg0, arg1 interface{}, arg2 ...interfa } // DeleteAllOf mocks base method. -func (m *MockClient) DeleteAllOf(arg0 context.Context, arg1 runtime.Object, arg2 ...client.DeleteAllOfOption) error { +func (m *MockClient) DeleteAllOf(arg0 context.Context, arg1 client.Object, arg2 ...client.DeleteAllOfOption) error { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -95,7 +96,7 @@ func (mr *MockClientMockRecorder) DeleteAllOf(arg0, arg1 interface{}, arg2 ...in } // Get mocks base method. -func (m *MockClient) Get(arg0 context.Context, arg1 types.NamespacedName, arg2 runtime.Object) error { +func (m *MockClient) Get(arg0 context.Context, arg1 types.NamespacedName, arg2 client.Object) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Get", arg0, arg1, arg2) ret0, _ := ret[0].(error) @@ -109,7 +110,7 @@ func (mr *MockClientMockRecorder) Get(arg0, arg1, arg2 interface{}) *gomock.Call } // List mocks base method. -func (m *MockClient) List(arg0 context.Context, arg1 runtime.Object, arg2 ...client.ListOption) error { +func (m *MockClient) List(arg0 context.Context, arg1 client.ObjectList, arg2 ...client.ListOption) error { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -128,7 +129,7 @@ func (mr *MockClientMockRecorder) List(arg0, arg1 interface{}, arg2 ...interface } // Patch mocks base method. -func (m *MockClient) Patch(arg0 context.Context, arg1 runtime.Object, arg2 client.Patch, arg3 ...client.PatchOption) error { +func (m *MockClient) Patch(arg0 context.Context, arg1 client.Object, arg2 client.Patch, arg3 ...client.PatchOption) error { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1, arg2} for _, a := range arg3 { @@ -146,6 +147,34 @@ func (mr *MockClientMockRecorder) Patch(arg0, arg1, arg2 interface{}, arg3 ...in return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Patch", reflect.TypeOf((*MockClient)(nil).Patch), varargs...) } +// RESTMapper mocks base method. +func (m *MockClient) RESTMapper() meta.RESTMapper { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RESTMapper") + ret0, _ := ret[0].(meta.RESTMapper) + return ret0 +} + +// RESTMapper indicates an expected call of RESTMapper. +func (mr *MockClientMockRecorder) RESTMapper() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RESTMapper", reflect.TypeOf((*MockClient)(nil).RESTMapper)) +} + +// Scheme mocks base method. +func (m *MockClient) Scheme() *runtime.Scheme { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Scheme") + ret0, _ := ret[0].(*runtime.Scheme) + return ret0 +} + +// Scheme indicates an expected call of Scheme. +func (mr *MockClientMockRecorder) Scheme() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Scheme", reflect.TypeOf((*MockClient)(nil).Scheme)) +} + // Status mocks base method. func (m *MockClient) Status() client.StatusWriter { m.ctrl.T.Helper() @@ -161,7 +190,7 @@ func (mr *MockClientMockRecorder) Status() *gomock.Call { } // Update mocks base method. -func (m *MockClient) Update(arg0 context.Context, arg1 runtime.Object, arg2 ...client.UpdateOption) error { +func (m *MockClient) Update(arg0 context.Context, arg1 client.Object, arg2 ...client.UpdateOption) error { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -203,7 +232,7 @@ func (m *MockStatusWriter) EXPECT() *MockStatusWriterMockRecorder { } // Patch mocks base method. -func (m *MockStatusWriter) Patch(arg0 context.Context, arg1 runtime.Object, arg2 client.Patch, arg3 ...client.PatchOption) error { +func (m *MockStatusWriter) Patch(arg0 context.Context, arg1 client.Object, arg2 client.Patch, arg3 ...client.PatchOption) error { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1, arg2} for _, a := range arg3 { @@ -222,7 +251,7 @@ func (mr *MockStatusWriterMockRecorder) Patch(arg0, arg1, arg2 interface{}, arg3 } // Update mocks base method. -func (m *MockStatusWriter) Update(arg0 context.Context, arg1 runtime.Object, arg2 ...client.UpdateOption) error { +func (m *MockStatusWriter) Update(arg0 context.Context, arg1 client.Object, arg2 ...client.UpdateOption) error { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -264,7 +293,7 @@ func (m *MockReader) EXPECT() *MockReaderMockRecorder { } // Get mocks base method. -func (m *MockReader) Get(arg0 context.Context, arg1 types.NamespacedName, arg2 runtime.Object) error { +func (m *MockReader) Get(arg0 context.Context, arg1 types.NamespacedName, arg2 client.Object) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Get", arg0, arg1, arg2) ret0, _ := ret[0].(error) @@ -278,7 +307,7 @@ func (mr *MockReaderMockRecorder) Get(arg0, arg1, arg2 interface{}) *gomock.Call } // List mocks base method. -func (m *MockReader) List(arg0 context.Context, arg1 runtime.Object, arg2 ...client.ListOption) error { +func (m *MockReader) List(arg0 context.Context, arg1 client.ObjectList, arg2 ...client.ListOption) error { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { diff --git a/vendor/github.com/gardener/gardener/pkg/mock/gardener/client/kubernetes/mocks.go b/vendor/github.com/gardener/gardener/pkg/mock/gardener/client/kubernetes/mocks.go index 10c7a5792..e4e147551 100644 --- a/vendor/github.com/gardener/gardener/pkg/mock/gardener/client/kubernetes/mocks.go +++ b/vendor/github.com/gardener/gardener/pkg/mock/gardener/client/kubernetes/mocks.go @@ -5,6 +5,7 @@ package kubernetes import ( + context "context" reflect "reflect" chartrenderer "github.com/gardener/gardener/pkg/chartrenderer" @@ -271,7 +272,7 @@ func (mr *MockInterfaceMockRecorder) RESTMapper() *gomock.Call { } // Start mocks base method. -func (m *MockInterface) Start(arg0 <-chan struct{}) { +func (m *MockInterface) Start(arg0 context.Context) { m.ctrl.T.Helper() m.ctrl.Call(m, "Start", arg0) } @@ -297,7 +298,7 @@ func (mr *MockInterfaceMockRecorder) Version() *gomock.Call { } // WaitForCacheSync mocks base method. -func (m *MockInterface) WaitForCacheSync(arg0 <-chan struct{}) bool { +func (m *MockInterface) WaitForCacheSync(arg0 context.Context) bool { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "WaitForCacheSync", arg0) ret0, _ := ret[0].(bool) diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/addons.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/addons.go index b492f1b75..d6882f2ec 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/addons.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/addons.go @@ -213,14 +213,17 @@ func (b *Botanist) DeployManagedResources(ctx context.Context) error { return b.deployCloudConfigExecutionManagedResource(ctx) } +// CloudConfigExecutionManagedResourceName is a constant for the name of a ManagedResource in the seed cluster in the +// shoot namespace which contains the cloud config user data exeuction script. +const CloudConfigExecutionManagedResourceName = "shoot-cloud-config-execution" + // deployCloudConfigExecutionManagedResource creates the cloud config managed resource that contains: // 1. A secret containing the dedicated cloud config execution script for each worker group // 2. A secret containing some shared RBAC policies for downloading the cloud config execution script func (b *Botanist) deployCloudConfigExecutionManagedResource(ctx context.Context) error { var ( - managedResourceName = "shoot-cloud-config-execution" - secretLabels = map[string]string{ - SecretLabelKeyManagedResource: managedResourceName, + secretLabels = map[string]string{ + SecretLabelKeyManagedResource: CloudConfigExecutionManagedResourceName, } wantedSecretNames = sets.NewString() ) @@ -240,7 +243,7 @@ func (b *Botanist) deployCloudConfigExecutionManagedResource(ctx context.Context cloudConfigCharts[name] = b.getGenerateCloudConfigExecutionChartFunc(name, worker, bootstrapTokenSecret) } - cloudConfigManagedResource := common.NewManagedResourceForShoot(b.K8sSeedClient.Client(), managedResourceName, b.Shoot.SeedNamespace, false) + cloudConfigManagedResource := common.NewManagedResourceForShoot(b.K8sSeedClient.Client(), CloudConfigExecutionManagedResourceName, b.Shoot.SeedNamespace, false) // reconcile secrets and reference them to the ManagedResource fns := make([]flow.TaskFn, 0, len(cloudConfigCharts)) @@ -257,7 +260,7 @@ func (b *Botanist) deployCloudConfigExecutionManagedResource(ctx context.Context fns = append(fns, func(ctx context.Context) error { return secret. WithKeyValues(renderedChart.AsSecretData()). - WithLabels(map[string]string{SecretLabelKeyManagedResource: managedResourceName}). + WithLabels(map[string]string{SecretLabelKeyManagedResource: CloudConfigExecutionManagedResourceName}). Reconcile(ctx) }) } diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/backupentry.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/backupentry.go new file mode 100644 index 000000000..065142618 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/backupentry.go @@ -0,0 +1,63 @@ +// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// 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 botanist + +import ( + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + corebackupentry "github.com/gardener/gardener/pkg/operation/botanist/backupentry" + "github.com/gardener/gardener/pkg/operation/botanist/component" + extensionsbackupentry "github.com/gardener/gardener/pkg/operation/botanist/extensions/backupentry" + "github.com/gardener/gardener/pkg/operation/common" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/pointer" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// DefaultCoreBackupEntry creates the default deployer for the core.gardener.cloud/v1beta1.BackupEntry resource. +func (b *Botanist) DefaultCoreBackupEntry(gardenClient client.Client) component.DeployWaiter { + ownerRef := metav1.NewControllerRef(b.Shoot.Info, gardencorev1beta1.SchemeGroupVersion.WithKind("Shoot")) + ownerRef.BlockOwnerDeletion = pointer.BoolPtr(false) + + return corebackupentry.New( + b.Logger, + gardenClient, + &corebackupentry.Values{ + Namespace: b.Shoot.Info.Namespace, + Name: common.GenerateBackupEntryName(b.Shoot.Info.Status.TechnicalID, b.Shoot.Info.Status.UID), + OwnerReference: ownerRef, + SeedName: pointer.StringPtr(b.Seed.Info.Name), + OverwriteSeedName: b.isRestorePhase(), + BucketName: string(b.Seed.Info.UID), + }, + corebackupentry.DefaultInterval, + corebackupentry.DefaultTimeout, + ) +} + +// DefaultExtensionsBackupEntry creates the default deployer for the extensions.gardener.cloud/v1alpha1.BackupEntry +// custom resource. +func (b *Botanist) DefaultExtensionsBackupEntry(seedClient client.Client) extensionsbackupentry.BackupEntry { + return extensionsbackupentry.New( + b.Logger, + seedClient, + &extensionsbackupentry.Values{ + Name: common.GenerateBackupEntryName(b.Shoot.Info.Status.TechnicalID, b.Shoot.Info.Status.UID), + }, + extensionsbackupentry.DefaultInterval, + extensionsbackupentry.DefaultSevereThreshold, + extensionsbackupentry.DefaultTimeout, + ) +} diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/backupentry/backupentry.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/backupentry/backupentry.go new file mode 100644 index 000000000..f6a360c93 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/backupentry/backupentry.go @@ -0,0 +1,165 @@ +// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// 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 backupentry + +import ( + "context" + "errors" + "fmt" + "time" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + "github.com/gardener/gardener/pkg/operation/botanist/component" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + "github.com/gardener/gardener/pkg/utils/retry" + + "github.com/sirupsen/logrus" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" +) + +const ( + // DefaultInterval is the default interval for retry operations. + DefaultInterval = 5 * time.Second + // DefaultTimeout is the default timeout and defines how long Gardener should wait + // for a successful reconciliation of a BackupEntry resource. + DefaultTimeout = 10 * time.Minute +) + +// TimeNow returns the current time. Exposed for testing. +var TimeNow = time.Now + +// Values contains the values used to create a BackupEntry resource. +type Values struct { + // Namespace is the namespace of the BackupEntry resource. + Namespace string + // Name is the name of the BackupEntry resource. + Name string + // OwnerReference is a reference to an owner for BackupEntry resource. + OwnerReference *metav1.OwnerReference + // SeedName is the name of the seed to which the BackupEntry shall be scheduled. + SeedName *string + // OverwriteSeedName indicates whether the provided SeedName in the values shall be used even if the BackupEntry + // already exists (if this is false then the existing `.spec.seedName` will be kept even if the SeedName in these + // values differs. + OverwriteSeedName bool + // BucketName is the name of the bucket in which the BackupEntry shall be reconciled. This value is only used if the + // BackupEntry does not exist yet. Otherwise, the existing `.spec.bucketName` will be kept even if the BucketName in + // these values differs. + BucketName string +} + +// New creates a new instance of DeployWaiter for a BackupEntry. +func New( + logger logrus.FieldLogger, + client client.Client, + values *Values, + waitInterval time.Duration, + waitTimeout time.Duration, +) component.DeployWaiter { + return &backupEntry{ + client: client, + logger: logger, + values: values, + waitInterval: waitInterval, + waitTimeout: waitTimeout, + } +} + +type backupEntry struct { + values *Values + logger logrus.FieldLogger + client client.Client + waitInterval time.Duration + waitTimeout time.Duration +} + +// Deploy uses the garden client to create or update the BackupEntry resource in the project namespace in the Garden. +func (b *backupEntry) Deploy(ctx context.Context) error { + var ( + backupEntry = &gardencorev1beta1.BackupEntry{ + ObjectMeta: metav1.ObjectMeta{ + Name: b.values.Name, + Namespace: b.values.Namespace, + }, + } + bucketName = b.values.BucketName + seedName = b.values.SeedName + ) + + if err := b.client.Get(ctx, kutil.Key(b.values.Namespace, b.values.Name), backupEntry); err == nil { + bucketName = backupEntry.Spec.BucketName + seedName = backupEntry.Spec.SeedName + } else if client.IgnoreNotFound(err) != nil { + return err + } + + if b.values.OverwriteSeedName { + seedName = b.values.SeedName + } + + _, err := controllerutil.CreateOrUpdate(ctx, b.client, backupEntry, func() error { + metav1.SetMetaDataAnnotation(&backupEntry.ObjectMeta, v1beta1constants.GardenerOperation, v1beta1constants.GardenerOperationReconcile) + metav1.SetMetaDataAnnotation(&backupEntry.ObjectMeta, v1beta1constants.GardenerTimestamp, TimeNow().UTC().String()) + + finalizers := sets.NewString(backupEntry.GetFinalizers()...) + finalizers.Insert(gardencorev1beta1.GardenerName) + backupEntry.SetFinalizers(finalizers.UnsortedList()) + + if b.values.OwnerReference != nil { + backupEntry.ObjectMeta.OwnerReferences = []metav1.OwnerReference{*b.values.OwnerReference} + } + + backupEntry.Spec.BucketName = bucketName + backupEntry.Spec.SeedName = seedName + + return nil + }) + + return err +} + +// Wait waits until the BackupEntry resource is ready. +func (b *backupEntry) Wait(ctx context.Context) error { + return retry.UntilTimeout(ctx, b.waitInterval, b.waitTimeout, func(ctx context.Context) (done bool, err error) { + be := &gardencorev1beta1.BackupEntry{} + if err := b.client.Get(ctx, kutil.Key(b.values.Namespace, b.values.Name), be); err != nil { + return retry.SevereError(err) + } + + if be.Status.LastOperation != nil { + if be.Status.LastOperation.State == gardencorev1beta1.LastOperationStateSucceeded { + b.logger.Info("Backup entry has been successfully reconciled.") + return retry.Ok() + } + if be.Status.LastOperation.State == gardencorev1beta1.LastOperationStateError { + b.logger.Info("Backup entry has been reconciled with error.") + return retry.SevereError(errors.New(be.Status.LastError.Description)) + } + } + + b.logger.Info("Waiting until the backup entry has been reconciled in the Garden cluster...") + return retry.MinorError(fmt.Errorf("backup entry %q has not yet been reconciled", be.Name)) + }) +} + +// Destroy is not implemented yet. +func (b *backupEntry) Destroy(_ context.Context) error { return nil } + +// WaitCleanup is not implemented yet. +func (b *backupEntry) WaitCleanup(_ context.Context) error { return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/botanist.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/botanist.go index f8dd9e119..5146da7f5 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/botanist.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/botanist.go @@ -73,6 +73,7 @@ func New(ctx context.Context, o *operation.Operation) (*Botanist, error) { } // extension components + o.Shoot.Components.Extensions.BackupEntry = b.DefaultExtensionsBackupEntry(b.K8sSeedClient.DirectClient()) o.Shoot.Components.Extensions.ContainerRuntime = b.DefaultContainerRuntime(b.K8sSeedClient.DirectClient()) o.Shoot.Components.Extensions.ControlPlane = b.DefaultControlPlane(b.K8sSeedClient.DirectClient(), extensionsv1alpha1.Normal) o.Shoot.Components.Extensions.ControlPlaneExposure = b.DefaultControlPlane(b.K8sSeedClient.DirectClient(), extensionsv1alpha1.Exposure) @@ -131,6 +132,7 @@ func New(ctx context.Context, o *operation.Operation) (*Botanist, error) { } // other components + o.Shoot.Components.BackupEntry = b.DefaultCoreBackupEntry(b.K8sGardenClient.DirectClient()) o.Shoot.Components.ClusterIdentity = clusteridentity.New(o.Shoot.Info.Status.ClusterIdentity, o.GardenClusterIdentity, o.Shoot.Info.Name, o.Shoot.Info.Namespace, o.Shoot.SeedNamespace, string(o.Shoot.Info.Status.UID), b.K8sGardenClient.DirectClient(), b.K8sSeedClient.DirectClient(), b.Logger) return b, nil diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/constraints_check.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/constraints_check.go deleted file mode 100644 index f6a8906b0..000000000 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/constraints_check.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// 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 botanist - -import ( - "context" - "fmt" - - gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" - gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" - "github.com/gardener/gardener/pkg/operation/botanist/matchers" - - admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func shootHibernatedConstraint(condition gardencorev1beta1.Condition) gardencorev1beta1.Condition { - return gardencorev1beta1helper.UpdatedCondition(condition, gardencorev1beta1.ConditionTrue, "ConstraintNotChecked", "Shoot cluster has been hibernated.") -} - -func shootControlPlaneNotRunningConstraint(condition gardencorev1beta1.Condition) gardencorev1beta1.Condition { - return gardencorev1beta1helper.UpdatedCondition(condition, gardencorev1beta1.ConditionFalse, "ConstraintNotChecked", "Shoot control plane is not running at the moment.") -} - -// ConstraintsChecks conducts the constraints checks on all the given constraints. -func (b *Botanist) ConstraintsChecks( - ctx context.Context, - initializeShootClients func() (bool, error), - hibernationPossibleConstraint gardencorev1beta1.Condition, - maintenancePreconditionsSatisfiedConstraint gardencorev1beta1.Condition, -) ( - gardencorev1beta1.Condition, - gardencorev1beta1.Condition, -) { - hibernationPossible, maintenancePreconditionsSatisfied := b.constraintsChecks(ctx, initializeShootClients, hibernationPossibleConstraint, maintenancePreconditionsSatisfiedConstraint) - lastOp := b.Shoot.Info.Status.LastOperation - lastErrors := b.Shoot.Info.Status.LastErrors - return PardonCondition(hibernationPossible, lastOp, lastErrors), - PardonCondition(maintenancePreconditionsSatisfied, lastOp, lastErrors) -} - -func (b *Botanist) constraintsChecks( - ctx context.Context, - initializeShootClients func() (bool, error), - hibernationPossibleConstraint gardencorev1beta1.Condition, - maintenancePreconditionsSatisfiedConstraint gardencorev1beta1.Condition, -) ( - gardencorev1beta1.Condition, - gardencorev1beta1.Condition, -) { - if b.Shoot.HibernationEnabled || b.Shoot.Info.Status.IsHibernated { - return shootHibernatedConstraint(hibernationPossibleConstraint), shootHibernatedConstraint(maintenancePreconditionsSatisfiedConstraint) - } - - apiServerRunning, err := initializeShootClients() - if err != nil { - message := fmt.Sprintf("Could not initialize Shoot client for constraints check: %+v", err) - b.Logger.Error(message) - hibernationPossibleConstraint = gardencorev1beta1helper.UpdatedConditionUnknownErrorMessage(hibernationPossibleConstraint, message) - maintenancePreconditionsSatisfiedConstraint = gardencorev1beta1helper.UpdatedConditionUnknownErrorMessage(maintenancePreconditionsSatisfiedConstraint, message) - - return hibernationPossibleConstraint, maintenancePreconditionsSatisfiedConstraint - } - - if !apiServerRunning { - // don't check constraints if API server has already been deleted or has not been created yet - return shootControlPlaneNotRunningConstraint(hibernationPossibleConstraint), - shootControlPlaneNotRunningConstraint(maintenancePreconditionsSatisfiedConstraint) - } - - var newHibernationConstraint, newMaintenancePreconditionsSatisfiedConstraint *gardencorev1beta1.Condition - - status, reason, message, err := b.CheckForProblematicWebhooks(ctx) - if err == nil { - updatedHibernationCondition := gardencorev1beta1helper.UpdatedCondition(hibernationPossibleConstraint, status, reason, message) - newHibernationConstraint = &updatedHibernationCondition - - updatedMaintenanceCondition := gardencorev1beta1helper.UpdatedCondition(maintenancePreconditionsSatisfiedConstraint, status, reason, message) - newMaintenancePreconditionsSatisfiedConstraint = &updatedMaintenanceCondition - } - - hibernationPossibleConstraint = newConditionOrError(hibernationPossibleConstraint, newHibernationConstraint, err) - maintenancePreconditionsSatisfiedConstraint = newConditionOrError(maintenancePreconditionsSatisfiedConstraint, newMaintenancePreconditionsSatisfiedConstraint, err) - - return hibernationPossibleConstraint, maintenancePreconditionsSatisfiedConstraint -} - -// CheckForProblematicWebhooks checks the Shoot for problematic webhooks which could prevent shoot worker nodes from -// joining the cluster. -func (b *Botanist) CheckForProblematicWebhooks(ctx context.Context) (gardencorev1beta1.ConditionStatus, string, string, error) { - validatingWebhookConfigs := &admissionregistrationv1beta1.ValidatingWebhookConfigurationList{} - if err := b.K8sShootClient.Client().List(ctx, validatingWebhookConfigs); err != nil { - return "", "", "", fmt.Errorf("could not get ValidatingWebhookConfigurations of Shoot cluster to check for problematic webhooks") - } - - for _, webhookConfig := range validatingWebhookConfigs.Items { - for _, w := range webhookConfig.Webhooks { - if IsProblematicWebhook(w.FailurePolicy, w.ObjectSelector, w.NamespaceSelector, w.Rules) { - failurePolicy := "nil" - if w.FailurePolicy != nil { - failurePolicy = string(*w.FailurePolicy) - } - - return gardencorev1beta1.ConditionFalse, - "ProblematicWebhooks", - fmt.Sprintf("ValidatingWebhookConfiguration %q is problematic: webhook %q with failurePolicy %q might prevent worker nodes from properly joining the shoot cluster", - webhookConfig.Name, w.Name, failurePolicy), - nil - } - } - } - - mutatingWebhookConfigs := &admissionregistrationv1beta1.MutatingWebhookConfigurationList{} - if err := b.K8sShootClient.Client().List(ctx, mutatingWebhookConfigs); err != nil { - return "", "", "", fmt.Errorf("could not get MutatingWebhookConfigurations of Shoot cluster to check for problematic webhooks") - } - - for _, webhookConfig := range mutatingWebhookConfigs.Items { - for _, w := range webhookConfig.Webhooks { - if IsProblematicWebhook(w.FailurePolicy, w.ObjectSelector, w.NamespaceSelector, w.Rules) { - failurePolicy := "nil" - if w.FailurePolicy != nil { - failurePolicy = string(*w.FailurePolicy) - } - - return gardencorev1beta1.ConditionFalse, - "ProblematicWebhooks", - fmt.Sprintf("MutatingWebhookConfiguration %q is problematic: webhook %q with failurePolicy %q might prevent worker nodes from properly joining the shoot cluster", - webhookConfig.Name, w.Name, failurePolicy), - nil - } - } - } - - return gardencorev1beta1.ConditionTrue, - "NoProblematicWebhooks", - "All webhooks are properly configured.", - nil -} - -// IsProblematicWebhook checks if a single webhook of the Shoot Cluster is problematic. Problematic webhooks are -// webhooks with rules for CREATE/UPDATE/* pods or nodes and failurePolicy=Fail/nil. If the Shoot contains such a -// webhook, we can never wake up this shoot cluster again as new nodes cannot get created/ready, or our system -// component pods cannot get created/ready (because the webhook's backing pod is not yet running). -func IsProblematicWebhook( - failurePolicy *admissionregistrationv1beta1.FailurePolicyType, - objSelector *metav1.LabelSelector, - nsSelector *metav1.LabelSelector, - rules []admissionregistrationv1beta1.RuleWithOperations, -) bool { - if failurePolicy != nil && *failurePolicy != admissionregistrationv1beta1.Fail { - // in admissionregistration.k8s.io/v1 FailurePolicy is defaulted to `Fail` - // see https://github.com/kubernetes/api/blob/release-1.16/admissionregistration/v1/types.go#L195 - // and https://github.com/kubernetes/api/blob/release-1.16/admissionregistration/v1/types.go#L324 - // therefore, webhook with FailurePolicy==nil is also considered problematic - return false - } - - for _, rule := range rules { - for _, matcher := range matchers.WebhookConstraintMatchers { - if matcher.Match(rule, objSelector, nsSelector) { - return true - } - } - } - - return false -} diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane.go index 9c47da6c6..1f20acc84 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane.go @@ -21,6 +21,8 @@ import ( "strconv" "time" + "github.com/gardener/gardener/pkg/utils/kubernetes/health" + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" @@ -38,7 +40,6 @@ import ( "github.com/gardener/gardener/pkg/operation/shoot" "github.com/gardener/gardener/pkg/utils" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" - "github.com/gardener/gardener/pkg/utils/retry" "github.com/gardener/gardener/pkg/utils/version" hvpav1alpha1 "github.com/gardener/hvpa-controller/api/v1alpha1" @@ -60,7 +61,6 @@ import ( auditvalidation "k8s.io/apiserver/pkg/apis/audit/validation" autoscalingv1beta2 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1beta2" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) var chartPathControlPlane = filepath.Join(common.ChartPath, "seed-controlplane", "charts") @@ -412,56 +412,15 @@ func (b *Botanist) DeployGardenerResourceManager(ctx context.Context) error { return err } - return b.K8sSeedClient.ChartApplier().Apply(ctx, filepath.Join(common.ChartPath, "seed-controlplane", "charts", name), b.Shoot.SeedNamespace, name, kubernetes.Values(values)) -} - -// DeployBackupEntryInGarden deploys the BackupEntry resource in garden. -func (b *Botanist) DeployBackupEntryInGarden(ctx context.Context) error { - var ( - name = common.GenerateBackupEntryName(b.Shoot.Info.Status.TechnicalID, b.Shoot.Info.Status.UID) - backupEntry = &gardencorev1beta1.BackupEntry{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: b.Shoot.Info.Namespace, - }, - } - bucketName string - seedName *string - ) - - if err := b.K8sGardenClient.Client().Get(ctx, kutil.Key(b.Shoot.Info.Namespace, name), backupEntry); err != nil { - if !apierrors.IsNotFound(err) { - return err - } - - // If backupEntry doesn't already exists, we have to assign backupBucket to backupEntry. - bucketName = string(b.Seed.Info.UID) - seedName = &b.Seed.Info.Name - } else if b.isRestorePhase() { - bucketName = backupEntry.Spec.BucketName - seedName = &b.Seed.Info.Name - } else { - bucketName = backupEntry.Spec.BucketName - seedName = backupEntry.Spec.SeedName + // TODO (ialidzhikov): remove in a future version + deploymentKeys := []client.ObjectKey{ + kutil.Key(b.Shoot.SeedNamespace, name), + } + if err := common.DeleteDeploymentsHavingDeprecatedRoleLabelKey(ctx, b.K8sSeedClient.Client(), deploymentKeys); err != nil { + return err } - ownerRef := metav1.NewControllerRef(b.Shoot.Info, gardencorev1beta1.SchemeGroupVersion.WithKind("Shoot")) - blockOwnerDeletion := false - ownerRef.BlockOwnerDeletion = &blockOwnerDeletion - - _, err := controllerutil.CreateOrUpdate(ctx, b.K8sGardenClient.Client(), backupEntry, func() error { - metav1.SetMetaDataAnnotation(&backupEntry.ObjectMeta, v1beta1constants.GardenerOperation, v1beta1constants.GardenerOperationReconcile) - metav1.SetMetaDataAnnotation(&backupEntry.ObjectMeta, v1beta1constants.GardenerTimestamp, time.Now().UTC().String()) - - finalizers := sets.NewString(backupEntry.GetFinalizers()...) - finalizers.Insert(gardencorev1beta1.GardenerName) - backupEntry.SetFinalizers(finalizers.UnsortedList()) - backupEntry.ObjectMeta.OwnerReferences = []metav1.OwnerReference{*ownerRef} - backupEntry.Spec.BucketName = bucketName - backupEntry.Spec.SeedName = seedName - return nil - }) - return err + return b.K8sSeedClient.ChartApplier().Apply(ctx, filepath.Join(common.ChartPath, "seed-controlplane", "charts", name), b.Shoot.SeedNamespace, name, kubernetes.Values(values)) } const ( @@ -882,7 +841,7 @@ func (b *Botanist) DeployKubeAPIServer(ctx context.Context) error { // If HVPA feature gate is enabled then we should delete the old HPA and VPA resources as // the HVPA controller will create its own for the kube-apiserver deployment. if hvpaEnabled { - objects := []runtime.Object{ + objects := []client.Object{ // TODO: Use autoscaling/v2beta2 for Kubernetes 1.19+ shoots once kubernetes-v1.19 golang dependencies were vendored. &autoscalingv2beta1.HorizontalPodAutoscaler{ ObjectMeta: metav1.ObjectMeta{ @@ -1141,30 +1100,7 @@ func (b *Botanist) setAPIServerAddress(address string, seedClient client.Client) // CheckTunnelConnection checks if the tunnel connection between the control plane and the shoot networks // is established. func (b *Botanist) CheckTunnelConnection(ctx context.Context, logger *logrus.Entry, tunnelName string) (bool, error) { - podList := &corev1.PodList{} - if err := b.K8sShootClient.Client().List(ctx, podList, client.InNamespace(metav1.NamespaceSystem), client.MatchingLabels{"app": tunnelName}); err != nil { - return retry.SevereError(err) - } - - var tunnelPod *corev1.Pod - for _, pod := range podList.Items { - if pod.Status.Phase == corev1.PodRunning { - tunnelPod = &pod - break - } - } - - if tunnelPod == nil { - logger.Infof("Waiting until a running %s pod exists in the Shoot cluster...", tunnelName) - return retry.MinorError(fmt.Errorf("no running %s pod found yet in the shoot cluster", tunnelName)) - } - if err := b.K8sShootClient.CheckForwardPodPort(tunnelPod.Namespace, tunnelPod.Name, 0, 22); err != nil { - logger.Info("Waiting until the tunnel connection has been established...") - return retry.MinorError(fmt.Errorf("could not forward to %s pod: %v", tunnelName, err)) - } - - logger.Info("Tunnel connection has been established.") - return retry.Ok() + return health.CheckTunnelConnection(ctx, b.K8sShootClient, logger, tunnelName) } // RestartControlPlanePods restarts (deletes) pods of the shoot control plane. diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/clusterautoscaler/cluster_autoscaler.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/clusterautoscaler/cluster_autoscaler.go index 9597a9a41..d0966ea1f 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/clusterautoscaler/cluster_autoscaler.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/clusterautoscaler/cluster_autoscaler.go @@ -169,7 +169,7 @@ func (c *clusterAutoscaler) Deploy(ctx context.Context) error { v1beta1constants.GardenRole: v1beta1constants.GardenRoleControlPlane, }) deployment.Spec.Replicas = &c.replicas - deployment.Spec.RevisionHistoryLimit = pointer.Int32Ptr(0) + deployment.Spec.RevisionHistoryLimit = pointer.Int32Ptr(1) deployment.Spec.Selector = &metav1.LabelSelector{MatchLabels: getLabels()} deployment.Spec.Template = corev1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ @@ -177,6 +177,7 @@ func (c *clusterAutoscaler) Deploy(ctx context.Context) error { "checksum/secret-" + c.secrets.Kubeconfig.Name: c.secrets.Kubeconfig.Checksum, }, Labels: utils.MergeStringMaps(getLabels(), map[string]string{ + v1beta1constants.GardenRole: v1beta1constants.GardenRoleControlPlane, v1beta1constants.DeprecatedGardenRole: v1beta1constants.GardenRoleControlPlane, v1beta1constants.LabelNetworkPolicyToDNS: v1beta1constants.LabelNetworkPolicyAllowed, v1beta1constants.LabelNetworkPolicyToShootAPIServer: v1beta1constants.LabelNetworkPolicyAllowed, diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/bootstrap.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/bootstrap.go index c829e3782..c5dda4547 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/bootstrap.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/bootstrap.go @@ -209,7 +209,7 @@ func (b *bootstrapper) Deploy(ctx context.Context) error { }, Spec: appsv1.DeploymentSpec{ Replicas: pointer.Int32Ptr(1), - RevisionHistoryLimit: pointer.Int32Ptr(0), + RevisionHistoryLimit: pointer.Int32Ptr(1), Selector: &metav1.LabelSelector{ MatchLabels: labels(), }, diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/etcd.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/etcd.go index 81a648e9e..bf96a1ef9 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/etcd.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/etcd.go @@ -223,7 +223,7 @@ func (e *etcd) Deploy(ctx context.Context) error { v1beta1constants.GardenerDescription: "Allows Ingress to etcd pods from the Shoot's Kubernetes API Server.", } networkPolicy.Labels = map[string]string{ - v1beta1constants.DeprecatedGardenRole: v1beta1constants.GardenRoleControlPlane, + v1beta1constants.GardenRole: v1beta1constants.GardenRoleControlPlane, } networkPolicy.Spec.PodSelector = metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -525,7 +525,7 @@ func (e *etcd) getExistingStatefulSet(ctx context.Context, name string) (*appsv1 return nil, found, err } -func (e *etcd) getExistingResource(ctx context.Context, name string, obj runtime.Object) (runtime.Object, bool, error) { +func (e *etcd) getExistingResource(ctx context.Context, name string, obj client.Object) (runtime.Object, bool, error) { if err := e.client.Get(ctx, kutil.Key(e.namespace, name), obj); err != nil { if !apierrors.IsNotFound(err) { return nil, false, err diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/logging.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/logging.go index e8a2e7cdd..fcb8b08e8 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/logging.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/controlplane/etcd/logging.go @@ -34,7 +34,7 @@ const ( Format regex Regex ^time="(?