From 8dfb38f88c4d5584e67627a9c659f6c8d664070f Mon Sep 17 00:00:00 2001 From: Guillermo Gaston Date: Thu, 17 Nov 2022 16:16:52 -0600 Subject: [PATCH] Improve controller manager logs (#4115) 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 | 34 +-- go.sum | 65 ++++-- manager/Tiltfile | 4 +- manager/main.go | 217 +++++++++++------- scripts/common.sh | 2 +- 16 files changed, 254 insertions(+), 193 deletions(-) diff --git a/config/tilt/kustomization.yaml b/config/tilt/kustomization.yaml index 0fffc0e7a686..4524b5cb9738 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 945c22099adf..2e1a38ffd8b3 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;dockerclusters;dockermachinetemplates,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 394522afd3d5..59d202aa6c76 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 843b31ea0969..27271f7e64f0 100644 --- a/controllers/cluster_controller_test_test.go +++ b/controllers/cluster_controller_test_test.go @@ -73,7 +73,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()) @@ -90,10 +90,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) { @@ -118,7 +118,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"))) } @@ -152,7 +152,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 548d8174f491..1c1ca3ed9ec4 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 c85e38ee348c..257a06522ac7 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 03ec8f27c181..3fe01e6b521b 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 50911bf13766..82f7d4965a29 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 8745ac91308c..372ea1cfa36e 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 5e473a6cf6de..285ffc7130e1 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 058abc8fce1a..9448ed1a9ccd 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 32ac7b4ee1b7..ca51a811fb17 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.2.0 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.12.3 + sigs.k8s.io/controller-runtime v0.13.1 sigs.k8s.io/yaml v1.3.0 ) @@ -59,8 +59,8 @@ require ( cloud.google.com/go/compute v1.6.1 // 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 @@ -157,7 +157,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.1 // 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 @@ -176,7 +176,7 @@ 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-20220519153652-3a47de7e79bd // indirect @@ -185,14 +185,14 @@ require ( 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.24.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 12c67a028ff2..f9d414c75453 100644 --- a/go.sum +++ b/go.sum @@ -68,22 +68,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= @@ -163,8 +165,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= @@ -227,6 +229,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 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/bmc-toolbox/bmclib v0.5.3 h1:aGYvGwEUZOIRP1mhhzELVPDGWsES7CsDLANciJ1TgF4= github.com/bmc-toolbox/bmclib v0.5.3/go.mod h1:GR1j74vPi8vlos514fwtg0dWq1khieqDTsArL5ae2jk= @@ -606,8 +609,8 @@ 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= @@ -955,8 +958,8 @@ 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.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= 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= @@ -967,8 +970,9 @@ github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+t 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.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -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= @@ -1017,8 +1021,9 @@ github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3O 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.11.1/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= @@ -1266,8 +1271,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= @@ -1619,8 +1624,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= @@ -1961,13 +1967,15 @@ 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.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= -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= @@ -1977,14 +1985,16 @@ k8s.io/apimachinery v0.22.2/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= 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.24.0/go.mod h1:9XxoZDsEkRFUThnwqNviqzljtT/LdHtNWvcNFrAXl0A= 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= @@ -1992,8 +2002,9 @@ 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.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= -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.24.0 h1:MTs2x3Vfcl/PWvB5bfX7gzTFRyi4ZSbNSQgGJTCb6Sw= k8s.io/cluster-bootstrap v0.24.0/go.mod h1:xw+IfoaUweMCAoi+VYhmqkcjii2G7gNg59dmGn7hi0g= k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= @@ -2007,8 +2018,9 @@ k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMY 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.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA= -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.24.0/go.mod h1:Q2SlLm4h6g6lPTC9GMMfzdywfLSvJT2f1hOnnjaWD8c= k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -2025,15 +2037,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.24.0/go.mod h1:pdXkmCyHiRTqjYfyUJiXtbVNURhv0/Q1TyRhy2d5ic0= k8s.io/metrics v0.24.0/go.mod h1:jrLlFGdKl3X+szubOXPG0Lf2aVxuV3QJcbsgVRAM6fI= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= @@ -2041,8 +2054,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= @@ -2067,12 +2081,14 @@ sigs.k8s.io/controller-runtime v0.5.0/go.mod h1:REiJzC7Y00U+2YkMbT8wxgrsX5USpXKG 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/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= -sigs.k8s.io/controller-runtime v0.12.3 h1:FCM8xeY/FI8hoAfh/V4XbbYMY20gElh9yh+A98usMio= sigs.k8s.io/controller-runtime v0.12.3/go.mod h1:qKsk4WE6zW2Hfj0G4v10EnNB2jMG1C+NTb8h+DwCoU0= +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.11.4/go.mod h1:k+8RsqYbgpkIrJ4p9jcdPqe8DprLxFUUO0yNOq8C+xI= sigs.k8s.io/kustomize/cmd/config v0.10.6/go.mod h1:/S4A4nUANUa4bZJ/Edt7ZQTyKOY9WCER0uBS1SW2Rco= @@ -2084,8 +2100,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 db7e0232680a..76c47eed994d 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 2b9a9959aefb..5448d6a338ea 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) diff --git a/scripts/common.sh b/scripts/common.sh index 8a6eab444834..902b5093c735 100755 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -85,7 +85,7 @@ function build::common::upload_artifacts() { function build::gather_licenses() { # force 1.16 since thats the version used to install go-licenses in builder-base - build::common::use_go_version 1.16 + build::common::use_go_version 1.18 if ! command -v go-licenses &> /dev/null then echo " go-licenses not found. If you need license or attribtuion file handling"