From a08556fe1461d83388c31e5d1fc829b67441ccdb Mon Sep 17 00:00:00 2001 From: Guillermo Gaston Date: Wed, 16 Nov 2022 19:40:35 +0000 Subject: [PATCH] Improve controller manager logs This now makes use of the tooling provided by upstream controller-runtime and component-base/logs. As a consequence, the manager now takes a standard set of flags to configure logging. The default logging format is configured to json, it's the direction upstream is going duwe to its tooling support. For tilt, using text for now until we provide better tooling to analyze the logs. Instead of injecting a logger in the reconciler on construction, we now use contextual logging. The benefit here is controller-runtime will inject a default set of values that uniquely identify the reconcile request. --- config/tilt/kustomization.yaml | 9 + controllers/cluster_controller.go | 29 ++- controllers/cluster_controller_test.go | 13 +- controllers/cluster_controller_test_test.go | 10 +- controllers/docker_datacenter_controller.go | 5 +- controllers/factory.go | 4 - controllers/resource/fetcher_test.go | 10 +- controllers/resource/mocks/reader.go | 13 +- controllers/snow_machineconfig_controller.go | 9 +- .../snow_machineconfig_controller_test.go | 15 +- controllers/vsphere_datacenter_controller.go | 8 +- go.mod | 40 ++-- go.sum | 85 +++---- manager/Tiltfile | 4 +- manager/main.go | 217 +++++++++++------- 15 files changed, 261 insertions(+), 210 deletions(-) diff --git a/config/tilt/kustomization.yaml b/config/tilt/kustomization.yaml index 0fffc0e7a6862..4524b5cb9738d 100644 --- a/config/tilt/kustomization.yaml +++ b/config/tilt/kustomization.yaml @@ -6,3 +6,12 @@ resources: images: - name: controller newName: eks-a-controller-manager + +patches: +- patch: |- + - op: add + path: /spec/template/spec/containers/0/args/- + value: --logging-format=text + target: + kind: Deployment + name: eksa-controller-manager diff --git a/controllers/cluster_controller.go b/controllers/cluster_controller.go index e041bfb0cb55a..e96bf8bdc51c9 100644 --- a/controllers/cluster_controller.go +++ b/controllers/cluster_controller.go @@ -35,7 +35,6 @@ const ( // ClusterReconciler reconciles a Cluster object. type ClusterReconciler struct { client client.Client - log logr.Logger providerReconcilerRegistry ProviderClusterReconcilerRegistry } @@ -43,17 +42,17 @@ type ProviderClusterReconcilerRegistry interface { Get(datacenterKind string) clusters.ProviderClusterReconciler } -func NewClusterReconciler(client client.Client, log logr.Logger, registry ProviderClusterReconcilerRegistry) *ClusterReconciler { +// NewClusterReconciler constructs a new ClusterReconciler. +func NewClusterReconciler(client client.Client, registry ProviderClusterReconcilerRegistry) *ClusterReconciler { return &ClusterReconciler{ client: client, - log: log, providerReconcilerRegistry: registry, } } // SetupWithManager sets up the controller with the Manager. -func (r *ClusterReconciler) SetupWithManager(mgr ctrl.Manager) error { - childObjectHandler := handlers.ChildObjectToClusters(r.log) +func (r *ClusterReconciler) SetupWithManager(mgr ctrl.Manager, log logr.Logger) error { + childObjectHandler := handlers.ChildObjectToClusters(log) return ctrl.NewControllerManagedBy(mgr). For(&anywherev1.Cluster{}). @@ -104,10 +103,10 @@ func (r *ClusterReconciler) SetupWithManager(mgr ctrl.Manager) error { // +kubebuilder:rbac:groups=distro.eks.amazonaws.com,resources=releases,verbs=get;list;watch // +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=awssnowclusters;awssnowmachinetemplates;vsphereclusters;vspheremachinetemplates,verbs=get;list;watch;create;update;patch;delete func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Result, reterr error) { - log := r.log.WithValues("cluster", req.NamespacedName) + log := ctrl.LoggerFrom(ctx) // Fetch the Cluster object cluster := &anywherev1.Cluster{} - log.Info("Reconciling cluster", "name", req.NamespacedName) + log.Info("Reconciling cluster") if err := r.client.Get(ctx, req.NamespacedName, cluster); err != nil { if apierrors.IsNotFound(err) { return reconcile.Result{}, nil @@ -133,7 +132,7 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ controllerutil.AddFinalizer(cluster, clusterFinalizerName) } } else { - return r.reconcileDelete(ctx, cluster) + return r.reconcileDelete(ctx, log, cluster) } // If the cluster is paused, return without any further processing. @@ -152,10 +151,10 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ return ctrl.Result{}, err } - return r.reconcile(ctx, cluster, log) + return r.reconcile(ctx, log, cluster) } -func (r *ClusterReconciler) reconcile(ctx context.Context, cluster *anywherev1.Cluster, log logr.Logger) (ctrl.Result, error) { +func (r *ClusterReconciler) reconcile(ctx context.Context, log logr.Logger, cluster *anywherev1.Cluster) (ctrl.Result, error) { clusterProviderReconciler := r.providerReconcilerRegistry.Get(cluster.Spec.DatacenterRef.Kind) var reconcileResult controller.Result @@ -173,26 +172,26 @@ func (r *ClusterReconciler) reconcile(ctx context.Context, cluster *anywherev1.C return reconcileResult.ToCtrlResult(), nil } -func (r *ClusterReconciler) reconcileDelete(ctx context.Context, cluster *anywherev1.Cluster) (ctrl.Result, error) { +func (r *ClusterReconciler) reconcileDelete(ctx context.Context, log logr.Logger, cluster *anywherev1.Cluster) (ctrl.Result, error) { if cluster.IsSelfManaged() { return ctrl.Result{}, errors.New("deleting self-managed clusters is not supported") } capiCluster := &clusterv1.Cluster{} capiClusterName := types.NamespacedName{Namespace: constants.EksaSystemNamespace, Name: cluster.Name} - r.log.Info("Deleting", "name", cluster.Name) + log.Info("Deleting", "name", cluster.Name) err := r.client.Get(ctx, capiClusterName, capiCluster) switch { case err == nil: - r.log.Info("Deleting CAPI cluster", "name", capiCluster.Name) + log.Info("Deleting CAPI cluster", "name", capiCluster.Name) if err := r.client.Delete(ctx, capiCluster); err != nil { - r.log.Info("Error deleting CAPI cluster", "name", capiCluster.Name) + log.Info("Error deleting CAPI cluster", "name", capiCluster.Name) return ctrl.Result{}, err } return ctrl.Result{RequeueAfter: defaultRequeueTime}, nil case apierrors.IsNotFound(err): - r.log.Info("Deleting EKS Anywhere cluster", "name", capiCluster.Name, "cluster.DeletionTimestamp", cluster.DeletionTimestamp, "finalizer", cluster.Finalizers) + log.Info("Deleting EKS Anywhere cluster", "name", capiCluster.Name, "cluster.DeletionTimestamp", cluster.DeletionTimestamp, "finalizer", cluster.Finalizers) // TODO delete GitOps,Datacenter and MachineConfig objects controllerutil.RemoveFinalizer(cluster, clusterFinalizerName) diff --git a/controllers/cluster_controller_test.go b/controllers/cluster_controller_test.go index 394522afd3d5b..59d202aa6c768 100644 --- a/controllers/cluster_controller_test.go +++ b/controllers/cluster_controller_test.go @@ -6,6 +6,7 @@ import ( "testing" "time" + "github.com/go-logr/logr" "github.com/golang/mock/gomock" . "github.com/onsi/gomega" apiv1 "k8s.io/api/core/v1" @@ -17,11 +18,9 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - logf "sigs.k8s.io/controller-runtime/pkg/log" "github.com/aws/eks-anywhere/controllers" "github.com/aws/eks-anywhere/controllers/mocks" - "github.com/aws/eks-anywhere/internal/test" _ "github.com/aws/eks-anywhere/internal/test/envtest" anywherev1 "github.com/aws/eks-anywhere/pkg/api/v1alpha1" "github.com/aws/eks-anywhere/pkg/controller/clusters" @@ -69,7 +68,7 @@ func newVsphereClusterReconcilerTest(t *testing.T, objs ...runtime.Object) *vsph Add(anywherev1.VSphereDatacenterKind, reconciler). Build() - r := controllers.NewClusterReconciler(cl, logf.Log, ®istry) + r := controllers.NewClusterReconciler(cl, ®istry) return &vsphereClusterReconcilerTest{ govcClient: govcClient, @@ -93,15 +92,14 @@ func TestClusterReconcilerReconcileSelfManagedCluster(t *testing.T) { }, } - log := test.NewNullLogger() controller := gomock.NewController(t) providerReconciler := mocks.NewMockProviderClusterReconciler(controller) registry := newRegistryMock(providerReconciler) c := fake.NewClientBuilder().WithRuntimeObjects(selfManagedCluster).Build() - providerReconciler.EXPECT().ReconcileWorkerNodes(ctx, log, sameName(selfManagedCluster)) + providerReconciler.EXPECT().ReconcileWorkerNodes(ctx, gomock.AssignableToTypeOf(logr.Logger{}), sameName(selfManagedCluster)) - r := controllers.NewClusterReconciler(c, log, registry) + r := controllers.NewClusterReconciler(c, registry) result, err := r.Reconcile(ctx, clusterRequest(selfManagedCluster)) g.Expect(err).ToNot(HaveOccurred()) g.Expect(result).To(Equal(ctrl.Result{})) @@ -124,13 +122,12 @@ func TestClusterReconcilerReconcileDeletedSelfManagedCluster(t *testing.T) { }, } - log := test.NewNullLogger() controller := gomock.NewController(t) providerReconciler := mocks.NewMockProviderClusterReconciler(controller) registry := newRegistryMock(providerReconciler) c := fake.NewClientBuilder().WithRuntimeObjects(selfManagedCluster).Build() - r := controllers.NewClusterReconciler(c, log, registry) + r := controllers.NewClusterReconciler(c, registry) _, err := r.Reconcile(ctx, clusterRequest(selfManagedCluster)) g.Expect(err).To(MatchError(ContainSubstring("deleting self-managed clusters is not supported"))) } diff --git a/controllers/cluster_controller_test_test.go b/controllers/cluster_controller_test_test.go index 0f1ae1939891f..c080dafcbfedc 100644 --- a/controllers/cluster_controller_test_test.go +++ b/controllers/cluster_controller_test_test.go @@ -72,7 +72,7 @@ func TestClusterReconcilerEnsureOwnerReferences(t *testing.T) { cb := fake.NewClientBuilder() cl := cb.WithRuntimeObjects(objs...).Build() - r := controllers.NewClusterReconciler(cl, nullLog(), newRegistryForDummyProviderReconciler()) + r := controllers.NewClusterReconciler(cl, newRegistryForDummyProviderReconciler()) _, err := r.Reconcile(ctx, clusterRequest(cluster)) g.Expect(err).NotTo(HaveOccurred()) @@ -89,10 +89,10 @@ func TestClusterReconcilerEnsureOwnerReferences(t *testing.T) { func TestClusterReconcilerSetupWithManager(t *testing.T) { client := env.Client() - r := controllers.NewClusterReconciler(client, logf.Log, newRegistryForDummyProviderReconciler()) + r := controllers.NewClusterReconciler(client, newRegistryForDummyProviderReconciler()) g := NewWithT(t) - g.Expect(r.SetupWithManager(env.Manager())).To(Succeed()) + g.Expect(r.SetupWithManager(env.Manager(), env.Manager().GetLogger())).To(Succeed()) } func TestClusterReconcilerManagementClusterNotFound(t *testing.T) { @@ -117,7 +117,7 @@ func TestClusterReconcilerManagementClusterNotFound(t *testing.T) { cb := fake.NewClientBuilder() cl := cb.WithRuntimeObjects(objs...).Build() - r := controllers.NewClusterReconciler(cl, nullLog(), newRegistryForDummyProviderReconciler()) + r := controllers.NewClusterReconciler(cl, newRegistryForDummyProviderReconciler()) _, err := r.Reconcile(ctx, clusterRequest(cluster)) g.Expect(err).To(MatchError(ContainSubstring("\"my-management-cluster\" not found"))) } @@ -151,7 +151,7 @@ func TestClusterReconcilerSetBundlesRef(t *testing.T) { mgmtCluster := &anywherev1.Cluster{} g.Expect(cl.Get(ctx, client.ObjectKey{Namespace: cluster.Namespace, Name: managementCluster.Name}, mgmtCluster)).To(Succeed()) - r := controllers.NewClusterReconciler(cl, nullLog(), newRegistryForDummyProviderReconciler()) + r := controllers.NewClusterReconciler(cl, newRegistryForDummyProviderReconciler()) _, err := r.Reconcile(ctx, clusterRequest(cluster)) g.Expect(err).ToNot(HaveOccurred()) diff --git a/controllers/docker_datacenter_controller.go b/controllers/docker_datacenter_controller.go index 548d8174f4919..1c1ca3ed9ec4a 100644 --- a/controllers/docker_datacenter_controller.go +++ b/controllers/docker_datacenter_controller.go @@ -1,20 +1,17 @@ package controllers import ( - "github.com/go-logr/logr" "sigs.k8s.io/controller-runtime/pkg/client" ) // DockerDatacenterReconciler reconciles a DockerDatacenterConfig object. type DockerDatacenterReconciler struct { - log logr.Logger client client.Client } // NewDockerDatacenterReconciler creates a new instance of the DockerDatacenterReconciler struct. -func NewDockerDatacenterReconciler(client client.Client, log logr.Logger) *DockerDatacenterReconciler { +func NewDockerDatacenterReconciler(client client.Client) *DockerDatacenterReconciler { return &DockerDatacenterReconciler{ client: client, - log: log, } } diff --git a/controllers/factory.go b/controllers/factory.go index dee2724d391b2..edebe3fa0cf69 100644 --- a/controllers/factory.go +++ b/controllers/factory.go @@ -86,7 +86,6 @@ func (f *Factory) WithClusterReconciler(capiProviders []clusterctlv1.Provider) * f.reconcilers.ClusterReconciler = NewClusterReconciler( f.manager.GetClient(), - f.logger, f.registry, ) @@ -104,7 +103,6 @@ func (f *Factory) WithDockerDatacenterReconciler() *Factory { f.reconcilers.DockerDatacenterReconciler = NewDockerDatacenterReconciler( f.manager.GetClient(), - f.logger, ) return nil @@ -122,7 +120,6 @@ func (f *Factory) WithVSphereDatacenterReconciler() *Factory { f.reconcilers.VSphereDatacenterReconciler = NewVSphereDatacenterReconciler( f.manager.GetClient(), - f.logger, f.deps.VSphereValidator, f.deps.VSphereDefaulter, ) @@ -141,7 +138,6 @@ func (f *Factory) WithSnowMachineConfigReconciler() *Factory { client := f.manager.GetClient() f.reconcilers.SnowMachineConfigReconciler = NewSnowMachineConfigReconciler( client, - f.logger, snow.NewValidator(snowreconciler.NewAwsClientBuilder(client)), ) return nil diff --git a/controllers/resource/fetcher_test.go b/controllers/resource/fetcher_test.go index 03ec8f27c181b..3fe01e6b521b3 100644 --- a/controllers/resource/fetcher_test.go +++ b/controllers/resource/fetcher_test.go @@ -534,7 +534,7 @@ func TestFetchCloudStackCluster(t *testing.T) { logger := logr.Discard() capiResourceFetcher := resource.NewCAPIResourceFetcher(reader, logger) reader.EXPECT().Get(ctx, types.NamespacedName{Namespace: constants.EksaSystemNamespace, Name: tt.cluster.Name}, gomock.Any()).Do( - func(ctx context.Context, arg1 types.NamespacedName, arg2 *cloudstackv1.CloudStackCluster) { + func(ctx context.Context, arg1 types.NamespacedName, arg2 *cloudstackv1.CloudStackCluster, _ ...client.GetOption) { cloudstackCluster.DeepCopyInto(arg2) }) _, err := capiResourceFetcher.CloudStackCluster(ctx, tt.cluster, anywherev1.WorkerNodeGroupConfiguration{Name: "test"}) @@ -567,7 +567,7 @@ func TestFetchCloudStackEtcdMachineTemplate(t *testing.T) { logger := logr.Discard() capiResourceFetcher := resource.NewCAPIResourceFetcher(reader, logger) reader.EXPECT().Get(ctx, types.NamespacedName{Namespace: constants.EksaSystemNamespace, Name: "testCluster-etcd"}, gomock.Any()).Do( - func(ctx context.Context, arg1 types.NamespacedName, arg2 *etcdv1.EtcdadmCluster) { + func(ctx context.Context, arg1 types.NamespacedName, arg2 *etcdv1.EtcdadmCluster, _ ...client.GetOption) { etcdadmCluster.DeepCopyInto(arg2) }) reader.EXPECT().Get(ctx, types.NamespacedName{Namespace: constants.EksaSystemNamespace, Name: etcdadmCluster.Spec.InfrastructureTemplate.Name}, @@ -602,11 +602,11 @@ func TestFetchCloudStackCPMachineTemplate(t *testing.T) { logger := logr.Discard() capiResourceFetcher := resource.NewCAPIResourceFetcher(reader, logger) reader.EXPECT().Get(ctx, types.NamespacedName{Namespace: constants.EksaSystemNamespace, Name: tt.cluster.Name}, gomock.Any()).Do( - func(ctx context.Context, arg1 types.NamespacedName, arg2 *clusterv1.Cluster) { + func(ctx context.Context, arg1 types.NamespacedName, arg2 *clusterv1.Cluster, _ ...client.GetOption) { capiCluster.DeepCopyInto(arg2) }) reader.EXPECT().Get(ctx, types.NamespacedName{Namespace: capiCluster.Spec.ControlPlaneRef.Namespace, Name: capiCluster.Spec.ControlPlaneRef.Name}, gomock.Any()).Do( - func(ctx context.Context, arg1 types.NamespacedName, arg2 *controlplanev1.KubeadmControlPlane) { + func(ctx context.Context, arg1 types.NamespacedName, arg2 *controlplanev1.KubeadmControlPlane, _ ...client.GetOption) { kubeadmControlPlane.DeepCopyInto(arg2) }) reader.EXPECT().Get(ctx, types.NamespacedName{Namespace: constants.EksaSystemNamespace, Name: kubeadmControlPlane.Spec.MachineTemplate.InfrastructureRef.Name}, @@ -851,7 +851,7 @@ type stubbedReader struct { clusterName string } -func (s *stubbedReader) Get(ctx context.Context, key client.ObjectKey, obj client.Object) error { +func (s *stubbedReader) Get(ctx context.Context, key client.ObjectKey, obj client.Object, _ ...client.GetOption) error { if s.kind == obj.GetObjectKind().GroupVersionKind().Kind { return nil } diff --git a/controllers/resource/mocks/reader.go b/controllers/resource/mocks/reader.go index 50911bf137665..82f7d4965a293 100644 --- a/controllers/resource/mocks/reader.go +++ b/controllers/resource/mocks/reader.go @@ -37,17 +37,22 @@ func (m *MockReader) EXPECT() *MockReaderMockRecorder { } // Get mocks base method. -func (m *MockReader) Get(arg0 context.Context, arg1 types.NamespacedName, arg2 client.Object) error { +func (m *MockReader) Get(arg0 context.Context, arg1 types.NamespacedName, arg2 client.Object, arg3 ...client.GetOption) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Get", arg0, arg1, arg2) + varargs := []interface{}{arg0, arg1, arg2} + for _, a := range arg3 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Get", varargs...) ret0, _ := ret[0].(error) return ret0 } // Get indicates an expected call of Get. -func (mr *MockReaderMockRecorder) Get(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockReaderMockRecorder) Get(arg0, arg1, arg2 interface{}, arg3 ...interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockReader)(nil).Get), arg0, arg1, arg2) + varargs := append([]interface{}{arg0, arg1, arg2}, arg3...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockReader)(nil).Get), varargs...) } // List mocks base method. diff --git a/controllers/snow_machineconfig_controller.go b/controllers/snow_machineconfig_controller.go index 8745ac91308c0..372ea1cfa36e6 100644 --- a/controllers/snow_machineconfig_controller.go +++ b/controllers/snow_machineconfig_controller.go @@ -4,7 +4,6 @@ import ( "context" "fmt" - "github.com/go-logr/logr" kerrors "k8s.io/apimachinery/pkg/util/errors" "sigs.k8s.io/cluster-api/util/patch" ctrl "sigs.k8s.io/controller-runtime" @@ -21,14 +20,13 @@ type Validator interface { // SnowMachineConfigReconciler reconciles a SnowMachineConfig object. type SnowMachineConfigReconciler struct { client client.Client - log logr.Logger validator Validator } -func NewSnowMachineConfigReconciler(client client.Client, log logr.Logger, validator Validator) *SnowMachineConfigReconciler { +// NewSnowMachineConfigReconciler constructs a new SnowMachineConfigReconciler. +func NewSnowMachineConfigReconciler(client client.Client, validator Validator) *SnowMachineConfigReconciler { return &SnowMachineConfigReconciler{ client: client, - log: log, validator: validator, } } @@ -41,8 +39,9 @@ func (r *SnowMachineConfigReconciler) SetupWithManager(mgr ctrl.Manager) error { } // TODO: add here kubebuilder permissions as needed. +// Reconcile implements the reconcile.Reconciler interface. func (r *SnowMachineConfigReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Result, reterr error) { - log := r.log.WithValues("snowMachineConfig", req.NamespacedName) + log := ctrl.LoggerFrom(ctx) // Fetch the SnowMachineConfig object snowMachineConfig := &anywherev1.SnowMachineConfig{} diff --git a/controllers/snow_machineconfig_controller_test.go b/controllers/snow_machineconfig_controller_test.go index 5e473a6cf6de0..285ffc7130e1f 100644 --- a/controllers/snow_machineconfig_controller_test.go +++ b/controllers/snow_machineconfig_controller_test.go @@ -14,7 +14,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client/fake" - logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/reconcile" "github.com/aws/eks-anywhere/controllers" @@ -29,7 +28,7 @@ var ( func TestSnowMachineConfigReconcilerSetupWithManager(t *testing.T) { client := env.Client() - r := controllers.NewSnowMachineConfigReconciler(client, logf.Log, nil) + r := controllers.NewSnowMachineConfigReconciler(client, nil) g := NewWithT(t) g.Expect(r.SetupWithManager(env.Manager())).To(Succeed()) @@ -50,7 +49,7 @@ func TestSnowMachineConfigReconcilerSuccess(t *testing.T) { cb := fake.NewClientBuilder() cl := cb.WithRuntimeObjects(objs...).Build() - r := controllers.NewSnowMachineConfigReconciler(cl, logf.Log, validator) + r := controllers.NewSnowMachineConfigReconciler(cl, validator) req := reconcile.Request{ NamespacedName: types.NamespacedName{ @@ -88,7 +87,7 @@ func TestSnowMachineConfigReconcilerFailureIncorrectObject(t *testing.T) { cb := fake.NewClientBuilder() cl := cb.WithRuntimeObjects(objs...).Build() - r := controllers.NewSnowMachineConfigReconciler(cl, logf.Log, nil) + r := controllers.NewSnowMachineConfigReconciler(cl, nil) req := reconcile.Request{ NamespacedName: types.NamespacedName{ @@ -113,7 +112,7 @@ func TestSnowMachineConfigReconcilerDelete(t *testing.T) { cb := fake.NewClientBuilder() cl := cb.WithRuntimeObjects(objs...).Build() - r := controllers.NewSnowMachineConfigReconciler(cl, logf.Log, nil) + r := controllers.NewSnowMachineConfigReconciler(cl, nil) req := reconcile.Request{ NamespacedName: types.NamespacedName{ @@ -141,7 +140,7 @@ func TestSnowMachineConfigReconcilerFailureImageExists(t *testing.T) { cb := fake.NewClientBuilder() cl := cb.WithRuntimeObjects(objs...).Build() - r := controllers.NewSnowMachineConfigReconciler(cl, logf.Log, validator) + r := controllers.NewSnowMachineConfigReconciler(cl, validator) req := reconcile.Request{ NamespacedName: types.NamespacedName{ @@ -174,7 +173,7 @@ func TestSnowMachineConfigReconcilerFailureKeyNameExists(t *testing.T) { cb := fake.NewClientBuilder() cl := cb.WithRuntimeObjects(objs...).Build() - r := controllers.NewSnowMachineConfigReconciler(cl, logf.Log, validator) + r := controllers.NewSnowMachineConfigReconciler(cl, validator) req := reconcile.Request{ NamespacedName: types.NamespacedName{ @@ -209,7 +208,7 @@ func TestSnowMachineConfigReconcilerFailureAggregate(t *testing.T) { cb := fake.NewClientBuilder() cl := cb.WithRuntimeObjects(objs...).Build() - r := controllers.NewSnowMachineConfigReconciler(cl, logf.Log, validator) + r := controllers.NewSnowMachineConfigReconciler(cl, validator) req := reconcile.Request{ NamespacedName: types.NamespacedName{ diff --git a/controllers/vsphere_datacenter_controller.go b/controllers/vsphere_datacenter_controller.go index 058abc8fce1ab..9448ed1a9ccd8 100644 --- a/controllers/vsphere_datacenter_controller.go +++ b/controllers/vsphere_datacenter_controller.go @@ -17,18 +17,17 @@ import ( // VSphereDatacenterReconciler reconciles a VSphereDatacenterConfig object. type VSphereDatacenterReconciler struct { - log logr.Logger client client.Client defaulter *vsphere.Defaulter validator *vsphere.Validator } -func NewVSphereDatacenterReconciler(client client.Client, log logr.Logger, validator *vsphere.Validator, defaulter *vsphere.Defaulter) *VSphereDatacenterReconciler { +// NewVSphereDatacenterReconciler constructs a new VSphereDatacenterReconciler. +func NewVSphereDatacenterReconciler(client client.Client, validator *vsphere.Validator, defaulter *vsphere.Defaulter) *VSphereDatacenterReconciler { return &VSphereDatacenterReconciler{ client: client, validator: validator, defaulter: defaulter, - log: log, } } @@ -40,8 +39,9 @@ func (r *VSphereDatacenterReconciler) SetupWithManager(mgr ctrl.Manager) error { } // TODO: add here kubebuilder permissions as neeeded. +// Reconcile implements the reconcile.Reconciler interface. func (r *VSphereDatacenterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Result, reterr error) { - log := r.log.WithValues("vsphereDatacenter", req.NamespacedName) + log := ctrl.LoggerFrom(ctx) // Fetch the VsphereDatacenter object vsphereDatacenter := &anywherev1.VSphereDatacenterConfig{} diff --git a/go.mod b/go.mod index 34b8e66e3dd23..cebab784dcb2d 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/google/uuid v1.3.0 github.com/mrajashree/etcdadm-controller v1.0.0-rc3 github.com/nutanix-cloud-native/prism-go-client v0.3.0 - github.com/onsi/gomega v1.19.0 + github.com/onsi/gomega v1.20.1 github.com/pkg/errors v0.9.1 github.com/spf13/cobra v1.5.0 github.com/spf13/pflag v1.0.5 @@ -42,16 +42,16 @@ require ( gopkg.in/square/go-jose.v2 v2.6.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 - k8s.io/api v0.24.2 - k8s.io/apimachinery v0.24.3 - k8s.io/apiserver v0.24.2 - k8s.io/client-go v0.24.2 + k8s.io/api v0.25.4 + k8s.io/apimachinery v0.25.4 + k8s.io/apiserver v0.25.0 + k8s.io/client-go v0.25.4 oras.land/oras-go v1.2.0 sigs.k8s.io/cluster-api v1.1.3 sigs.k8s.io/cluster-api-provider-cloudstack v0.4.8-rc1 sigs.k8s.io/cluster-api-provider-vsphere v1.0.1 sigs.k8s.io/cluster-api/test v1.0.0 - sigs.k8s.io/controller-runtime v0.11.1 + sigs.k8s.io/controller-runtime v0.13.1 sigs.k8s.io/yaml v1.3.0 ) @@ -59,8 +59,8 @@ require ( cloud.google.com/go v0.99.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.24 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.18 // indirect + github.com/Azure/go-autorest/autorest v0.11.27 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect @@ -104,7 +104,7 @@ require ( github.com/emirpasic/gods v1.12.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.3.1 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect @@ -150,13 +150,13 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/morikuni/aec v1.0.0 // indirect - github.com/mrajashree/etcdadm-bootstrap-provider v1.0.0-rc3 // indirect + github.com/mrajashree/etcdadm-bootstrap-provider v1.0.0-rc3 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect github.com/pelletier/go-toml v1.9.4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.12.1 // indirect + github.com/prometheus/client_golang v1.12.2 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect @@ -175,23 +175,23 @@ require ( golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde // indirect golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect - golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect + golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 // indirect + google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 // indirect google.golang.org/grpc v1.48.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/go-playground/validator.v9 v9.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect - k8s.io/apiextensions-apiserver v0.24.2 // indirect + k8s.io/apiextensions-apiserver v0.25.0 // indirect k8s.io/cluster-bootstrap v0.23.0 // indirect - k8s.io/component-base v0.24.2 // indirect - k8s.io/klog/v2 v2.60.1 - k8s.io/kube-openapi v0.0.0-20220627174259-011e075b9cb8 // indirect - k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 - sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect + k8s.io/component-base v0.25.4 + k8s.io/klog/v2 v2.70.1 + k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect + k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) // TODO: Once the repo is public, remove this so we use a versioned module diff --git a/go.sum b/go.sum index 34c245f49965b..0592902c04c4e 100644 --- a/go.sum +++ b/go.sum @@ -59,22 +59,24 @@ github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSW github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest v0.11.24 h1:1fIGgHKqVm54KIPT+q8Zmd1QlVsmHqeUGso5qm2BqqE= -github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= +github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= +github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/adal v0.9.18 h1:kLnPsRjzZZUF3K5REu/Kc+qMQrvuza2bwSnNdhmzLfQ= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= +github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= @@ -151,8 +153,8 @@ github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHG github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e h1:GCzyKMDDjSGnlpl3clrdAK7I1AaVoaiKDOYkUzChZzg= github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed h1:ue9pVfIcP+QMEjfgo/Ez4ZjNZfonGgR6NgjMaJMu1Cg= github.com/apache/cloudstack-go/v2 v2.13.0 h1:t0uj7QxQpnzD/LSTP6a4w2NTuZXisxIM/mIDNkF44lc= github.com/apache/cloudstack-go/v2 v2.13.0/go.mod h1:aosD8Svfu5nhH5Sp4zcsVV1hT5UGt3mTgRXM8YqTKe0= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= @@ -214,7 +216,7 @@ github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqO github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/bmc-toolbox/bmclib v0.5.3 h1:aGYvGwEUZOIRP1mhhzELVPDGWsES7CsDLANciJ1TgF4= github.com/bmc-toolbox/bmclib v0.5.3/go.mod h1:GR1j74vPi8vlos514fwtg0dWq1khieqDTsArL5ae2jk= github.com/bnkamalesh/webgo/v4 v4.1.11/go.mod h1:taIAonQTzao8G5rnB22WgKmQuIOWHpQ0n/YLAidBXlM= @@ -405,8 +407,9 @@ github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= @@ -586,8 +589,7 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= -github.com/google/cel-go v0.10.1 h1:MQBGSZGnDwh7T/un+mzGKOMz3x+4E/GDPprWjDL+1Jg= -github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= +github.com/google/cel-go v0.12.4 h1:YINKfuHZ8n72tPOqSPZBwGiDpew2CJS48mdM5W8LZQU= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= @@ -872,7 +874,6 @@ github.com/moby/sys/mountinfo v0.6.0 h1:gUDhXQx58YNrpHlK4nSL+7y2pxFZkUcXqzFDKWdC github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -921,8 +922,8 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= +github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= @@ -932,8 +933,9 @@ github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDs github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= @@ -976,8 +978,8 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= 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= @@ -1064,7 +1066,6 @@ github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHN github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -1217,8 +1218,8 @@ go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= @@ -1540,8 +1541,9 @@ golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858/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= @@ -1613,7 +1615,6 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= -golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= 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= @@ -1727,8 +1728,8 @@ google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 h1:Et6SkiuvnBn+SgrSYXs/BrUpGB4mbdwt4R3vaPIlicA= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 h1:hrbNEivu7Zn1pxvHk6MBrq9iE22woVILTHqexqBxe6I= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= 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= @@ -1758,6 +1759,7 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1842,13 +1844,14 @@ k8s.io/api v0.17.2/go.mod h1:BS9fjjLc4CMuqfSO8vgbHPKMt5+SF0ET6u/RVDihTo4= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= k8s.io/api v0.22.2/go.mod h1:y3ydYpLJAaDI+BbSe2xmGcqxiWHmWjkEeIbiwHvnPR8= k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg= -k8s.io/api v0.24.2 h1:g518dPU/L7VRLxWfcadQn2OnsiGWVOadTLpdnqgY2OI= k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg= +k8s.io/api v0.25.4 h1:3YO8J4RtmG7elEgaWMb4HgmpS2CfY1QlaOz9nwB+ZSs= +k8s.io/api v0.25.4/go.mod h1:IG2+RzyPQLllQxnhzD8KQNEu4c4YvyDTpSMztf4A0OQ= k8s.io/apiextensions-apiserver v0.17.2/go.mod h1:4KdMpjkEjjDI2pPfBA15OscyNldHWdBCfsWMDWAmSTs= k8s.io/apiextensions-apiserver v0.22.2/go.mod h1:2E0Ve/isxNl7tWLSUDgi6+cmwHi5fQRdwGVCxbC+KFA= k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4= -k8s.io/apiextensions-apiserver v0.24.2 h1:/4NEQHKlEz1MlaK/wHT5KMKC9UKYz6NZz6JE6ov4G6k= -k8s.io/apiextensions-apiserver v0.24.2/go.mod h1:e5t2GMFVngUEHUd0wuCJzw8YDwZoqZfJiGOW6mm2hLQ= +k8s.io/apiextensions-apiserver v0.25.0 h1:CJ9zlyXAbq0FIW8CD7HHyozCMBpDSiH7EdrSTCZcZFY= +k8s.io/apiextensions-apiserver v0.25.0/go.mod h1:3pAjZiN4zw7R8aZC5gR0y3/vCkGlAjCazcg1me8iB/E= k8s.io/apimachinery v0.0.0-20191121015412-41065c7a8c2a/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= k8s.io/apimachinery v0.0.0-20191128180518-03184f823e28/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= @@ -1857,35 +1860,36 @@ k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MA k8s.io/apimachinery v0.22.2/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= k8s.io/apimachinery v0.24.2/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apimachinery v0.24.3 h1:hrFiNSA2cBZqllakVYyH/VyEh4B581bQRmqATJSeQTg= k8s.io/apimachinery v0.24.3/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apimachinery v0.25.4 h1:CtXsuaitMESSu339tfhVXhQrPET+EiWnIY1rcurKnAc= +k8s.io/apimachinery v0.25.4/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= k8s.io/apiserver v0.17.2/go.mod h1:lBmw/TtQdtxvrTk0e2cgtOxHizXI+d0mmGQURIHQZlo= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= k8s.io/apiserver v0.22.2/go.mod h1:vrpMmbyjWrgdyOvZTSpsusQq5iigKNWv9o9KlDAbBHI= k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4= -k8s.io/apiserver v0.24.2 h1:orxipm5elPJSkkFNlwH9ClqaKEDJJA3yR2cAAlCnyj4= -k8s.io/apiserver v0.24.2/go.mod h1:pSuKzr3zV+L+MWqsEo0kHHYwCo77AT5qXbFXP2jbvFI= +k8s.io/apiserver v0.25.0 h1:8kl2ifbNffD440MyvHtPaIz1mw4mGKVgWqM0nL+oyu4= +k8s.io/apiserver v0.25.0/go.mod h1:BKwsE+PTC+aZK+6OJQDPr0v6uS91/HWxX7evElAH6xo= k8s.io/cli-runtime v0.23.0/go.mod h1:B5N3YH0KP1iKr6gEuJ/RRmGjO0mJQ/f/JrsmEiPQAlU= k8s.io/client-go v0.0.0-20191204082519-e9644b2e3edc/go.mod h1:5lSG1yeDZVwDYAHe9VK48SCe5zmcnkAcf2Mx59TuhmM= k8s.io/client-go v0.17.2/go.mod h1:QAzRgsa0C2xl4/eVpeVAZMvikCn8Nm81yqVx3Kk9XYI= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= k8s.io/client-go v0.22.2/go.mod h1:sAlhrkVDf50ZHx6z4K0S40wISNTarf1r800F+RlCF6U= k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA= -k8s.io/client-go v0.24.2 h1:CoXFSf8if+bLEbinDqN9ePIDGzcLtqhfd6jpfnwGOFA= k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30= +k8s.io/client-go v0.25.4 h1:3RNRDffAkNU56M/a7gUfXaEzdhZlYhoW8dgViGy5fn8= +k8s.io/client-go v0.25.4/go.mod h1:8trHCAC83XKY0wsBIpbirZU4NTUpbuhc2JnI7OruGZw= k8s.io/cluster-bootstrap v0.23.0 h1:8pZuuAWPoygewSNB4IddX3HBwXcQkPDXL/ca7GtGf4o= k8s.io/cluster-bootstrap v0.23.0/go.mod h1:VltEnKWfrRTiKgOXp3ts3vh7yqNlH6KFKFflo9GtCBg= k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= k8s.io/code-generator v0.22.2/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o= k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE= -k8s.io/code-generator v0.24.2/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= k8s.io/component-base v0.0.0-20191204083906-3ac1376c73aa/go.mod h1:mECWvHCPhJudDVDMtBl+AIf/YnTMp5r1F947OYFUwP0= k8s.io/component-base v0.17.2/go.mod h1:zMPW3g5aH7cHJpKYQ/ZsGMcgbsA/VyhEugF3QT1awLs= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= k8s.io/component-base v0.22.2/go.mod h1:5Br2QhI9OTe79p+TzPe9JKNQYvEKbq9rTJDWllunGug= k8s.io/component-base v0.23.0/go.mod h1:DHH5uiFvLC1edCpvcTDV++NKULdYYU6pR9Tt3HIKMKI= -k8s.io/component-base v0.24.2 h1:kwpQdoSfbcH+8MPN4tALtajLDfSfYxBDYlXobNWI6OU= -k8s.io/component-base v0.24.2/go.mod h1:ucHwW76dajvQ9B7+zecZAP3BVqvrHoOxm8olHEg0nmM= +k8s.io/component-base v0.25.4 h1:n1bjg9Yt+G1C0WnIDJmg2fo6wbEU1UGMRiQSjmj7hNQ= +k8s.io/component-base v0.25.4/go.mod h1:nnZJU8OP13PJEm6/p5V2ztgX2oyteIaAGKGMYb2L2cY= k8s.io/component-helpers v0.23.0/go.mod h1:liXMh6FZS4qamKtMJQ7uLHnFe3tlC86RX5mJEk/aerg= k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -1893,7 +1897,6 @@ k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8 k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= @@ -1902,15 +1905,16 @@ k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= +k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= -k8s.io/kube-openapi v0.0.0-20220627174259-011e075b9cb8 h1:yEQKdMCjzAOvGeiTwG4hO/hNVNtDOuUFvMUZ0OlaIzs= -k8s.io/kube-openapi v0.0.0-20220627174259-011e075b9cb8/go.mod h1:mbJ+NSUoAhuR14N0S63bPkh8MGVSo3VYSGZtH/mfMe0= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= k8s.io/kubectl v0.23.0/go.mod h1:TfcGEs3u4dkmoC2eku1GYymdGaMtPMcaLLFrX/RB2kI= k8s.io/metrics v0.23.0/go.mod h1:NDiZTwppEtAuKJ1Rxt3S4dhyRzdp6yUcJf0vo023dPo= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= @@ -1918,8 +1922,9 @@ k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= @@ -1933,7 +1938,6 @@ rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= sigs.k8s.io/cluster-api-provider-cloudstack v0.4.8-rc1 h1:dTmmeLggoXt4oAlvT+g02pcab/4b1ptfdgkjQa6fWkQ= sigs.k8s.io/cluster-api-provider-cloudstack v0.4.8-rc1/go.mod h1:b7l5H1Rb5tdpczy3MW/sGP+wM0E9HWdl0obBMxIq0q4= sigs.k8s.io/cluster-api-provider-vsphere v1.0.1 h1:qs7zSFkAL9tU8tHob7bmrEWfKsOU5JaskpeSIYrhQCc= @@ -1943,12 +1947,14 @@ sigs.k8s.io/cluster-api/test v1.0.0/go.mod h1:8WQozDv62x2qHkCB1wTUeFjuwawuHKUTh8 sigs.k8s.io/controller-runtime v0.5.0/go.mod h1:REiJzC7Y00U+2YkMbT8wxgrsX5USpXKGhb2sCtAXiT8= sigs.k8s.io/controller-runtime v0.10.2/go.mod h1:CQp8eyUQZ/Q7PJvnIrB6/hgfTC1kBkGylwsLgOQi1WY= sigs.k8s.io/controller-runtime v0.10.3/go.mod h1:CQp8eyUQZ/Q7PJvnIrB6/hgfTC1kBkGylwsLgOQi1WY= -sigs.k8s.io/controller-runtime v0.11.1 h1:7YIHT2QnHJArj/dk9aUkYhfqfK5cIxPOX5gPECfdZLU= sigs.k8s.io/controller-runtime v0.11.1/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= +sigs.k8s.io/controller-runtime v0.13.1 h1:tUsRCSJVM1QQOOeViGeX3GMT3dQF1eePPw6sEE3xSlg= +sigs.k8s.io/controller-runtime v0.13.1/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= sigs.k8s.io/etcdadm v0.1.5/go.mod h1:pZKjlP3tQWmkVP528mELfS5ONTh7M5tAjPjmx24tK2o= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kind v0.11.1/go.mod h1:fRpgVhtqAWrtLB9ED7zQahUimpUXuG/iHT88xYqEGIA= sigs.k8s.io/kustomize/api v0.10.1/go.mod h1:2FigT1QN6xKdcnGS2Ppp1uIWrtWN28Ms8A3OZUZhwr8= sigs.k8s.io/kustomize/cmd/config v0.10.2/go.mod h1:K2aW7nXJ0AaT+VA/eO0/dzFLxmpFcTzudmAgDwPY1HQ= @@ -1960,8 +1966,9 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= diff --git a/manager/Tiltfile b/manager/Tiltfile index db7e0232680a1..76c47eed994de 100644 --- a/manager/Tiltfile +++ b/manager/Tiltfile @@ -17,7 +17,7 @@ OUTPUT_BIN_FOLDER = OUTPUT_PATH + '/bin' PKG_FOLDER = PROJECT_ROOT + '/pkg' API_FOLDER = PKG_FOLDER + '/api' CONFIG_FOLDER = PROJECT_ROOT + '/config' -KUSTOMIZE_TILT_FOLDER = CONFIG_FOLDER + '/tilt' +KUSTOMIZE_TILT_FOLDER = CONFIG_FOLDER + '/tilt/' KUSTOMIZE_BIN = PROJECT_ROOT + '/hack/tools/bin/kustomize' FULL_LIFECYCLE_API_KEY = "FULL_LIFECYCLE_API" @@ -79,7 +79,7 @@ local_resource( 'eksa-controller-manager-build', manager_build_cmd(cluster_os, cluster_arch), dir = PROJECT_ROOT, - deps = [MANAGER_PATH, CONTROLLERS_FOLDER, PKG_FOLDER], + deps = [MANAGER_PATH, CONTROLLERS_FOLDER, PKG_FOLDER, "go.mod", "go.sum"], ignore = [manager_binary_dir, API_FOLDER + '/*/zz_generated.deepcopy.go', DOCKERFILE_PATH], ) diff --git a/manager/main.go b/manager/main.go index 2b9a9959aefb0..5448d6a338ea4 100644 --- a/manager/main.go +++ b/manager/main.go @@ -6,13 +6,16 @@ import ( "os" eksdv1alpha1 "github.com/aws/eks-distro-build-tooling/release/api/v1alpha1" + "github.com/go-logr/logr" etcdv1 "github.com/mrajashree/etcdadm-controller/api/v1beta1" "github.com/spf13/pflag" - "go.uber.org/zap" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" _ "k8s.io/client-go/plugin/pkg/client/auth" + logsv1 "k8s.io/component-base/logs/api/v1" + _ "k8s.io/component-base/logs/json/register" + "k8s.io/klog/v2" cloudstackv1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta2" vspherev1 "sigs.k8s.io/cluster-api-provider-vsphere/api/v1beta1" clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" @@ -23,7 +26,6 @@ import ( dockerv1 "sigs.k8s.io/cluster-api/test/infrastructure/docker/api/v1beta1" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/healthz" - kzap "sigs.k8s.io/controller-runtime/pkg/log/zap" "github.com/aws/eks-anywhere/controllers" anywherev1 "github.com/aws/eks-anywhere/pkg/api/v1alpha1" @@ -33,14 +35,7 @@ import ( releasev1 "github.com/aws/eks-anywhere/release/api/v1alpha1" ) -var ( - scheme = runtime.NewScheme() - setupLog = ctrl.Log.WithName("setup") - metricsAddr string - enableLeaderElection bool - probeAddr string - gates = []string{} -) +var scheme = runtime.NewScheme() const WEBHOOK = "webhook" @@ -62,34 +57,62 @@ func init() { //+kubebuilder:scaffold:scheme } -func initFlags(fs *pflag.FlagSet) { - fs.StringVar(&metricsAddr, "metrics-bind-address", "localhost:8080", "The address the metric endpoint binds to.") - fs.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") - fs.BoolVar(&enableLeaderElection, "leader-elect", false, +type config struct { + metricsAddr string + enableLeaderElection bool + probeAddr string + gates []string + logging *logsv1.LoggingConfiguration +} + +func newConfig() *config { + c := &config{ + logging: logsv1.NewLoggingConfiguration(), + } + c.logging.Format = logsv1.JSONLogFormat + c.logging.Verbosity = logsv1.VerbosityLevel(4) + + return c +} + +func initFlags(fs *pflag.FlagSet, config *config) { + logsv1.AddFlags(config.logging, fs) + + fs.StringVar(&config.metricsAddr, "metrics-bind-address", "localhost:8080", "The address the metric endpoint binds to.") + fs.StringVar(&config.probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") + fs.BoolVar(&config.enableLeaderElection, "leader-elect", false, "Enable leader election for controller manager. "+ "Enabling this will ensure there is only one active controller manager.") - fs.StringSliceVar(&gates, "feature-gates", []string{}, "A set of key=value pairs that describe feature gates for alpha/experimental features. ") + fs.StringSliceVar(&config.gates, "feature-gates", []string{}, "A set of key=value pairs that describe feature gates for alpha/experimental features. ") } func main() { - opts := kzap.Options{ - Development: true, - Level: zap.NewAtomicLevelAt(-4), - } - opts.BindFlags(flag.CommandLine) + config := newConfig() pflag.CommandLine.AddGoFlagSet(flag.CommandLine) - - initFlags(pflag.CommandLine) + initFlags(pflag.CommandLine, config) pflag.Parse() - ctrl.SetLogger(kzap.New(kzap.UseFlagOptions(&opts))) - features.FeedGates(gates) + + // Temporary logger for initialization + setupLog := ctrl.Log.WithName("setup") + + if err := logsv1.ValidateAndApply(config.logging, nil); err != nil { + setupLog.Error(err, "unable to start manager") + os.Exit(1) + } + + // klog.Background will automatically use the right logger. + ctrl.SetLogger(klog.Background()) + // Once controller-runtime logger has been setup correctly, retrieve again + setupLog = ctrl.Log.WithName("setup") + + features.FeedGates(config.gates) mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: scheme, - MetricsBindAddress: metricsAddr, + MetricsBindAddress: config.metricsAddr, Port: 9443, - HealthProbeBindAddress: probeAddr, - LeaderElection: enableLeaderElection, + HealthProbeBindAddress: config.probeAddr, + LeaderElection: config.enableLeaderElection, LeaderElectionID: "f64ae69e.eks.amazonaws.com", }) if err != nil { @@ -100,62 +123,66 @@ func main() { // Setup the context that's going to be used in controllers and for the manager. ctx := ctrl.SetupSignalHandler() - setupReconcilers(ctx, mgr) - setupWebhooks(mgr) + setupReconcilers(ctx, setupLog, mgr) + setupWebhooks(setupLog, mgr) + setupChecks(setupLog, mgr) //+kubebuilder:scaffold:builder - setupChecks(mgr) - setupLog.Info("starting manager") + setupLog.Info("Starting manager") if err := mgr.Start(ctx); err != nil { setupLog.Error(err, "problem running manager") os.Exit(1) } } -func setupReconcilers(ctx context.Context, mgr ctrl.Manager) { +func setupReconcilers(ctx context.Context, setupLog logr.Logger, mgr ctrl.Manager) { if features.IsActive(features.FullLifecycleAPI()) { - setupLog.Info("Reading CAPI providers") - providers, err := clusterapi.GetProviders(ctx, mgr.GetAPIReader()) - if err != nil { - setupLog.Error(err, "unable to read installed providers") - os.Exit(1) - } - - factory := controllers.NewFactory(ctrl.Log, mgr). - WithClusterReconciler(providers). - WithVSphereDatacenterReconciler(). - WithSnowMachineConfigReconciler() - - reconcilers, err := factory.Build(ctx) - if err != nil { - setupLog.Error(err, "unable to build reconcilers") - os.Exit(1) - } - - setupLog.Info("Setting up cluster controller") - if err := (reconcilers.ClusterReconciler).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create controller", "controller", anywherev1.ClusterKind) - os.Exit(1) - } - - setupLog.Info("Setting up vspheredatacenter controller") - if err := (reconcilers.VSphereDatacenterReconciler).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create controller", "controller", anywherev1.VSphereDatacenterKind) - os.Exit(1) - } - - setupLog.Info("Setting up snowmachineconfig controller") - if err := (reconcilers.SnowMachineConfigReconciler).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create controller", "controller", anywherev1.SnowMachineConfigKind) - os.Exit(1) - } + setupFullLifecycleReconcilers(ctx, setupLog, mgr) } else { setupLog.Info("Setting up legacy cluster controller") - setupLegacyClusterReconciler(mgr) + setupLegacyClusterReconciler(setupLog, mgr) + } +} + +func setupFullLifecycleReconcilers(ctx context.Context, setupLog logr.Logger, mgr ctrl.Manager) { + setupLog.Info("Reading CAPI providers") + providers, err := clusterapi.GetProviders(ctx, mgr.GetAPIReader()) + if err != nil { + setupLog.Error(err, "unable to read installed providers") + os.Exit(1) + } + + factory := controllers.NewFactory(ctrl.Log, mgr). + WithClusterReconciler(providers). + WithVSphereDatacenterReconciler(). + WithSnowMachineConfigReconciler() + + reconcilers, err := factory.Build(ctx) + if err != nil { + setupLog.Error(err, "unable to build reconcilers") + os.Exit(1) + } + + setupLog.Info("Setting up cluster controller") + if err := (reconcilers.ClusterReconciler).SetupWithManager(mgr, setupLog); err != nil { + setupLog.Error(err, "unable to create controller", "controller", anywherev1.ClusterKind) + os.Exit(1) + } + + setupLog.Info("Setting up vspheredatacenter controller") + if err := (reconcilers.VSphereDatacenterReconciler).SetupWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create controller", "controller", anywherev1.VSphereDatacenterKind) + os.Exit(1) + } + + setupLog.Info("Setting up snowmachineconfig controller") + if err := (reconcilers.SnowMachineConfigReconciler).SetupWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create controller", "controller", anywherev1.SnowMachineConfigKind) + os.Exit(1) } } -func setupLegacyClusterReconciler(mgr ctrl.Manager) { +func setupLegacyClusterReconciler(setupLog logr.Logger, mgr ctrl.Manager) { if err := (controllers.NewClusterReconcilerLegacy( mgr.GetClient(), ctrl.Log.WithName("controllers").WithName(anywherev1.ClusterKind), @@ -166,43 +193,59 @@ func setupLegacyClusterReconciler(mgr ctrl.Manager) { } } -func setupWebhooks(mgr ctrl.Manager) { +func setupWebhooks(setupLog logr.Logger, mgr ctrl.Manager) { + setupCoreWebhooks(setupLog, mgr) + setupVSphereWebhooks(setupLog, mgr) + setupCloudstackWebhooks(setupLog, mgr) + setupSnowWebhooks(setupLog, mgr) +} + +func setupCoreWebhooks(setupLog logr.Logger, mgr ctrl.Manager) { if err := (&anywherev1.Cluster{}).SetupWebhookWithManager(mgr); err != nil { setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.ClusterKind) os.Exit(1) } - if err := (&anywherev1.VSphereDatacenterConfig{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.VSphereDatacenterKind) + if err := (&anywherev1.GitOpsConfig{}).SetupWebhookWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.GitOpsConfigKind) os.Exit(1) } - if err := (&anywherev1.VSphereMachineConfig{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.VSphereMachineConfigKind) + if err := (&anywherev1.FluxConfig{}).SetupWebhookWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.FluxConfigKind) os.Exit(1) } - if err := (&anywherev1.CloudStackDatacenterConfig{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.CloudStackDatacenterKind) + if err := (&anywherev1.OIDCConfig{}).SetupWebhookWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.OIDCConfigKind) os.Exit(1) } - if err := (&anywherev1.CloudStackMachineConfig{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.CloudStackMachineConfigKind) + if err := (&anywherev1.AWSIamConfig{}).SetupWebhookWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.AWSIamConfigKind) os.Exit(1) } - if err := (&anywherev1.GitOpsConfig{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.GitOpsConfigKind) +} + +func setupVSphereWebhooks(setupLog logr.Logger, mgr ctrl.Manager) { + if err := (&anywherev1.VSphereDatacenterConfig{}).SetupWebhookWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.VSphereDatacenterKind) os.Exit(1) } - if err := (&anywherev1.OIDCConfig{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.OIDCConfigKind) + if err := (&anywherev1.VSphereMachineConfig{}).SetupWebhookWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.VSphereMachineConfigKind) os.Exit(1) } - if err := (&anywherev1.AWSIamConfig{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.AWSIamConfigKind) +} + +func setupCloudstackWebhooks(setupLog logr.Logger, mgr ctrl.Manager) { + if err := (&anywherev1.CloudStackDatacenterConfig{}).SetupWebhookWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.CloudStackDatacenterKind) os.Exit(1) } - if err := (&anywherev1.FluxConfig{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.FluxConfigKind) + if err := (&anywherev1.CloudStackMachineConfig{}).SetupWebhookWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.CloudStackMachineConfigKind) os.Exit(1) } +} + +func setupSnowWebhooks(setupLog logr.Logger, mgr ctrl.Manager) { if err := (&anywherev1.SnowMachineConfig{}).SetupWebhookWithManager(mgr); err != nil { setupLog.Error(err, "unable to create webhook", WEBHOOK, anywherev1.SnowMachineConfigKind) os.Exit(1) @@ -213,7 +256,7 @@ func setupWebhooks(mgr ctrl.Manager) { } } -func setupChecks(mgr ctrl.Manager) { +func setupChecks(setupLog logr.Logger, mgr ctrl.Manager) { if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { setupLog.Error(err, "unable to set up health check") os.Exit(1)