From a9fee09d736450cecd03c482253b28eb120424f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9la=20Kov=C3=A1cs?= Date: Tue, 14 May 2024 14:15:43 +0200 Subject: [PATCH 1/3] Updating go+libs version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Béla Kovács --- .travis.yml | 2 +- controllers/binding_controller.go | 13 +- controllers/binding_controller_test.go | 223 +++---- controllers/manager_setup.go | 4 +- controllers/manager_setup_test.go | 5 +- controllers/mock_client_test.go | 83 +-- controllers/service_controller.go | 9 +- controllers/service_controller_test.go | 270 ++++---- controllers/status_test.go | 6 +- controllers/suite_test.go | 2 +- controllers/token_controller.go | 9 +- controllers/token_controller_test.go | 66 +- go.mod | 107 ++- go.sum | 883 +++++++------------------ internal/cmd/firstsetup/main.go | 14 +- internal/ibmcloud/ibmcloud.go | 3 +- main.go | 17 +- 17 files changed, 712 insertions(+), 1004 deletions(-) diff --git a/.travis.yml b/.travis.yml index e9e2b71d..308948a9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: go go: - - "1.17.x" + - "1.21.x" services: - docker diff --git a/controllers/binding_controller.go b/controllers/binding_controller.go index 9c5d16af..41b44e05 100644 --- a/controllers/binding_controller.go +++ b/controllers/binding_controller.go @@ -64,7 +64,7 @@ const ( type BindingReconciler struct { client.Client Log logr.Logger - Scheme *runtime.Scheme + scheme *runtime.Scheme CreateResourceServiceKey resource.KeyCreator CreateCFServiceKey cfservice.KeyCreator @@ -91,6 +91,10 @@ func (r *BindingReconciler) SetupWithManager(mgr ctrl.Manager, options controlle Complete(r) } +func (r *BindingReconciler) Scheme() *runtime.Scheme { + return r.scheme +} + // +kubebuilder:rbac:groups=ibmcloud.ibm.com,resources=bindings,verbs=get;list;watch;create;update;patch;delete // +kubebuilder:rbac:groups=ibmcloud.ibm.com,resources=bindings/status,verbs=get;update;patch // +kubebuilder:rbac:groups=ibmcloud.ibm.com,resources=bindings/finalizers,verbs=get;list;watch;create;update;patch;delete @@ -102,8 +106,7 @@ func (r *BindingReconciler) SetupWithManager(mgr ctrl.Manager, options controlle // Reconcile reads the state of the cluster for a Binding object and makes changes based on the state read // and what is in the Binding.Spec. // Automatically generates RBAC rules to allow the Controller to read and write Deployments. -func (r *BindingReconciler) Reconcile(request ctrl.Request) (ctrl.Result, error) { - ctx := context.Background() +func (r *BindingReconciler) Reconcile(ctx context.Context, request ctrl.Request) (ctrl.Result, error) { logt := r.Log.WithValues("binding", request.NamespacedName) // Fetch the Binding instance @@ -158,7 +161,7 @@ func (r *BindingReconciler) Reconcile(request ctrl.Request) (ctrl.Result, error) // Set an owner reference if service and binding are in the same namespace if serviceInstance.Namespace == instance.Namespace { - if err := r.SetOwnerReference(serviceInstance, instance, r.Scheme); err != nil { + if err := r.SetOwnerReference(serviceInstance, instance, r.Scheme()); err != nil { logt.Info("Binding could not update owner reference", instance.Name, err.Error()) return ctrl.Result{}, err } @@ -500,7 +503,7 @@ func (r *BindingReconciler) createSecret(instance *ibmcloudv1.Binding, keyConten }, Data: datamap, } - if err := r.SetControllerReference(instance, secret, r.Scheme); err != nil { + if err := r.SetControllerReference(instance, secret, r.Scheme()); err != nil { return err } if err := r.Create(context.Background(), secret); err != nil { diff --git a/controllers/binding_controller_test.go b/controllers/binding_controller_test.go index 8844610a..a8211cae 100644 --- a/controllers/binding_controller_test.go +++ b/controllers/binding_controller_test.go @@ -123,23 +123,24 @@ func TestBinding(t *testing.T) { func TestBindingFailedLookup(t *testing.T) { t.Parallel() scheme := schemas(t) + fake.NewClientBuilder().WithScheme(scheme) r := &BindingReconciler{ - Client: fake.NewFakeClientWithScheme(scheme), + Client: fake.NewClientBuilder().WithScheme(scheme).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } t.Run("not found", func(t *testing.T) { - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "mybinding"}, }) assert.NoError(t, err, "Don't retry (return err) if binding does not exist") assert.Equal(t, ctrl.Result{}, result) }) - r.Client = fake.NewFakeClientWithScheme(runtime.NewScheme()) // fail to read the type Binding + r.Client = fake.NewClientBuilder().WithScheme(scheme).Build() // fail to read the type Binding t.Run("failed to read binding", func(t *testing.T) { - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "mybinding"}, }) assert.Error(t, err) @@ -151,23 +152,23 @@ func TestBindingFailedLookup(t *testing.T) { func TestBindingFailInitialStatus(t *testing.T) { t.Parallel() scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ ObjectMeta: metav1.ObjectMeta{Name: "mybinding"}, Status: ibmcloudv1.BindingStatus{}, // empty }, } - client := fake.NewFakeClientWithScheme(scheme, objects...) + client := fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build() client = newMockClient(client, MockConfig{ StatusUpdateErr: fmt.Errorf("failed"), }) r := &BindingReconciler{ Client: client, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "mybinding"}, }) assert.NoError(t, err, "Don't retry (return err) if binding does not exist") @@ -295,15 +296,15 @@ func TestBindingFailGetServiceInstance(t *testing.T) { t.Run(tc.description, func(t *testing.T) { scheme := schemas(t) r := &BindingReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, tc.binding), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(tc.binding).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } if tc.fakeClient != nil { r.Client = newMockClient(r.Client, *tc.fakeClient) } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "mybinding"}, }) assert.NoError(t, err) @@ -323,7 +324,7 @@ func TestBindingSetOwnerReferenceFailed(t *testing.T) { t.Run("setting owner reference failed", func(t *testing.T) { scheme := schemas(t) const namespace = "mynamespace" - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{Name: "mybinding", Namespace: namespace}, @@ -337,16 +338,16 @@ func TestBindingSetOwnerReferenceFailed(t *testing.T) { }, } r := &BindingReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, SetOwnerReference: func(owner, controlled metav1.Object, scheme *runtime.Scheme) error { return fmt.Errorf("failed") }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "mybinding", Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -356,7 +357,7 @@ func TestBindingSetOwnerReferenceFailed(t *testing.T) { t.Run("binding update failed", func(t *testing.T) { scheme := schemas(t) const namespace = "mynamespace" - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{Name: "mybinding", Namespace: namespace}, @@ -373,21 +374,21 @@ func TestBindingSetOwnerReferenceFailed(t *testing.T) { }, } client := newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{ UpdateErr: fmt.Errorf("failed"), }) r := &BindingReconciler{ Client: client, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, SetOwnerReference: func(owner, controlled metav1.Object, scheme *runtime.Scheme) error { return nil }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "mybinding", Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -410,7 +411,7 @@ func TestBindingServiceIsNotReady(t *testing.T) { t.Run("empty instance ID", func(t *testing.T) { scheme := schemas(t) const namespace = "mynamespace" - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{Name: "mybinding", Namespace: namespace}, @@ -427,16 +428,16 @@ func TestBindingServiceIsNotReady(t *testing.T) { }, } r := &BindingReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, SetOwnerReference: func(owner, controlled metav1.Object, scheme *runtime.Scheme) error { return nil }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "mybinding", Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -449,7 +450,7 @@ func TestBindingServiceIsNotReady(t *testing.T) { t.Run("status instance ID is in progress", func(t *testing.T) { scheme := schemas(t) const namespace = "mynamespace" - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{Name: "mybinding", Namespace: namespace}, @@ -466,16 +467,16 @@ func TestBindingServiceIsNotReady(t *testing.T) { }, } r := &BindingReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, SetOwnerReference: func(owner, controlled metav1.Object, scheme *runtime.Scheme) error { return nil }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "mybinding", Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -496,7 +497,7 @@ func TestBindingGetIBMCloudInfoFailed(t *testing.T) { serviceName = "myservice" someInstanceID = "some-instance-id" ) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{ @@ -520,23 +521,23 @@ func TestBindingGetIBMCloudInfoFailed(t *testing.T) { t.Run("not found error", func(t *testing.T) { var r *BindingReconciler r = &BindingReconciler{ - Client: newMockClient(fake.NewFakeClientWithScheme(scheme, objects...), MockConfig{}), + Client: newMockClient(fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, SetOwnerReference: func(owner, controlled metav1.Object, scheme *runtime.Scheme) error { return nil }, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { r.Client = newMockClient( // swap out client so next update fails - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{UpdateErr: fmt.Errorf("failed")}, ) return nil, errors.NewNotFound(ctrl.GroupResource{Group: "ibmcloud.ibm.com", Resource: "secret"}, "ibmcloud-operator-secret") }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -557,9 +558,9 @@ func TestBindingGetIBMCloudInfoFailed(t *testing.T) { t.Run("other error", func(t *testing.T) { r := &BindingReconciler{ - Client: newMockClient(fake.NewFakeClientWithScheme(scheme, objects...), MockConfig{}), + Client: newMockClient(fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, SetOwnerReference: func(owner, controlled metav1.Object, scheme *runtime.Scheme) error { return nil @@ -569,7 +570,7 @@ func TestBindingGetIBMCloudInfoFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -607,7 +608,7 @@ func TestBindingDeletesWithFinalizerFailed(t *testing.T) { serviceName = "myservice" someInstanceID = "some-instance-id" ) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{ @@ -634,13 +635,13 @@ func TestBindingDeletesWithFinalizerFailed(t *testing.T) { }, } fakeClient := newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{DeleteErr: fmt.Errorf("failed")}, ) r := &BindingReconciler{ Client: fakeClient, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, r client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -650,7 +651,7 @@ func TestBindingDeletesWithFinalizerFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -673,7 +674,7 @@ func TestBindingDeletesWithFinalizerFailed(t *testing.T) { serviceName = "myservice" someInstanceID = "some-instance-id" ) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{ @@ -702,13 +703,13 @@ func TestBindingDeletesWithFinalizerFailed(t *testing.T) { } var r *BindingReconciler r = &BindingReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { r.Client = newMockClient( // swap out client so next update fails - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{UpdateErr: fmt.Errorf("failed")}, ) return &ibmcloud.Info{}, nil @@ -718,7 +719,7 @@ func TestBindingDeletesWithFinalizerFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -752,7 +753,7 @@ func TestBindingDeletesMissingFinalizerFailed(t *testing.T) { serviceName = "myservice" someInstanceID = "some-instance-id" ) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{ @@ -774,13 +775,13 @@ func TestBindingDeletesMissingFinalizerFailed(t *testing.T) { } var r *BindingReconciler r = &BindingReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { r.Client = newMockClient( // swap out client so next update fails - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{UpdateErr: fmt.Errorf("failed")}, ) return &ibmcloud.Info{}, nil @@ -790,7 +791,7 @@ func TestBindingDeletesMissingFinalizerFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -818,7 +819,7 @@ func TestBindingDeleteMismatchedServiceIDsSecretFailed(t *testing.T) { serviceName = "myservice" someInstanceID = "some-instance-id" ) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{ @@ -850,13 +851,13 @@ func TestBindingDeleteMismatchedServiceIDsSecretFailed(t *testing.T) { } var r *BindingReconciler r = &BindingReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { r.Client = newMockClient( // swap out client so next delete fails - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{DeleteErr: fmt.Errorf("failed")}, ) return &ibmcloud.Info{}, nil @@ -866,7 +867,7 @@ func TestBindingDeleteMismatchedServiceIDsSecretFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -912,7 +913,7 @@ func TestBindingSetKeyInstanceFailed(t *testing.T) { serviceName = "myservice" someInstanceID = "some-instance-id" ) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{ @@ -1040,7 +1041,7 @@ func TestBindingSetKeyInstanceFailed(t *testing.T) { }, } { t.Run(tc.description, func(t *testing.T) { - var testObjects []runtime.Object + var testObjects []client.Object for _, obj := range objects { if binding, ok := obj.(*ibmcloudv1.Binding); ok && binding.Name != aliasTargetName { binding = binding.DeepCopy() @@ -1057,11 +1058,11 @@ func TestBindingSetKeyInstanceFailed(t *testing.T) { r := &BindingReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, testObjects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(testObjects...).Build(), tc.fakeClient, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1089,7 +1090,7 @@ func TestBindingSetKeyInstanceFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, tc.expectResult, result) @@ -1115,7 +1116,7 @@ func TestBindingEnsureCredentialsFailed(t *testing.T) { someInstanceID = "some-instance-id" someKeyInstanceID = "some-key-instance-id" ) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{ @@ -1148,11 +1149,11 @@ func TestBindingEnsureCredentialsFailed(t *testing.T) { r := &BindingReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1177,7 +1178,7 @@ func TestBindingEnsureCredentialsFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1203,7 +1204,7 @@ func TestBindingEnsureAliasCredentialsFailed(t *testing.T) { someInstanceID = "some-instance-id" someKeyInstanceID = "some-key-instance-id" ) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{ @@ -1258,11 +1259,11 @@ func TestBindingEnsureAliasCredentialsFailed(t *testing.T) { scheme := schemas(t) r := &BindingReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1275,7 +1276,7 @@ func TestBindingEnsureAliasCredentialsFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1294,11 +1295,11 @@ func TestBindingEnsureAliasCredentialsFailed(t *testing.T) { scheme := schemas(t) r := &BindingReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1323,7 +1324,7 @@ func TestBindingEnsureAliasCredentialsFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1350,7 +1351,7 @@ func TestBindingEnsureSecretFailed(t *testing.T) { someInstanceID = "some-instance-id" someKeyInstanceID = "some-key-instance-id" ) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{ @@ -1381,11 +1382,11 @@ func TestBindingEnsureSecretFailed(t *testing.T) { t.Run("recreate secret success", func(t *testing.T) { r := &BindingReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1401,7 +1402,7 @@ func TestBindingEnsureSecretFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1432,11 +1433,11 @@ func TestBindingEnsureSecretFailed(t *testing.T) { t.Run("recreate secret failure", func(t *testing.T) { r := &BindingReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{CreateErr: fmt.Errorf("failed")}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1452,7 +1453,7 @@ func TestBindingEnsureSecretFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1492,7 +1493,7 @@ func TestBindingEnsureKeyContentsFailed(t *testing.T) { someInstanceID = "some-instance-id" someKeyInstanceID = "some-key-instance-id" ) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Binding{ TypeMeta: metav1.TypeMeta{Kind: "Binding", APIVersion: "ibmcloud.ibm.com/v1"}, ObjectMeta: metav1.ObjectMeta{ @@ -1541,11 +1542,11 @@ func TestBindingEnsureKeyContentsFailed(t *testing.T) { ) r := &BindingReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, testObjects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(testObjects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1561,7 +1562,7 @@ func TestBindingEnsureKeyContentsFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1613,11 +1614,11 @@ func TestBindingEnsureKeyContentsFailed(t *testing.T) { ) r := &BindingReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, testObjects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(testObjects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1630,7 +1631,7 @@ func TestBindingEnsureKeyContentsFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1660,11 +1661,11 @@ func TestBindingEnsureKeyContentsFailed(t *testing.T) { ) r := &BindingReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, testObjects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(testObjects...).Build(), MockConfig{DeleteErr: fmt.Errorf("failed")}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1677,7 +1678,7 @@ func TestBindingEnsureKeyContentsFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1710,11 +1711,11 @@ func TestBindingEnsureKeyContentsFailed(t *testing.T) { ) r := &BindingReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, testObjects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(testObjects...).Build(), MockConfig{CreateErr: fmt.Errorf("failed")}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1730,7 +1731,7 @@ func TestBindingEnsureKeyContentsFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: bindingName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1782,13 +1783,13 @@ func TestBindingResetResource(t *testing.T) { t.Run("happy path", func(t *testing.T) { client := newMockClient( - fake.NewFakeClientWithScheme(scheme, binding, secret), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(binding, secret).Build(), MockConfig{}, ) r := &BindingReconciler{ Client: client, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } result, err := r.resetResource(binding) @@ -1803,13 +1804,13 @@ func TestBindingResetResource(t *testing.T) { t.Run("fail delete secret", func(t *testing.T) { client := newMockClient( - fake.NewFakeClientWithScheme(scheme, binding, secret), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(binding, secret).Build(), MockConfig{DeleteErr: fmt.Errorf("failed")}, ) r := &BindingReconciler{ Client: client, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } result, err := r.resetResource(binding) @@ -1823,13 +1824,13 @@ func TestBindingResetResource(t *testing.T) { t.Run("fail update status", func(t *testing.T) { client := newMockClient( - fake.NewFakeClientWithScheme(scheme, binding, secret), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(binding, secret).Build(), MockConfig{StatusUpdateErr: fmt.Errorf("failed")}, ) r := &BindingReconciler{ Client: client, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } result, err := r.resetResource(binding) @@ -1904,13 +1905,13 @@ func TestBindingUpdateStatusError(t *testing.T) { }, } client := newMockClient( - fake.NewFakeClientWithScheme(scheme), + fake.NewClientBuilder().WithScheme(scheme).Build(), MockConfig{StatusUpdateErr: tc.updateStatusError}, ) r := &BindingReconciler{ Client: client, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } result, err := r.updateStatusError(binding, tc.state, tc.err) @@ -2014,7 +2015,7 @@ func TestBindingParamValueToJSON(t *testing.T) { namespace = "mynamespace" ) - objects := []runtime.Object{ + objects := []client.Object{ &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{Name: secretName, Namespace: namespace}, Data: map[string][]byte{ @@ -2115,9 +2116,9 @@ func TestBindingParamValueToJSON(t *testing.T) { t.Run(tc.description, func(t *testing.T) { scheme := schemas(t) r := &BindingReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } j, err := r.paramValueToJSON(context.TODO(), tc.valueFrom, namespace) @@ -2209,7 +2210,7 @@ func TestBindingDeleteCredentials(t *testing.T) { TypeMeta: metav1.TypeMeta{Kind: "Secret", APIVersion: "v1"}, ObjectMeta: metav1.ObjectMeta{Name: "myservice", Namespace: "mynamespace"}, } - objects := []runtime.Object{ + objects := []client.Object{ binding, &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: "myservice", Namespace: "mynamespace"}, @@ -2258,13 +2259,13 @@ func TestBindingDeleteCredentials(t *testing.T) { } { t.Run(tc.description, func(t *testing.T) { client := newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{DeleteErr: tc.deleteErr}, ) r := &BindingReconciler{ Client: client, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, DeleteCFServiceKey: func(session *session.Session, serviceKeyGUID string) error { return tc.cfErr @@ -2307,13 +2308,13 @@ func TestBindingUpdateStatusOnlineFailedWithConflictError(t *testing.T) { } client := newMockClient( - fake.NewFakeClientWithScheme(scheme, binding, service), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(binding, service).Build(), MockConfig{ErrChan: errChan}, ) r := &BindingReconciler{ Client: client, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, DeleteResourceServiceKey: func(session *session.Session, keyID string) error { return fmt.Errorf("failed") @@ -2358,13 +2359,13 @@ func TestBindingUpdateStatusOnlineFailedWithOtherUpdateErrror(t *testing.T) { errChan <- fmt.Errorf("status failed") client := newMockClient( - fake.NewFakeClientWithScheme(scheme, binding, service), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(binding, service).Build(), MockConfig{ErrChan: errChan}, ) r := &BindingReconciler{ Client: client, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } result, err := r.updateStatusOnline(nil, binding) @@ -2386,13 +2387,13 @@ func TestBindingUpdateStatusOnlineFailedWithGetError(t *testing.T) { errChan <- nil client := newMockClient( // the service and binding does not add so Get will return error - fake.NewFakeClientWithScheme(scheme), + fake.NewClientBuilder().WithScheme(scheme).Build(), MockConfig{ErrChan: errChan}, ) r := &BindingReconciler{ Client: client, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } result, err := r.updateStatusOnline(nil, binding) diff --git a/controllers/manager_setup.go b/controllers/manager_setup.go index 3534647e..2f44897f 100644 --- a/controllers/manager_setup.go +++ b/controllers/manager_setup.go @@ -59,7 +59,7 @@ func setUpControllerDependencies(mgr ctrl.Manager) *Controllers { BindingReconciler: &BindingReconciler{ Client: mgr.GetClient(), Log: ctrl.Log.WithName("controllers").WithName("Binding"), - Scheme: mgr.GetScheme(), + scheme: mgr.GetScheme(), CreateCFServiceKey: cfservice.CreateKey, CreateResourceServiceKey: resource.CreateKey, @@ -77,7 +77,7 @@ func setUpControllerDependencies(mgr ctrl.Manager) *Controllers { ServiceReconciler: &ServiceReconciler{ Client: mgr.GetClient(), Log: ctrl.Log.WithName("controllers").WithName("Service"), - Scheme: mgr.GetScheme(), + scheme: mgr.GetScheme(), CreateCFServiceInstance: cfservice.CreateInstance, CreateResourceServiceInstance: resource.CreateServiceInstance, diff --git a/controllers/manager_setup_test.go b/controllers/manager_setup_test.go index 6d187eaf..10b32cda 100644 --- a/controllers/manager_setup_test.go +++ b/controllers/manager_setup_test.go @@ -17,7 +17,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client/fake" // nolint: staticcheck "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/manager" - "sigs.k8s.io/controller-runtime/pkg/runtime/inject" ) func TestSetUpControllers(t *testing.T) { @@ -193,5 +192,7 @@ func (m *mockManager) GetEventRecorderFor(string) record.EventRecorder { } func (m *mockManager) Add(c manager.Runnable) error { - return c.(inject.Injector).InjectFunc(m.SetFields) + panic("BELA") + +// return c.(inject.Injector).InjectFunc(m.SetFields) } diff --git a/controllers/mock_client_test.go b/controllers/mock_client_test.go index 5e24b1ee..a4915940 100644 --- a/controllers/mock_client_test.go +++ b/controllers/mock_client_test.go @@ -3,20 +3,21 @@ package controllers import ( "context" - "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/watch" "sigs.k8s.io/controller-runtime/pkg/client" ) type MockClient interface { client.Client + client.WithWatch - LastCreate() runtime.Object - LastDelete() runtime.Object - LastDeleteAllOf() runtime.Object - LastPatch() runtime.Object - LastStatusPatch() runtime.Object - LastStatusUpdate() runtime.Object - LastUpdate() runtime.Object + LastCreate() client.Object + LastDelete() client.Object + LastDeleteAllOf() client.Object + LastPatch() client.Object + LastStatusPatch() client.Object + LastStatusUpdate() client.Object + LastUpdate() client.Object } type mockClient struct { @@ -24,13 +25,13 @@ type mockClient struct { statusWriter *mockStatusWriter MockConfig - lastCreate runtime.Object - lastDelete runtime.Object - lastUpdate runtime.Object - lastPatch runtime.Object - lastDeleteAllOf runtime.Object - lastStatusUpdate runtime.Object - lastStatusPatch runtime.Object + lastCreate client.Object + lastDelete client.Object + lastUpdate client.Object + lastPatch client.Object + lastDeleteAllOf client.Object + lastStatusUpdate client.Object + lastStatusPatch client.Object } type mockStatusWriter struct { @@ -58,48 +59,48 @@ func newMockClient(client client.Client, config MockConfig) MockClient { return m } -func (m *mockClient) Create(ctx context.Context, obj runtime.Object, opts ...client.CreateOption) error { - m.lastCreate = obj.DeepCopyObject() +func (m *mockClient) Create(ctx context.Context, obj client.Object, opts ...client.CreateOption) error { + m.lastCreate = obj.DeepCopyObject().(client.Object) return m.CreateErr } -func (m *mockClient) LastCreate() runtime.Object { +func (m *mockClient) LastCreate() client.Object { return m.lastCreate } -func (m *mockClient) Delete(ctx context.Context, obj runtime.Object, opts ...client.DeleteOption) error { - m.lastDelete = obj.DeepCopyObject() +func (m *mockClient) Delete(ctx context.Context, obj client.Object, opts ...client.DeleteOption) error { + m.lastDelete = obj.DeepCopyObject().(client.Object) return m.DeleteErr } -func (m *mockClient) LastDelete() runtime.Object { - return m.lastDelete +func (m *mockClient) LastDelete() client.Object { + return m.lastDelete.DeepCopyObject().(client.Object) } -func (m *mockClient) Update(ctx context.Context, obj runtime.Object, opts ...client.UpdateOption) error { - m.lastUpdate = obj.DeepCopyObject() +func (m *mockClient) Update(ctx context.Context, obj client.Object, opts ...client.UpdateOption) error { + m.lastUpdate = obj.DeepCopyObject().(client.Object) return m.UpdateErr } -func (m *mockClient) LastUpdate() runtime.Object { +func (m *mockClient) LastUpdate() client.Object { return m.lastUpdate } -func (m *mockClient) Patch(ctx context.Context, obj runtime.Object, patch client.Patch, opts ...client.PatchOption) error { - m.lastPatch = obj.DeepCopyObject() +func (m *mockClient) Patch(ctx context.Context, obj client.Object, patch client.Patch, opts ...client.PatchOption) error { + m.lastPatch = obj.DeepCopyObject().(client.Object) return m.PatchErr } -func (m *mockClient) LastPatch() runtime.Object { +func (m *mockClient) LastPatch() client.Object { return m.lastPatch } -func (m *mockClient) DeleteAllOf(ctx context.Context, obj runtime.Object, opts ...client.DeleteAllOfOption) error { - m.lastDeleteAllOf = obj.DeepCopyObject() +func (m *mockClient) DeleteAllOf(ctx context.Context, obj client.Object, opts ...client.DeleteAllOfOption) error { + m.lastDeleteAllOf = obj.DeepCopyObject().(client.Object) return m.DeleteAllOfErr } -func (m *mockClient) LastDeleteAllOf() runtime.Object { +func (m *mockClient) LastDeleteAllOf() client.Object { return m.lastDeleteAllOf } @@ -107,8 +108,8 @@ func (m *mockClient) Status() client.StatusWriter { return m.statusWriter } -func (s *mockStatusWriter) Update(ctx context.Context, obj runtime.Object, opts ...client.UpdateOption) error { - s.lastStatusUpdate = obj.DeepCopyObject() +func (s *mockStatusWriter) Update(ctx context.Context, obj client.Object, opts ...client.SubResourceUpdateOption) error { + s.lastStatusUpdate = obj.DeepCopyObject().(client.Object) if s.ErrChan != nil { err := <-s.ErrChan return err @@ -117,15 +118,23 @@ func (s *mockStatusWriter) Update(ctx context.Context, obj runtime.Object, opts } -func (m *mockClient) LastStatusUpdate() runtime.Object { +func (s *mockStatusWriter) Create(ctx context.Context, obj client.Object, subResource client.Object, opts ...client.SubResourceCreateOption) error { + panic("implement me") +} + +func (m *mockClient) LastStatusUpdate() client.Object { return m.lastStatusUpdate } -func (s *mockStatusWriter) Patch(ctx context.Context, obj runtime.Object, patch client.Patch, opts ...client.PatchOption) error { - s.lastStatusPatch = obj.DeepCopyObject() +func (s *mockStatusWriter) Patch(ctx context.Context, obj client.Object, patch client.Patch, opts ...client.SubResourcePatchOption) error { + s.lastStatusPatch = obj.DeepCopyObject().(client.Object) return s.StatusPatchErr } -func (m *mockClient) LastStatusPatch() runtime.Object { +func (m *mockClient) LastStatusPatch() client.Object { return m.lastStatusPatch } + +func (m *mockClient) Watch(ctx context.Context, obj client.ObjectList, opts ...client.ListOption) (watch.Interface, error) { + panic("not implemented") +} diff --git a/controllers/service_controller.go b/controllers/service_controller.go index e31ac81c..136320d8 100644 --- a/controllers/service_controller.go +++ b/controllers/service_controller.go @@ -57,7 +57,7 @@ const ( type ServiceReconciler struct { client.Client Log logr.Logger - Scheme *runtime.Scheme + scheme *runtime.Scheme CreateCFServiceInstance cfservice.InstanceCreator CreateResourceServiceInstance resource.ServiceInstanceCreator @@ -70,6 +70,10 @@ type ServiceReconciler struct { UpdateResourceServiceInstance resource.ServiceInstanceUpdater } +func (s ServiceReconciler) Scheme() *runtime.Scheme { + return s.scheme +} + func (r *ServiceReconciler) SetupWithManager(mgr ctrl.Manager, options controller.Options) error { return ctrl.NewControllerManagedBy(mgr). WithOptions(options). @@ -83,8 +87,7 @@ func (r *ServiceReconciler) SetupWithManager(mgr ctrl.Manager, options controlle // Reconcile reads the state of the cluster for a Service object and makes changes based on the state read // and what is in the Service.Spec. // Automatically generate RBAC rules to allow the Controller to read and write Deployments. -func (r *ServiceReconciler) Reconcile(request ctrl.Request) (ctrl.Result, error) { - ctx := context.Background() +func (r *ServiceReconciler) Reconcile(ctx context.Context, request ctrl.Request) (ctrl.Result, error) { logt := r.Log.WithValues("service", request.NamespacedName) // Fetch the Service instance diff --git a/controllers/service_controller_test.go b/controllers/service_controller_test.go index bb032bdd..83ddf8cc 100644 --- a/controllers/service_controller_test.go +++ b/controllers/service_controller_test.go @@ -259,14 +259,14 @@ func TestServiceLoadServiceFailed(t *testing.T) { t.Run("not found error", func(t *testing.T) { scheme := schemas(t) - objects := []runtime.Object{} + objects := []client.Object{} r := &ServiceReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } - - result, err := r.Reconcile(ctrl.Request{ + context.Background() + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -275,14 +275,14 @@ func TestServiceLoadServiceFailed(t *testing.T) { t.Run("other error", func(t *testing.T) { scheme := runtime.NewScheme() - objects := []runtime.Object{} + objects := []client.Object{} r := &ServiceReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -299,7 +299,7 @@ func TestServiceSpecChangedAndUpdateFailed(t *testing.T) { ) scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -309,14 +309,14 @@ func TestServiceSpecChangedAndUpdateFailed(t *testing.T) { } r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{UpdateErr: fmt.Errorf("failed")}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -332,7 +332,7 @@ func TestServiceGetIBMCloudInfoFailed(t *testing.T) { now := metav1Now(t) scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: serviceName, @@ -348,18 +348,18 @@ func TestServiceGetIBMCloudInfoFailed(t *testing.T) { t.Run("not found error", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{UpdateErr: fmt.Errorf("failed")}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return nil, errors.NewNotFound(ctrl.GroupResource{Group: "ibmcloud.ibm.com", Resource: "secret"}, "ibmcloud-operator-secret") }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -383,20 +383,20 @@ func TestServiceGetIBMCloudInfoFailed(t *testing.T) { t.Run("other error", func(t *testing.T) { fakeClient := newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ) r := &ServiceReconciler{ Client: fakeClient, Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, r client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return nil, fmt.Errorf("failed") }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -430,7 +430,7 @@ func TestServiceFirstStatusFailed(t *testing.T) { ) scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{}, @@ -438,18 +438,18 @@ func TestServiceFirstStatusFailed(t *testing.T) { } r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{StatusUpdateErr: fmt.Errorf("failed")}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, r client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -464,7 +464,7 @@ func TestServiceEnsureFinalizerFailed(t *testing.T) { ) scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: serviceName, @@ -478,20 +478,20 @@ func TestServiceEnsureFinalizerFailed(t *testing.T) { } var r *ServiceReconciler r = &ServiceReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { r.Client = newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{UpdateErr: fmt.Errorf("failed")}, ) return &ibmcloud.Info{}, nil }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -520,7 +520,7 @@ func TestServiceDeletingFailed(t *testing.T) { t.Run("service delete failed", func(t *testing.T) { scheme := schemas(t) now := metav1Now(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: serviceName, @@ -535,13 +535,13 @@ func TestServiceDeletingFailed(t *testing.T) { var r *ServiceReconciler r = &ServiceReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { r.Client = newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ) return &ibmcloud.Info{}, nil @@ -551,7 +551,7 @@ func TestServiceDeletingFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -564,7 +564,7 @@ func TestServiceDeletingFailed(t *testing.T) { t.Run("update failed", func(t *testing.T) { scheme := schemas(t) now := metav1Now(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: serviceName, @@ -579,20 +579,20 @@ func TestServiceDeletingFailed(t *testing.T) { var r *ServiceReconciler r = &ServiceReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { r.Client = newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{UpdateErr: fmt.Errorf("failed")}, ) return &ibmcloud.Info{}, nil }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -621,7 +621,7 @@ func TestServiceGetParamsFailed(t *testing.T) { ) scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -648,18 +648,18 @@ func TestServiceGetParamsFailed(t *testing.T) { } r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -708,7 +708,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("create - empty service ID", func(t *testing.T) { scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{Plan: "Lite", ServiceClass: "service-name"}, @@ -718,11 +718,11 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { var createErr error r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{ @@ -736,7 +736,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("success", func(t *testing.T) { createErr = nil - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -765,7 +765,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("failed", func(t *testing.T) { createErr = fmt.Errorf("failed") - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -793,7 +793,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("create alias success", func(t *testing.T) { scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -809,11 +809,11 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { } r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{ @@ -828,7 +828,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -860,7 +860,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("ensure alias - empty instance ID", func(t *testing.T) { scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -877,11 +877,11 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { var getInstanceErr error r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{ @@ -895,7 +895,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("success", func(t *testing.T) { getInstanceErr = nil - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -927,7 +927,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("failed", func(t *testing.T) { getInstanceErr = fmt.Errorf("failed") - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -959,7 +959,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("get instance failed - not found", func(t *testing.T) { scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -975,11 +975,11 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { } r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{ @@ -994,7 +994,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1023,7 +1023,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("get instance failed - not found, create failed", func(t *testing.T) { scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -1039,11 +1039,11 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { } r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{ @@ -1058,7 +1058,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1086,7 +1086,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("get instance failed - other error", func(t *testing.T) { scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -1102,11 +1102,11 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { } r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{ @@ -1118,7 +1118,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1146,7 +1146,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { t.Run("ensure alias - instance does not exist", func(t *testing.T) { scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -1162,11 +1162,11 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { } r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{ @@ -1178,7 +1178,7 @@ func TestServiceEnsureCFServiceExists(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1217,7 +1217,7 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { t.Run("alias", func(t *testing.T) { scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -1234,11 +1234,11 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { t.Run("success", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1247,7 +1247,7 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { return "guid", "state", nil }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) @@ -1281,11 +1281,11 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { t.Run("not found", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1297,7 +1297,7 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { panic("Must not re-create an alias service") // https://github.com/IBM/cloud-operators/issues/71 }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) @@ -1329,11 +1329,11 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { t.Run("other error", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1345,7 +1345,7 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { panic("Must not re-create an alias service") // https://github.com/IBM/cloud-operators/issues/71 }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) @@ -1377,7 +1377,7 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { t.Run("non-alias", func(t *testing.T) { scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -1394,11 +1394,11 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { t.Run("success", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1408,7 +1408,7 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1441,18 +1441,18 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { t.Run("update status failed", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{StatusUpdateErr: fmt.Errorf("failed")}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -1481,11 +1481,11 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { t.Run("create failed", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1495,7 +1495,7 @@ func TestServiceEnsureResourceServiceInstance(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1533,7 +1533,7 @@ func TestServiceVerifyExists(t *testing.T) { serviceName = "myservice" ) scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -1547,7 +1547,7 @@ func TestServiceVerifyExists(t *testing.T) { }, }, } - aliasObjects := []runtime.Object{ + aliasObjects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -1565,11 +1565,11 @@ func TestServiceVerifyExists(t *testing.T) { t.Run("success", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1579,7 +1579,7 @@ func TestServiceVerifyExists(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1613,11 +1613,11 @@ func TestServiceVerifyExists(t *testing.T) { var createErr error r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1632,7 +1632,7 @@ func TestServiceVerifyExists(t *testing.T) { t.Run("success", func(t *testing.T) { createErr = nil - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1664,7 +1664,7 @@ func TestServiceVerifyExists(t *testing.T) { t.Run("create error", func(t *testing.T) { createErr = fmt.Errorf("failed") - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1697,11 +1697,11 @@ func TestServiceVerifyExists(t *testing.T) { t.Run("not found non-alias - status update failed", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{StatusUpdateErr: fmt.Errorf("failed")}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1711,7 +1711,7 @@ func TestServiceVerifyExists(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{}, result) @@ -1740,11 +1740,11 @@ func TestServiceVerifyExists(t *testing.T) { t.Run("not found alias", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, aliasObjects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(aliasObjects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1757,7 +1757,7 @@ func TestServiceVerifyExists(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1789,11 +1789,11 @@ func TestServiceVerifyExists(t *testing.T) { t.Run("other error alias", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, aliasObjects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(aliasObjects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1806,7 +1806,7 @@ func TestServiceVerifyExists(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1838,11 +1838,11 @@ func TestServiceVerifyExists(t *testing.T) { t.Run("other error", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1852,7 +1852,7 @@ func TestServiceVerifyExists(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -1889,7 +1889,7 @@ func TestServiceUpdateTagsOrParamsFailed(t *testing.T) { serviceName = "myservice" ) scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &ibmcloudv1.Service{ ObjectMeta: metav1.ObjectMeta{Name: serviceName, Namespace: namespace}, Status: ibmcloudv1.ServiceStatus{ @@ -1907,11 +1907,11 @@ func TestServiceUpdateTagsOrParamsFailed(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, objects...), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, GetIBMCloudInfo: func(logt logr.Logger, _ client.Client, instance *ibmcloudv1.Service) (*ibmcloud.Info, error) { return &ibmcloud.Info{}, nil @@ -1924,7 +1924,7 @@ func TestServiceUpdateTagsOrParamsFailed(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: serviceName, Namespace: namespace}, }) assert.Equal(t, ctrl.Result{ @@ -2182,7 +2182,7 @@ func TestServiceParamValueToJSON(t *testing.T) { namespace = "mynamespace" ) - objects := []runtime.Object{ + objects := []client.Object{ &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{Name: secretName, Namespace: namespace}, Data: map[string][]byte{ @@ -2283,9 +2283,9 @@ func TestServiceParamValueToJSON(t *testing.T) { t.Run(tc.description, func(t *testing.T) { scheme := schemas(t) r := &ServiceReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } j, err := r.paramValueToJSON(context.TODO(), tc.valueFrom, namespace) @@ -2321,11 +2321,11 @@ func TestServiceUpdateStatusFailed(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, instance), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(instance).Build(), MockConfig{StatusUpdateErr: fmt.Errorf("failed")}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } result, err := r.updateStatus(nil, r.Log, instance, ibmcloudv1.ResourceContext{}, "myinstanceid", "state", "") @@ -2374,11 +2374,11 @@ func TestServiceUpdateStatusError(t *testing.T) { t.Run("no such host", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, instance), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(instance).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } result, err := r.updateStatusError(instance, "state", fmt.Errorf("no such host")) @@ -2392,11 +2392,11 @@ func TestServiceUpdateStatusError(t *testing.T) { t.Run("status update failed", func(t *testing.T) { r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, instance), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(instance).Build(), MockConfig{StatusUpdateErr: fmt.Errorf("failed")}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } result, err := r.updateStatusError(instance, "state", fmt.Errorf("some error")) @@ -2457,11 +2457,11 @@ func TestDeleteService(t *testing.T) { instanceCopy.Status.Plan = aliasPlan r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, &instanceCopy), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(&instanceCopy).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } err := r.deleteService(nil, r.Log, &instanceCopy, "") @@ -2473,11 +2473,11 @@ func TestDeleteService(t *testing.T) { instanceCopy.Status.InstanceID = "" r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, &instanceCopy), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(&instanceCopy).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, } err := r.deleteService(nil, r.Log, &instanceCopy, "") @@ -2488,11 +2488,11 @@ func TestDeleteService(t *testing.T) { someErr := fmt.Errorf("some error") r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, instance), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(instance).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, DeleteCFServiceInstance: func(session *session.Session, instanceID string, logt logr.Logger) error { return someErr @@ -2507,11 +2507,11 @@ func TestDeleteService(t *testing.T) { someErr := fmt.Errorf("some error") r := &ServiceReconciler{ Client: newMockClient( - fake.NewFakeClientWithScheme(scheme, instance), + fake.NewClientBuilder().WithScheme(scheme).WithObjects(instance).Build(), MockConfig{}, ), Log: testLogger(t), - Scheme: scheme, + scheme: scheme, DeleteResourceServiceInstance: func(session *session.Session, instanceID string, logt logr.Logger) error { return someErr diff --git a/controllers/status_test.go b/controllers/status_test.go index 6ed9df20..7cdd3cce 100644 --- a/controllers/status_test.go +++ b/controllers/status_test.go @@ -2,14 +2,14 @@ package controllers import ( "context" + "sigs.k8s.io/controller-runtime/pkg/client" "testing" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" ) -func getObject(ctx context.Context, meta metav1.ObjectMeta, v runtime.Object) error { +func getObject(ctx context.Context, meta metav1.ObjectMeta, v client.Object) error { return k8sClient.Get(ctx, types.NamespacedName{ Name: meta.Name, Namespace: meta.Namespace, @@ -17,7 +17,7 @@ func getObject(ctx context.Context, meta metav1.ObjectMeta, v runtime.Object) er } type statuser interface { - runtime.Object + client.Object GetState() string } diff --git a/controllers/suite_test.go b/controllers/suite_test.go index c9c5ac37..8285a033 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -147,7 +147,7 @@ func mainSetup(ctx context.Context) error { } go func() { - err = k8sManager.Start(ctx.Done()) + err = k8sManager.Start(ctx) if err != nil { panic("Failed to start manager: " + err.Error()) } diff --git a/controllers/token_controller.go b/controllers/token_controller.go index a6a2373f..294b1de9 100644 --- a/controllers/token_controller.go +++ b/controllers/token_controller.go @@ -48,8 +48,7 @@ type TokenReconciler struct { } // Reconcile computes IAM and UAA tokens -func (r *TokenReconciler) Reconcile(request ctrl.Request) (ctrl.Result, error) { - ctx := context.Background() +func (r *TokenReconciler) Reconcile(ctx context.Context, request ctrl.Request) (ctrl.Result, error) { logt := r.Log.WithValues("token", request.NamespacedName) logt.Info("reconciling IBM cloud IAM tokens", "secretRef", request.Name) @@ -134,9 +133,9 @@ func (r *TokenReconciler) SetupWithManager(mgr ctrl.Manager, options controller. func eventsFilter() predicate.Funcs { return predicate.Funcs{ - CreateFunc: func(e event.CreateEvent) bool { return shouldProcessSecret(e.Meta) }, - DeleteFunc: func(e event.DeleteEvent) bool { return shouldProcessSecret(e.Meta) }, - UpdateFunc: func(e event.UpdateEvent) bool { return shouldProcessSecret(e.MetaNew) }, + CreateFunc: func(e event.CreateEvent) bool { return shouldProcessSecret(e.Object) }, + DeleteFunc: func(e event.DeleteEvent) bool { return shouldProcessSecret(e.Object) }, + UpdateFunc: func(e event.UpdateEvent) bool { return shouldProcessSecret(e.ObjectNew) }, } } diff --git a/controllers/token_controller_test.go b/controllers/token_controller_test.go index f61f66e5..1cdf1368 100644 --- a/controllers/token_controller_test.go +++ b/controllers/token_controller_test.go @@ -3,6 +3,7 @@ package controllers import ( "context" "fmt" + "k8s.io/apiserver/pkg/storage/testresource" "testing" "time" @@ -12,7 +13,6 @@ import ( corev1 "k8s.io/api/core/v1" k8sErrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" @@ -83,7 +83,7 @@ func TestToken(t *testing.T) { func TestTokenFailedAuth(t *testing.T) { t.Parallel() scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{Name: "ibmcloud-operator-secret"}, Data: map[string][]byte{ @@ -92,7 +92,7 @@ func TestTokenFailedAuth(t *testing.T) { }, } r := &TokenReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), Scheme: scheme, Authenticate: func(apiKey, region string) (auth.Credentials, error) { @@ -100,7 +100,7 @@ func TestTokenFailedAuth(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "ibmcloud-operator-secret"}, }) assert.EqualError(t, err, "failure") @@ -111,23 +111,23 @@ func TestTokenFailedSecretLookup(t *testing.T) { t.Parallel() scheme := schemas(t) r := &TokenReconciler{ - Client: fake.NewFakeClientWithScheme(scheme), + Client: fake.NewClientBuilder().WithScheme(scheme).Build(), Log: testLogger(t), Scheme: scheme, Authenticate: nil, // should not be called } t.Run("not found", func(t *testing.T) { - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "ibmcloud-operator-secret"}, }) assert.NoError(t, err, "Don't retry (return err) if secret no longer exists") assert.Equal(t, ctrl.Result{}, result) }) - r.Client = fake.NewFakeClientWithScheme(runtime.NewScheme()) // fail to read the type Secret + r.Client = fake.NewClientBuilder().Build() // fail to read the type Secret t.Run("failed to read secret", func(t *testing.T) { - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "ibmcloud-operator-secret"}, }) assert.Error(t, err) @@ -140,7 +140,7 @@ func TestTokenSecretIsDeleting(t *testing.T) { t.Parallel() scheme := schemas(t) now := metav1Now(t) - objects := []runtime.Object{ + objects := []client.Object{ &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "ibmcloud-operator-secret", @@ -149,13 +149,13 @@ func TestTokenSecretIsDeleting(t *testing.T) { }, } r := &TokenReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), Scheme: scheme, Authenticate: nil, // should not be called } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "ibmcloud-operator-secret"}, }) assert.NoError(t, err, "Don't retry (return err) if secret is deleting") @@ -165,20 +165,20 @@ func TestTokenSecretIsDeleting(t *testing.T) { func TestTokenAPIKeyIsMissing(t *testing.T) { t.Parallel() scheme := schemas(t) - objects := []runtime.Object{ + objects := []client.Object{ &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{Name: "ibmcloud-operator-secret"}, Data: nil, // no API key }, } r := &TokenReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), Scheme: scheme, Authenticate: nil, // should not be called } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "ibmcloud-operator-secret"}, }) assert.NoError(t, err, "Don't retry (return err) if secret does not contain an api-key entry") @@ -192,7 +192,7 @@ func TestTokenAuthInvalidConfig(t *testing.T) { apiKey = "some API key" region = "some invalid region" ) - objects := []runtime.Object{ + objects := []client.Object{ &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{Name: "ibmcloud-operator-secret"}, Data: map[string][]byte{ @@ -202,7 +202,7 @@ func TestTokenAuthInvalidConfig(t *testing.T) { }, } r := &TokenReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), Scheme: scheme, Authenticate: func(actualAPIKey, actualRegion string) (auth.Credentials, error) { @@ -212,7 +212,7 @@ func TestTokenAuthInvalidConfig(t *testing.T) { }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "ibmcloud-operator-secret"}, }) assert.NoError(t, err, "Don't retry (return err) if secret region is invalid") @@ -227,7 +227,7 @@ func TestTokenDeleteFailed(t *testing.T) { region = "some invalid region" accessToken = "some access token" ) - objects := []runtime.Object{ + objects := []client.Object{ &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{Name: "ibmcloud-operator-secret"}, Data: map[string][]byte{ @@ -238,20 +238,21 @@ func TestTokenDeleteFailed(t *testing.T) { } var r *TokenReconciler r = &TokenReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), + Log: testLogger(t), Scheme: scheme, Authenticate: func(actualAPIKey, actualRegion string) (auth.Credentials, error) { assert.Equal(t, apiKey, actualAPIKey) assert.Equal(t, region, actualRegion) - r.Client = fake.NewFakeClientWithScheme(runtime.NewScheme()) // trigger later failure of r.Client.Delete + r.Client = fake.NewClientBuilder().Build() // trigger later failure of r.Client.Delete return auth.Credentials{ IAMAccessToken: accessToken, }, nil }, } - result, err := r.Reconcile(ctrl.Request{ + result, err := r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "ibmcloud-operator-secret"}, }) assert.Error(t, err) @@ -273,7 +274,7 @@ func TestTokenRaceCreateFailed(t *testing.T) { "access_token": []byte("old " + accessToken), }, } - objects := []runtime.Object{ + objects := []client.Object{ &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{Name: "ibmcloud-operator-secret"}, Data: map[string][]byte{ @@ -284,7 +285,7 @@ func TestTokenRaceCreateFailed(t *testing.T) { tokensSecret, } r := &TokenReconciler{ - Client: fake.NewFakeClientWithScheme(scheme, objects...), + Client: fake.NewClientBuilder().WithScheme(scheme).WithObjects(objects...).Build(), Log: testLogger(t), Scheme: scheme, Authenticate: func(actualAPIKey, actualRegion string) (auth.Credentials, error) { @@ -313,7 +314,7 @@ func TestTokenRaceCreateFailed(t *testing.T) { var result ctrl.Result var err error require.Eventually(t, func() bool { - result, err = r.Reconcile(ctrl.Request{ + result, err = r.Reconcile(context.Background(), ctrl.Request{ NamespacedName: types.NamespacedName{Name: "ibmcloud-operator-secret"}, }) return err != nil @@ -348,12 +349,13 @@ func TestTokenEventsFilter(t *testing.T) { t.Parallel() filter := eventsFilter() - shouldProcessEvent := &metav1.ObjectMeta{Name: icoSecretName} - shouldNotProcessEvent := &metav1.ObjectMeta{} - assert.True(t, filter.CreateFunc(event.CreateEvent{Meta: shouldProcessEvent})) - assert.False(t, filter.CreateFunc(event.CreateEvent{Meta: shouldNotProcessEvent})) - assert.True(t, filter.DeleteFunc(event.DeleteEvent{Meta: shouldProcessEvent})) - assert.False(t, filter.DeleteFunc(event.DeleteEvent{Meta: shouldNotProcessEvent})) - assert.True(t, filter.UpdateFunc(event.UpdateEvent{MetaNew: shouldProcessEvent})) - assert.False(t, filter.UpdateFunc(event.UpdateEvent{MetaNew: shouldNotProcessEvent})) + //shouldProcessEvent := &metav1.ObjectMeta{Name: icoSecretName} + shouldProcessEvent := &testresource.TestResource{ObjectMeta: metav1.ObjectMeta{Name: icoSecretName}} + shouldNotProcessEvent := &testresource.TestResource{ObjectMeta: metav1.ObjectMeta{}} + assert.True(t, filter.CreateFunc(event.CreateEvent{shouldProcessEvent})) + assert.False(t, filter.CreateFunc(event.CreateEvent{shouldNotProcessEvent})) + assert.True(t, filter.DeleteFunc(event.DeleteEvent{shouldProcessEvent, true})) + assert.False(t, filter.DeleteFunc(event.DeleteEvent{shouldNotProcessEvent, false})) + assert.True(t, filter.UpdateFunc(event.UpdateEvent{shouldProcessEvent, shouldProcessEvent})) + assert.False(t, filter.UpdateFunc(event.UpdateEvent{shouldNotProcessEvent, shouldNotProcessEvent})) } diff --git a/go.mod b/go.mod index 9389f5f0..9eb5940c 100644 --- a/go.mod +++ b/go.mod @@ -1,29 +1,102 @@ module github.com/ibm/cloud-operators -go 1.14 +go 1.22.0 + +toolchain go1.22.2 require ( github.com/IBM-Cloud/bluemix-go v0.0.0-20200716122208-488c9de67b8c github.com/blang/semver/v4 v4.0.0 - github.com/coreos/etcd v3.3.25+incompatible // indirect github.com/ghodss/yaml v1.0.0 - github.com/go-git/go-git/v5 v5.1.0 - github.com/go-logr/logr v0.1.0 - github.com/go-logr/zapr v0.1.0 - github.com/gogo/protobuf v1.3.2 // indirect - github.com/gorilla/websocket v1.4.2 // indirect + github.com/go-git/go-git/v5 v5.11.0 + github.com/go-logr/logr v1.4.1 + github.com/go-logr/zapr v1.3.0 github.com/johnstarich/go/regext v0.0.1 github.com/kelseyhightower/envconfig v1.4.0 - github.com/pkg/errors v0.8.1 - github.com/stretchr/testify v1.6.1 - go.uber.org/zap v1.10.0 - golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect - gopkg.in/yaml.v2 v2.2.8 - k8s.io/api v0.17.17 - k8s.io/apiextensions-apiserver v0.17.17 - k8s.io/apimachinery v0.17.17 - k8s.io/client-go v0.17.17 - sigs.k8s.io/controller-runtime v0.5.1 + github.com/pkg/errors v0.9.1 + github.com/stretchr/testify v1.8.4 + go.uber.org/zap v1.26.0 + gopkg.in/yaml.v2 v2.4.0 + k8s.io/api v0.30.0 + k8s.io/apiextensions-apiserver v0.30.0 + k8s.io/apimachinery v0.30.0 + k8s.io/apiserver v0.30.0 + k8s.io/client-go v0.30.0 + sigs.k8s.io/controller-runtime v0.18.2 + +) + +require ( + dario.cat/mergo v1.0.0 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cloudflare/circl v1.3.3 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/imdario/mergo v0.3.10 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/onsi/ginkgo v1.16.5 // indirect + github.com/pjbgf/sha1cd v0.3.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.18.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/sergi/go-diff v1.1.0 // indirect + github.com/skeema/knownhosts v1.2.1 // indirect + github.com/softlayer/softlayer-go v1.1.3 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect + golang.org/x/mod v0.15.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/oauth2 v0.12.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/term v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.18.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/klog/v2 v2.120.1 // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect + k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) replace github.com/dgrijalva/jwt-go => github.com/form3tech-oss/jwt-go v3.2.1+incompatible // FIXME: https://github.com/dgrijalva/jwt-go/issues/463 diff --git a/go.sum b/go.sum index 111f33fb..54aac64d 100644 --- a/go.sum +++ b/go.sum @@ -1,731 +1,346 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/IBM-Cloud/bluemix-go v0.0.0-20200716122208-488c9de67b8c h1:XyC8W3VaFhl0ameM9tfr6dh2DyC3ZYkX3D+vtK8Hvrc= github.com/IBM-Cloud/bluemix-go v0.0.0-20200716122208-488c9de67b8c/go.mod h1:gPJbH1etcDj7qS/hBRiLuYW9CY0bRcostSKusa51xR0= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 h1:lsxEuwrXEAokXB9qhlbKWPpo3KMLZQ5WB5WLQRW1uq0= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -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/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= 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/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.25+incompatible h1:0GQEw6h3YnuOVdtwygkIfJ+Omx0tZ8/QkVyXI4LkbeY= -github.com/coreos/etcd v3.3.25+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea h1:n2Ltr3SrfQlf/9nOna1DoGKxLx3qTSI8Ttl6Xrqp6mw= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0 h1:w3NnFcKR5241cfmQU5ZZAsf0xcpId6mWOupTvJlUX2U= -github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e h1:p1yVGRW3nmb85p1Sh1ZJSDm4A4iKLS5QNbvUHMgGu/M= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= -github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/form3tech-oss/jwt-go v3.2.1+incompatible h1:xdtqez379uWVJ9P3qQMX8W+F/nqsTdUvyMZB36tnacA= -github.com/form3tech-oss/jwt-go v3.2.1+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= +github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.0.0 h1:7NQHvd9FVid8VL4qVUMm8XifBK+2xCoZ2lSk0agRrHM= -github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git v1.0.0 h1:YcN9iDGDoXuIw0vHls6rINwV416HYa0EB2X+RBsyYp4= -github.com/go-git/go-git v4.7.0+incompatible h1:+W9rgGY4DOKKdX2x6HxSR7HNeTxqiKrOvKnuittYVdA= -github.com/go-git/go-git-fixtures/v4 v4.0.1 h1:q+IFMfLx200Q3scvt2hN79JsEzy4AmBTp/pqnefH+Bc= -github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= -github.com/go-git/go-git/v5 v5.1.0 h1:HxJn9g/E7eYvKW3Fm7Jt4ee8LXfPOm/H1cdDu8vEssk= -github.com/go-git/go-git/v5 v5.1.0/go.mod h1:ZKfuPUoY1ZqIG4QG9BDBh3G4gLM5zvPuSJAozQrZuyM= -github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0 h1:8HUsc87TaSWLKwrnumgC8/YconD2fJQsRJAsWaPg2ic= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/zapr v0.1.0 h1:h+WVe9j6HAA01niTJPA/kKH0i7e0rLZBCwauQFcRE54= -github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5 h1:8b2ZgKfKIUTVQpTb77MoRDIMEIwvDVw40o3aOXdfYzI= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/loads v0.19.4 h1:5I4CCSqoWzT+82bBkNIvmLc0UOsoKKQ4Fz+3VxOB7SY= -github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= -github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4 h1:csnOgcgAiuGoM/Po7PEpKDoNulCcF3FGbSnbHfxgjMI= -github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.3 h1:eRfyY5SkaNJCAwmmMcADjY31ow9+N7MCLW7oRkbsINA= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-openapi/validate v0.19.5 h1:QhCBKRYqZR+SKo4gl1lPhPahope8/RLt6EVgY8X80w0= -github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= +github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= +github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7 h1:u4bArs140e9+AfE52mFHOXVFnOSBJBRlzTHrOPLOIhE= -github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef h1:veQD95Isof8w9/WXiA+pa3tz3fJXkt5B7QaRBrM62gk= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57 h1:eqyIo2HjKhKe/mJzTG8n4VqvLXIOEG+SLdDqX7xGtkY= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk= -github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= -github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 h1:z53tR0945TRRQO/fLEVPI6SMv7ZflF0TEaTAoU7tOzg= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1QAp/SlnNrZhI= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= -github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +github.com/imdario/mergo v0.3.10 h1:6q5mVkdH/vYmqngx7kZQTjJ5HRsx+ImorDIEQ+beJgc= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/johnstarich/go v0.1.2 h1:F9dlaaVfeouu87o0phoCutz41FlzrFYKzwC4gV/DRlg= github.com/johnstarich/go/regext v0.0.1 h1:0eCRbomLnYuwh0l74utVdTOlXv4q/7KJ2JjpAMu5zmg= github.com/johnstarich/go/regext v0.0.1/go.mod h1:UGUAdm8ZhbWAy0NDll/K2eASPCSfL1k6sXqNEfmytW0= -github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0 h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5 h1:hyz3dwM5QLc1Rfoz4FuWJQG5BN7tc6K1MndAUnGpQr4= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-runewidth v0.0.2 h1:UnlwIPBGaTZfPQ6T1IGzPI0EkYAQmT9fAEJ/poFC63o= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5 h1:58+kh9C6jJVXYjt8IE48G2eWl6BjwU5Gj0gqY84fy78= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -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.8.1 h1:C5Dqfs/LeauYDX0jJXIe2SWmwCbGzx9yF8C8xy3Lh34= -github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +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.17.1 h1:V++EzdbhI4ZV4ev0UTIj0PzhzOcReJFyJaLjtSF55M8= +github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.32.0 h1:JRYU78fJ1LPxlckP6Txi/EYqJvjtMrDC04/MM5XRHPk= +github.com/onsi/gomega v1.32.0/go.mod h1:a4x4gW6Pz2yK1MAmvluYme5lvYTn61afQ2ETw/8n4Lg= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 h1:0XM1XL/OFFJjXsYXlG30spTkV/E9+gmd5GD1w2HE8xM= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446 h1:/NRJ5vAYoqz+7sG51ubIDHXeWO8DlTSrToPu6q11ziA= -github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= +github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/softlayer/softlayer-go v1.0.1 h1:3exfsP0JtTEmUQXEukjC95mzQuU/y+3RupGDGMiFV0Q= -github.com/softlayer/softlayer-go v1.0.1/go.mod h1:6HepcfAXROz0Rf63krk5hPZyHT6qyx2MNvYyHof7ik4= -github.com/softlayer/xmlrpc v0.0.0-20200409220501-5f089df7cb7e/go.mod h1:fKZCUVdirrxrBpwd9wb+lSoVixvpwAu8eHzbQB2tums= -github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= +github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= +github.com/softlayer/softlayer-go v1.1.3 h1:dfFzt5eOKIAyB/b78fHMyDu5ICx0ZtxL9NRhBlf831A= +github.com/softlayer/softlayer-go v1.1.3/go.mod h1:Pc7F57OgUKaAam7TtpqkUeqL7QyKknfiUI4R49h41/U= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 h1:ndzgwNDnKIqyCvHTXaCqh9KlOWKvBry6nuXMJmonVsE= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/vektah/gqlparser v1.1.2 h1:ZsyLGn7/7jDNI+y4SEhI4yAxRChlv15pUHMjijT+e68= -github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= -github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2 h1:jxcFYjlkl8xaERsgLo+RNquI0epW6zuy/ZRQs6jnrFA= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073 h1:xMPOj6Pz6UipU1wXLkrtqpHbR0AVFnyPEQq/wRWz9lM= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= -golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067 h1:KYGJGHOQy8oSi1fDlSpcZF0+juKwk/hEMv5SiwHogR0= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3 h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6 h1:Tus/Y4w3V77xDsGwKUC8a/QrV7jScpU557J77lFffNs= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6-0.20210227105805-e3aa4adf54f6 h1:lmoh2ZlEN/VfIYVdeta6HbTPLqajF5r8riIp1MACt2A= -golang.org/x/text v0.3.6-0.20210227105805-e3aa4adf54f6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 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= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200410194907-79a7a3126eef/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= +golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.0.1 h1:xyiBuvkD2g5n7cYzx6u2sxQvsAy4QJsZFCzGVdzOXZ0= -gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= -gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= -gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= -gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= -google.golang.org/api v0.4.0 h1:KKgc1aqhV8wDPbDzlDtpvyjZFY3vjz85FP7p4wcQUyI= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873 h1:nfPFGzJkUDX6uBmpN/pSw7MbOAWegH5QDQuoXFHedLg= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.1 h1:q4XQuHFC6I28BKZpo6IYyb3mNO+l7lSOxRuYTCiDfXk= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25 h1:Ev7yu1/f6+d+b3pi5vPdRPc6nNtP1umSfcWiEfRqv6I= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2 h1:orlkJ3myw8CN1nVQHBFfloD+L3egixIa4FvUP6RosSA= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc h1:/hemPrYIhOhy8zYrNj+069zDB68us2sMGsfkFJO0iZs= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.17.2 h1:NF1UFXcKN7/OOv1uxdRz3qfra8AHsPav5M93hlV9+Dc= -k8s.io/api v0.17.2/go.mod h1:BS9fjjLc4CMuqfSO8vgbHPKMt5+SF0ET6u/RVDihTo4= -k8s.io/api v0.17.17 h1:S+Yv5pdfvy9OG1t148zMFk3/l/VYpF1N4j5Y/q8IMdg= -k8s.io/api v0.17.17/go.mod h1:kk4nQM0EVx+BEY7o8CN5YL99CWmWEQ2a4NCak58yB6E= -k8s.io/apiextensions-apiserver v0.17.2 h1:cP579D2hSZNuO/rZj9XFRzwJNYb41DbNANJb6Kolpss= -k8s.io/apiextensions-apiserver v0.17.2/go.mod h1:4KdMpjkEjjDI2pPfBA15OscyNldHWdBCfsWMDWAmSTs= -k8s.io/apiextensions-apiserver v0.17.17 h1:e/11L0zMd9D2I/rI6MmJzVq7xwuctx4xJkosDujJy68= -k8s.io/apiextensions-apiserver v0.17.17/go.mod h1:nZzh2dEq91cFY287i3WiyRFN8fDwJfmPVATSeTHOsU0= -k8s.io/apimachinery v0.17.2 h1:hwDQQFbdRlpnnsR64Asdi55GyCaIP/3WQpMmbNBeWr4= -k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.17.17 h1:HMpFl9yqNI5G2+2WllKOe2XYLkCyaWzfXvk7SosyVko= -k8s.io/apimachinery v0.17.17/go.mod h1:T54ZSpncArE25c5r2PbUPsLeTpkPWY/ivafigSX6+xk= -k8s.io/apiserver v0.17.2/go.mod h1:lBmw/TtQdtxvrTk0e2cgtOxHizXI+d0mmGQURIHQZlo= -k8s.io/apiserver v0.17.17 h1:z4KUqdgspizVRjrepqvo0m1kmkBJiknwGTJxVgrjUaE= -k8s.io/apiserver v0.17.17/go.mod h1:YLMTTpDD5l0tzKyi7GvLW4/sot4nZ6lL5UYiQF/yyqU= -k8s.io/client-go v0.17.2 h1:ndIfkfXEGrNhLIgkr0+qhRguSD3u6DCmonepn1O6NYc= -k8s.io/client-go v0.17.2/go.mod h1:QAzRgsa0C2xl4/eVpeVAZMvikCn8Nm81yqVx3Kk9XYI= -k8s.io/client-go v0.17.17 h1:5jTDCwRXCKJwmPvtgTFgCSMIzdyAOUyPmSU3PHIuVVY= -k8s.io/client-go v0.17.17/go.mod h1:IpXd6i0FlhG3fJ+UuEWMfTUaDw6TlmMkpjmJrmbY6tY= -k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= -k8s.io/code-generator v0.17.17 h1:3OVdDDMzZ7lCIFSIegBkFW54tCxOwZyr6Gi28vu857I= -k8s.io/code-generator v0.17.17/go.mod h1:iiHz51+oTx+Z9D0vB3CH3O4HDDPWrvZyUgUYaIE9h9M= -k8s.io/component-base v0.17.2/go.mod h1:zMPW3g5aH7cHJpKYQ/ZsGMcgbsA/VyhEugF3QT1awLs= -k8s.io/component-base v0.17.17 h1:R0m0U+cRWY4n+mXpn0hb0NZHWzAtnUWiQHDal9PQa84= -k8s.io/component-base v0.17.17/go.mod h1:5KImCPgomJp3CDjSVPMiE56lp1gp/+T+25gmo/u0rh8= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -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 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLyy7rfbeuf1PYyBf973pgyU= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29 h1:NeQXVJ2XFSkRoPzRo8AId01ZER+j8oV4SZADT4iBOXQ= -k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU= -k8s.io/utils v0.0.0-20191114184206-e782cd3c129f h1:GiPwtSzdP43eI1hpPCbROQCCIgCuiMMNF8YUVLF3vJo= -k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -modernc.org/cc v1.0.0 h1:nPibNuDEx6tvYrUAtvDTTw98rx5juGsa5zuDnKwEEQQ= -modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= -modernc.org/golex v1.0.0 h1:wWpDlbK8ejRfSyi0frMyhilD3JBvtcx2AdGDnU+JtsE= -modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= -modernc.org/mathutil v1.0.0 h1:93vKjrJopTPrtTNpZ8XIovER7iCIH1QU7wNbOQXC60I= -modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/strutil v1.0.0 h1:XVFtQwFVwc02Wk+0L/Z/zDDXO81r5Lhe6iMKmGX3KhE= -modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/xc v1.0.0 h1:7ccXrupWZIS3twbUGrtKmHS2DXY6xegFua+6O3xgAFU= -modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= -sigs.k8s.io/controller-runtime v0.5.0 h1:CbqIy5fbUX+4E9bpnBFd204YAzRYlM9SWW77BbrcDQo= -sigs.k8s.io/controller-runtime v0.5.0/go.mod h1:REiJzC7Y00U+2YkMbT8wxgrsX5USpXKGhb2sCtAXiT8= -sigs.k8s.io/controller-runtime v0.5.1 h1:TNidCfVoU/cs2i+9xoTcL/l7yhl0bDhYXU0NCG6wmiE= -sigs.k8s.io/controller-runtime v0.5.1/go.mod h1:Uojny7gvg55YLQnEGnPzRE3dC4ik2tRlZJgOUCWXAV4= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU= -sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= -sigs.k8s.io/structured-merge-diff/v2 v2.0.1 h1:I0h4buiCqDtPztO3NOiyoNMtqSIfld49D4Wj3UBXYZA= -sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7mRH6DGaRcixXEJXTsE= -sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +k8s.io/api v0.30.0 h1:siWhRq7cNjy2iHssOB9SCGNCl2spiF1dO3dABqZ8niA= +k8s.io/api v0.30.0/go.mod h1:OPlaYhoHs8EQ1ql0R/TsUgaRPhpKNxIMrKQfWUp8QSE= +k8s.io/apiextensions-apiserver v0.30.0 h1:jcZFKMqnICJfRxTgnC4E+Hpcq8UEhT8B2lhBcQ+6uAs= +k8s.io/apiextensions-apiserver v0.30.0/go.mod h1:N9ogQFGcrbWqAY9p2mUAL5mGxsLqwgtUce127VtRX5Y= +k8s.io/apimachinery v0.30.0 h1:qxVPsyDM5XS96NIh9Oj6LavoVFYff/Pon9cZeDIkHHA= +k8s.io/apimachinery v0.30.0/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/apiserver v0.30.0 h1:QCec+U72tMQ+9tR6A0sMBB5Vh6ImCEkoKkTDRABWq6M= +k8s.io/apiserver v0.30.0/go.mod h1:smOIBq8t0MbKZi7O7SyIpjPsiKJ8qa+llcFCluKyqiY= +k8s.io/client-go v0.30.0 h1:sB1AGGlhY/o7KCyCEQ0bPWzYDL0pwOZO4vAtTSh/gJQ= +k8s.io/client-go v0.30.0/go.mod h1:g7li5O5256qe6TYdAMyX/otJqMhIiGgTapdLchhmOaY= +k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= +k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.18.2 h1:RqVW6Kpeaji67CY5nPEfRz6ZfFMk0lWQlNrLqlNpx+Q= +sigs.k8s.io/controller-runtime v0.18.2/go.mod h1:tuAt1+wbVsXIT8lPtk5RURxqAnq7xkpv2Mhttslg7Hw= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/internal/cmd/firstsetup/main.go b/internal/cmd/firstsetup/main.go index 18a03e23..712d86a2 100644 --- a/internal/cmd/firstsetup/main.go +++ b/internal/cmd/firstsetup/main.go @@ -1,6 +1,7 @@ package main import ( + "context" "fmt" "os" @@ -26,9 +27,10 @@ func run() error { if err != nil { return err } + ctx := context.Background() - _, secretErr := k8sClient.CoreV1().Secrets(namespace).Get("ibmcloud-operator-secret", metav1.GetOptions{}) - _, configMapErr := k8sClient.CoreV1().ConfigMaps(namespace).Get("ibmcloud-operator-defaults", metav1.GetOptions{}) + _, secretErr := k8sClient.CoreV1().Secrets(namespace).Get(ctx, "ibmcloud-operator-secret", metav1.GetOptions{}) + _, configMapErr := k8sClient.CoreV1().ConfigMaps(namespace).Get(ctx, "ibmcloud-operator-defaults", metav1.GetOptions{}) if secretErr == nil && configMapErr == nil { fmt.Println("IBM Cloud Operators configmap and secret already set up. Skipping...") return nil @@ -36,7 +38,7 @@ func run() error { config := config.MustGetIBMCloud() - _, err = k8sClient.CoreV1().Secrets(namespace).Create(&v1.Secret{ + _, err = k8sClient.CoreV1().Secrets(namespace).Create(ctx, &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "ibmcloud-operator-secret", Namespace: namespace, @@ -48,12 +50,12 @@ func run() error { "api-key": []byte(config.APIKey), "region": []byte(config.Region), }, - }) + }, metav1.CreateOptions{}) if err != nil { return err } - _, err = k8sClient.CoreV1().ConfigMaps(namespace).Create(&v1.ConfigMap{ + _, err = k8sClient.CoreV1().ConfigMaps(namespace).Create(ctx, &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: "ibmcloud-operator-defaults", Namespace: namespace, @@ -69,7 +71,7 @@ func run() error { "space": config.Space, "user": config.UserDisplayName, }, - }) + }, metav1.CreateOptions{}) return err } diff --git a/internal/ibmcloud/ibmcloud.go b/internal/ibmcloud/ibmcloud.go index ddb078fd..dba74242 100644 --- a/internal/ibmcloud/ibmcloud.go +++ b/internal/ibmcloud/ibmcloud.go @@ -20,7 +20,6 @@ import ( "github.com/ibm/cloud-operators/internal/config" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -293,7 +292,7 @@ func getIamToken(logt logr.Logger, r client.Client, instance *ibmcloudv1.Service return string(secret.Data["access_token"]), string(secret.Data["refresh_token"]), string(secret.Data["uaa_refresh_token"]), string(secret.Data["uaa_token"]), nil } -func getConfigOrSecret(logt logr.Logger, r client.Client, instanceNamespace string, objName string, obj runtime.Object) error { +func getConfigOrSecret(logt logr.Logger, r client.Client, instanceNamespace string, objName string, obj client.Object) error { defaultNamespace, isManagement := getDefaultNamespace(logt, r) if isManagement { objName = instanceNamespace + "-" + objName diff --git a/main.go b/main.go index a3846a45..c87ededd 100644 --- a/main.go +++ b/main.go @@ -18,15 +18,15 @@ package main import ( "flag" - "os" - "github.com/ibm/cloud-operators/controllers" "go.uber.org/zap" "k8s.io/apimachinery/pkg/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" _ "k8s.io/client-go/plugin/pkg/client/auth/oidc" + "os" ctrl "sigs.k8s.io/controller-runtime" zapLog "sigs.k8s.io/controller-runtime/pkg/log/zap" + metrics "sigs.k8s.io/controller-runtime/pkg/metrics/server" ibmcloudv1 "github.com/ibm/cloud-operators/api/v1" ibmcloudv1alpha1 "github.com/ibm/cloud-operators/api/v1alpha1" @@ -45,7 +45,7 @@ func init() { _ = ibmcloudv1alpha1.AddToScheme(scheme) _ = ibmcloudv1beta1.AddToScheme(scheme) _ = ibmcloudv1.AddToScheme(scheme) - // +kubebuilder:scaffold:scheme + // +kubebuil der:scaffold:scheme } func main() { @@ -60,11 +60,12 @@ func main() { ctrl.SetLogger(zapLog.New(zapLog.UseDevMode(true), zapLog.RawZapOpts(zap.AddCaller()))) mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ - Scheme: scheme, - MetricsBindAddress: metricsAddr, - Port: 9443, - LeaderElection: enableLeaderElection, - LeaderElectionID: "7c16769a.ibm.com", + Scheme: scheme, + Metrics: metrics.Options{ + BindAddress: metricsAddr, + }, + LeaderElection: enableLeaderElection, + LeaderElectionID: "7c16769a.ibm.com", }) if err != nil { setupLog.Error(err, "unable to start manager") From aa6689581b8e933234db6f2a2ff0e1a2725b8fe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9la=20Kov=C3=A1cs?= Date: Tue, 14 May 2024 14:17:36 +0200 Subject: [PATCH 2/3] Sign-off MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Béla Kovács From db24027f3cdd935697f5fce688ec4b3f2060ac80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9la=20Kov=C3=A1cs?= Date: Tue, 14 May 2024 15:42:48 +0200 Subject: [PATCH 3/3] Updating Makefile so controller-gen works --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 3883617b..88853098 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ KUBEBUILDER_VERSION = 2.3.1 export KUBEBUILDER_ASSETS = ${PWD}/cache/kubebuilder_${KUBEBUILDER_VERSION}/bin -CONTROLLER_GEN_VERSION = 0.8.0 +CONTROLLER_GEN_VERSION = 0.14.0 CONTROLLER_GEN=${PWD}/cache/controller-gen_${CONTROLLER_GEN_VERSION}/controller-gen LINT_VERSION = 1.28.3 GOSEC_VERSION="v2.9.2" @@ -177,7 +177,7 @@ cache/controller-gen_${CONTROLLER_GEN_VERSION}: cache trap "rm -rf $$CONTROLLER_GEN_TMP_DIR" EXIT ;\ cd $$CONTROLLER_GEN_TMP_DIR ;\ go mod init tmp ;\ - GOBIN=${PWD}/cache/controller-gen_${CONTROLLER_GEN_VERSION} go get sigs.k8s.io/controller-tools/cmd/controller-gen@v${CONTROLLER_GEN_VERSION} ;\ + GOBIN=${PWD}/cache/controller-gen_${CONTROLLER_GEN_VERSION} go install sigs.k8s.io/controller-tools/cmd/controller-gen@v${CONTROLLER_GEN_VERSION} ;\ fi out: