From 4edfd774d39dd47a3744317085332a22a404fefe Mon Sep 17 00:00:00 2001 From: Srinivas Atmakuri Date: Mon, 18 Sep 2023 11:39:03 +0530 Subject: [PATCH] rm SA and retry OnError instead Condition --- ...n_openshiftcluster_etcdcertificaterenew.go | 219 +++++++----------- ...nshiftcluster_etcdcertificaterenew_test.go | 32 +-- pkg/frontend/adminactions/azureactions.go | 5 - pkg/frontend/adminactions/blobStorage.go | 54 ----- pkg/util/mocks/adminactions/adminactions.go | 45 ---- 5 files changed, 94 insertions(+), 261 deletions(-) delete mode 100644 pkg/frontend/adminactions/blobStorage.go diff --git a/pkg/frontend/admin_openshiftcluster_etcdcertificaterenew.go b/pkg/frontend/admin_openshiftcluster_etcdcertificaterenew.go index 225e4ef1fb9..d5afc1353f3 100644 --- a/pkg/frontend/admin_openshiftcluster_etcdcertificaterenew.go +++ b/pkg/frontend/admin_openshiftcluster_etcdcertificaterenew.go @@ -13,18 +13,18 @@ import ( "strings" "time" - mgmtstorage "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" - azstorage "github.com/Azure/azure-sdk-for-go/storage" "github.com/go-chi/chi/v5" configv1 "github.com/openshift/api/config/v1" operatorv1 "github.com/openshift/api/operator/v1" "github.com/sirupsen/logrus" "github.com/ugorji/go/codec" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" kruntime "k8s.io/apimachinery/pkg/runtime" - "k8s.io/utils/strings/slices" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/util/retry" "github.com/Azure/ARO-RP/pkg/api" "github.com/Azure/ARO-RP/pkg/database/cosmosdb" @@ -33,23 +33,16 @@ import ( utilcert "github.com/Azure/ARO-RP/pkg/util/cert" utilpem "github.com/Azure/ARO-RP/pkg/util/pem" "github.com/Azure/ARO-RP/pkg/util/steps" - "github.com/Azure/ARO-RP/pkg/util/stringutils" "github.com/Azure/ARO-RP/pkg/util/version" ) type etcdrenew struct { - log *logrus.Entry - k adminactions.KubeActions - a adminactions.AzureActions - doc *api.OpenShiftClusterDocument - blobService *azstorage.BlobStorageClient - secretNames []string - mode string - backupSecrets map[string][]byte - lastRevision int32 - etcdSecretsRecovered []string - copyComplete []string - deleteComplete []string + log *logrus.Entry + k adminactions.KubeActions + secretNames []string + mode string + backupSecrets map[string][]byte + lastRevision int32 } var etcdOperatorControllerConditionsExpected = map[string]operatorv1.ConditionStatus{ @@ -88,18 +81,10 @@ func (e *etcdrenew) validateEtcdAndBackupDeleteSecretOnFlagSet(ctx context.Conte s = append(s, steps.Action(e.fetchEtcdCurrentRevision), steps.Action(e.backupEtcdSecrets), - steps.Action(e.initializeblobService), - steps.Condition(e.copySecretsToBlobStorage, 5*time.Minute, true), steps.Action(e.deleteEtcdSecrets), ) } - if e.mode == "renewed" { - s = append(s, - steps.Condition(e.deleteSecretsFromBlobStorage, 5*time.Minute, true), - ) - } - _, err := steps.Run(ctx, e.log, 10*time.Second, s, nil) if err != nil { return err @@ -123,7 +108,7 @@ func (e *etcdrenew) isEtcDRootCertRenewed(ctx context.Context) error { func (e *etcdrenew) revertChanges(ctx context.Context) error { s := []steps.Step{ steps.Action(e.fetchEtcdCurrentRevision), - steps.Condition(e.recoverEtcdSecrets, 10*time.Minute, true), + steps.Action(e.recoverEtcdSecrets), steps.Condition(e.isEtcdRevised, 30*time.Minute, true), } _, err := steps.Run(ctx, e.log, 10*time.Second, s, nil) @@ -153,28 +138,13 @@ func (f *frontend) _postAdminOpenShiftClusterEtcdCertificateRenew(ctx context.Co return err } - subscriptionDoc, err := f.getSubscriptionDocument(ctx, doc.Key) - if err != nil { - return err - } - a, err := f.azureActionsFactory(log, f.env, doc.OpenShiftCluster, subscriptionDoc) - if err != nil { - return err - } - e := &etcdrenew{ - log: log, - k: k, - a: a, - secretNames: nil, - mode: "", - backupSecrets: make(map[string][]byte), - lastRevision: 0, - etcdSecretsRecovered: make([]string, 9), - doc: doc, - blobService: &azstorage.BlobStorageClient{}, - copyComplete: make([]string, 9), - deleteComplete: make([]string, 9), + log: log, + k: k, + secretNames: nil, + mode: "", + backupSecrets: make(map[string][]byte), + lastRevision: 0, } if err = e.validateClusterVersion(ctx); err != nil { @@ -200,7 +170,10 @@ func (f *frontend) _postAdminOpenShiftClusterEtcdCertificateRenew(ctx context.Co err = e.isEtcDRootCertRenewed(ctx) if err != nil { e.log.Infoln("Attempting to recover from backup, and wait for new revision to be applied after recovery") - return e.revertChanges(ctx) + if err = e.revertChanges(ctx); err != nil { + return err + } + return api.NewCloudError(http.StatusInternalServerError, api.CloudErrorCodeInternalServerError, "", "etcd renewal failed, recovery performed to revert the changes.") } e.log.Infoln("Etcd certificates are renewed and new revision is applied, verifying.") @@ -337,87 +310,61 @@ func (e *etcdrenew) fetchEtcdCurrentRevision(ctx context.Context) error { func (e *etcdrenew) backupEtcdSecrets(ctx context.Context) error { e.log.Infoln("backing up etcd secrets now") for _, secretname := range e.secretNames { - e.log.Infof("Backing up secret %s", secretname) - data, err := e.k.KubeGet(ctx, "Secret", namespaceEtcds, secretname) - if err != nil { - return err - } - secret := &corev1.Secret{} - err = codec.NewDecoderBytes(data, &codec.JsonHandle{}).Decode(secret) - if err != nil { - return api.NewCloudError(http.StatusInternalServerError, api.CloudErrorCodeInternalServerError, "", fmt.Sprintf("failed to decode secret, %s", err.Error())) - } - secret.CreationTimestamp = metav1.Time{ - Time: time.Now(), - } - secret.ObjectMeta.ResourceVersion = "" - secret.ObjectMeta.UID = "" - - var cert []byte - err = codec.NewEncoderBytes(&cert, &codec.JsonHandle{}).Encode(secret) - if err != nil { - return api.NewCloudError(http.StatusInternalServerError, api.CloudErrorCodeInternalServerError, "", fmt.Sprintf("failed to encode secret, %s", err.Error())) - } - e.backupSecrets[secretname] = cert + return retry.OnError(wait.Backoff{ + Steps: 10, + Duration: 2 * time.Second, + }, func(err error) bool { + return errors.IsBadRequest(err) || errors.IsInternalError(err) || errors.IsServerTimeout(err) + }, func() error { + e.log.Infof("Backing up secret %s", secretname) + data, err := e.k.KubeGet(ctx, "Secret", namespaceEtcds, secretname) + if err != nil { + return err + } + secret := &corev1.Secret{} + err = codec.NewDecoderBytes(data, &codec.JsonHandle{}).Decode(secret) + if err != nil { + return api.NewCloudError(http.StatusInternalServerError, api.CloudErrorCodeInternalServerError, "", fmt.Sprintf("failed to decode secret, %s", err.Error())) + } + secret.CreationTimestamp = metav1.Time{ + Time: time.Now(), + } + secret.ObjectMeta.ResourceVersion = "" + secret.ObjectMeta.UID = "" + + var cert []byte + err = codec.NewEncoderBytes(&cert, &codec.JsonHandle{}).Encode(secret) + if err != nil { + return api.NewCloudError(http.StatusInternalServerError, api.CloudErrorCodeInternalServerError, "", fmt.Sprintf("failed to encode secret, %s", err.Error())) + } + e.backupSecrets[secretname] = cert + return nil + }) } e.log.Infoln("backing up etcd secrets done") return nil } -func (e *etcdrenew) initializeblobService(ctx context.Context) error { - var err error - clusterRGName := stringutils.LastTokenByte(e.doc.OpenShiftCluster.Properties.ClusterProfile.ResourceGroupID, '/') - account := "cluster" + e.doc.OpenShiftCluster.Properties.StorageSuffix - e.blobService, err = e.a.BlobService(ctx, clusterRGName, account, mgmtstorage.Permissions("crwd"), mgmtstorage.SignedResourceTypesO) - return err -} - -// saves etcd secrets into cluster StorageAccount, ARO container by secret name -func (e *etcdrenew) copySecretsToBlobStorage(ctx context.Context) (bool, error) { - e.log.Infoln("Copying secrets into blob storage") - for _, secret := range e.secretNames { - if slices.Contains(e.copyComplete, secret) { - continue - } - e.log.Infof("Copying secret %s", secret) - err := e.a.CopyAzureBlobStorage(ctx, "aro", secret, e.backupSecrets[secret], e.blobService) - if err != nil { - return false, nil - } - e.copyComplete = append(e.copyComplete, secret) - } - return true, nil -} - -// On successful etcd renewal, delets the secrets from ARO container in cluster StorageAccount -func (e *etcdrenew) deleteSecretsFromBlobStorage(ctx context.Context) (bool, error) { - e.log.Infoln("deleting secrets from blob storage") - for _, secret := range e.secretNames { - if slices.Contains(e.deleteComplete, secret) { - continue - } - e.log.Infof("deleting secret %s", secret) - err := e.a.DeleteAzureBlobStorage(ctx, "aro", secret, e.backupSecrets[secret], e.blobService) - if err != nil { - return false, nil - } - e.deleteComplete = append(e.deleteComplete, secret) - } - return true, nil -} - // delete the etcd secrets and on successful deletion, // valid secrets will be recreated and a new revision will be applied by the etcd operator func (e *etcdrenew) deleteEtcdSecrets(ctx context.Context) error { e.log.Infoln("deleting etcd secrets now") for _, secretname := range e.secretNames { - e.log.Infof("Deleting secret %s", secretname) - err := e.k.KubeDelete(ctx, "Secret", namespaceEtcds, secretname, false, nil) - if err != nil { - return err - } - e.log.Infof("Secret deleted %s", secretname) + return retry.OnError(wait.Backoff{ + Steps: 10, + Duration: 2 * time.Second, + }, func(err error) bool { + return errors.IsBadRequest(err) || errors.IsInternalError(err) || errors.IsServerTimeout(err) + }, func() error { + e.log.Infof("Deleting secret %s", secretname) + err := e.k.KubeDelete(ctx, "Secret", namespaceEtcds, secretname, false, nil) + if err != nil { + return err + } + e.log.Infof("Secret deleted %s", secretname) + return nil + }) } return nil @@ -453,26 +400,30 @@ func (e *etcdrenew) isEtcdRevised(ctx context.Context) (bool, error) { } // Applies the backedup etcd secret and applies them on the cluster -func (e *etcdrenew) recoverEtcdSecrets(ctx context.Context) (bool, error) { +func (e *etcdrenew) recoverEtcdSecrets(ctx context.Context) error { e.log.Infoln("recovering etcd secrets now") for secretname, data := range e.backupSecrets { - // skip secrets which are already recovered - if slices.Contains(e.etcdSecretsRecovered, secretname) { - continue - } - e.log.Infof("Recovering secret %s", secretname) - obj := &unstructured.Unstructured{} - err := obj.UnmarshalJSON(data) - if err != nil { - return false, api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidRequestContent, "", "The request content was invalid and could not be deserialized: %q.", err) - } - err = e.k.KubeCreateOrUpdate(ctx, obj) - if err != nil { - return false, nil - } - e.etcdSecretsRecovered = append(e.etcdSecretsRecovered, secretname) + return retry.OnError(wait.Backoff{ + Steps: 10, + Duration: 2 * time.Second, + }, func(err error) bool { + return errors.IsBadRequest(err) || errors.IsInternalError(err) || errors.IsServerTimeout(err) + }, func() error { + // skip secrets which are already recovered + e.log.Infof("Recovering secret %s", secretname) + obj := &unstructured.Unstructured{} + err := obj.UnmarshalJSON(data) + if err != nil { + return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidRequestContent, "", "The request content was invalid and could not be deserialized: %q.", err) + } + err = e.k.KubeCreateOrUpdate(ctx, obj) + if err != nil { + return err + } + return nil + }) } e.log.Infoln("recovered etcd secrets") - return true, nil + return nil } diff --git a/pkg/frontend/admin_openshiftcluster_etcdcertificaterenew_test.go b/pkg/frontend/admin_openshiftcluster_etcdcertificaterenew_test.go index fc86b19316c..74df19e6ad1 100644 --- a/pkg/frontend/admin_openshiftcluster_etcdcertificaterenew_test.go +++ b/pkg/frontend/admin_openshiftcluster_etcdcertificaterenew_test.go @@ -14,8 +14,6 @@ import ( "testing" "time" - mgmtstorage "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" - azstorage "github.com/Azure/azure-sdk-for-go/storage" "github.com/golang/mock/gomock" configv1 "github.com/openshift/api/config/v1" operatorv1 "github.com/openshift/api/operator/v1" @@ -47,7 +45,7 @@ func TestAdminEtcdCertificateRenew(t *testing.T) { etcdCO *configv1.ClusterOperator notBefore time.Time notAfter time.Time - mocks func(*test, *mock_adminactions.MockAzureActions, *mock_adminactions.MockKubeActions) + mocks func(*test, *mock_adminactions.MockKubeActions) wantStatusCode int wantResponse []byte wantError string @@ -67,7 +65,7 @@ func TestAdminEtcdCertificateRenew(t *testing.T) { }, }, }, - mocks: func(tt *test, a *mock_adminactions.MockAzureActions, k *mock_adminactions.MockKubeActions) { + mocks: func(tt *test, k *mock_adminactions.MockKubeActions) { k.EXPECT(). KubeGet(gomock.Any(), "ClusterVersion.config.openshift.io", "", "version"). Return(encodeClusterVersion(t, tt.version), nil) @@ -102,7 +100,7 @@ func TestAdminEtcdCertificateRenew(t *testing.T) { }, }, }, - mocks: func(tt *test, a *mock_adminactions.MockAzureActions, k *mock_adminactions.MockKubeActions) { + mocks: func(tt *test, k *mock_adminactions.MockKubeActions) { k.EXPECT(). KubeGet(gomock.Any(), "ClusterVersion.config.openshift.io", "", "version").MaxTimes(1). Return(encodeClusterVersion(t, tt.version), nil) @@ -150,7 +148,7 @@ func TestAdminEtcdCertificateRenew(t *testing.T) { }, }, }, - mocks: func(tt *test, a *mock_adminactions.MockAzureActions, k *mock_adminactions.MockKubeActions) { + mocks: func(tt *test, k *mock_adminactions.MockKubeActions) { k.EXPECT(). KubeGet(gomock.Any(), "ClusterVersion.config.openshift.io", "", "version").MaxTimes(1). Return(encodeClusterVersion(t, tt.version), nil) @@ -203,7 +201,7 @@ func TestAdminEtcdCertificateRenew(t *testing.T) { }, notBefore: time.Now(), notAfter: time.Now().AddDate(3, 0, 0), - mocks: func(tt *test, a *mock_adminactions.MockAzureActions, k *mock_adminactions.MockKubeActions) { + mocks: func(tt *test, k *mock_adminactions.MockKubeActions) { k.EXPECT(). KubeGet(gomock.Any(), "ClusterVersion.config.openshift.io", "", "version").MaxTimes(1). Return(encodeClusterVersion(t, tt.version), nil) @@ -259,7 +257,7 @@ func TestAdminEtcdCertificateRenew(t *testing.T) { }, notBefore: time.Now(), notAfter: time.Now().Add(-10 * time.Minute), - mocks: func(tt *test, a *mock_adminactions.MockAzureActions, k *mock_adminactions.MockKubeActions) { + mocks: func(tt *test, k *mock_adminactions.MockKubeActions) { k.EXPECT(). KubeGet(gomock.Any(), "ClusterVersion.config.openshift.io", "", "version").MaxTimes(1). Return(encodeClusterVersion(t, tt.version), nil) @@ -343,16 +341,7 @@ func TestAdminEtcdCertificateRenew(t *testing.T) { }, notBefore: time.Now().AddDate(-2, -8, 0), notAfter: time.Now().Add((1 * time.Hour)), - mocks: func(tt *test, a *mock_adminactions.MockAzureActions, k *mock_adminactions.MockKubeActions) { - a.EXPECT(). - BlobService(gomock.Any(), mockRG, "clusterxxx", mgmtstorage.Permissions("crwd"), mgmtstorage.SignedResourceTypesO).MaxTimes(1). - Return(&azstorage.BlobStorageClient{}, nil) - a.EXPECT(). - CopyAzureBlobStorage(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes(). - Return(nil) - a.EXPECT(). - DeleteAzureBlobStorage(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes(). - Return(nil) + mocks: func(tt *test, k *mock_adminactions.MockKubeActions) { k.EXPECT(). KubeGet(gomock.Any(), "ClusterVersion.config.openshift.io", "", "version").MaxTimes(1). Return(encodeClusterVersion(t, tt.version), nil) @@ -381,8 +370,7 @@ func TestAdminEtcdCertificateRenew(t *testing.T) { defer ti.done() k := mock_adminactions.NewMockKubeActions(ti.controller) - a := mock_adminactions.NewMockAzureActions(ti.controller) - tt.mocks(tt, a, k) + tt.mocks(tt, k) f, err := NewFrontend(ctx, ti.audit, @@ -401,9 +389,7 @@ func TestAdminEtcdCertificateRenew(t *testing.T) { func(*logrus.Entry, env.Interface, *api.OpenShiftCluster) (adminactions.KubeActions, error) { return k, nil }, - func(*logrus.Entry, env.Interface, *api.OpenShiftCluster, *api.SubscriptionDocument) (adminactions.AzureActions, error) { - return a, nil - }, + nil, nil) if err != nil { t.Fatal(err) diff --git a/pkg/frontend/adminactions/azureactions.go b/pkg/frontend/adminactions/azureactions.go index e519a0594a4..fa4417cf22f 100644 --- a/pkg/frontend/adminactions/azureactions.go +++ b/pkg/frontend/adminactions/azureactions.go @@ -12,8 +12,6 @@ import ( mgmtcompute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2020-06-01/compute" mgmtfeatures "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2019-07-01/features" - mgmtstorage "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" - azstorage "github.com/Azure/azure-sdk-for-go/storage" "github.com/sirupsen/logrus" "github.com/Azure/ARO-RP/pkg/api" @@ -41,9 +39,6 @@ type AzureActions interface { VMSerialConsole(ctx context.Context, w http.ResponseWriter, log *logrus.Entry, vmName string) error AppLensGetDetector(ctx context.Context, detectorId string) ([]byte, error) AppLensListDetectors(ctx context.Context) ([]byte, error) - BlobService(ctx context.Context, resourceGroup string, account string, p mgmtstorage.Permissions, r mgmtstorage.SignedResourceTypes) (*azstorage.BlobStorageClient, error) - CopyAzureBlobStorage(ctx context.Context, containerName string, blobname string, data []byte, blobService *azstorage.BlobStorageClient) error - DeleteAzureBlobStorage(ctx context.Context, containerName string, blobname string, data []byte, blobService *azstorage.BlobStorageClient) error } type azureActions struct { diff --git a/pkg/frontend/adminactions/blobStorage.go b/pkg/frontend/adminactions/blobStorage.go deleted file mode 100644 index aa351593c23..00000000000 --- a/pkg/frontend/adminactions/blobStorage.go +++ /dev/null @@ -1,54 +0,0 @@ -package adminactions - -// Copyright (c) Microsoft Corporation. -// Licensed under the Apache License 2.0. - -import ( - "bytes" - "context" - "net/url" - "time" - - mgmtstorage "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" - azstorage "github.com/Azure/azure-sdk-for-go/storage" - "github.com/Azure/go-autorest/autorest/date" -) - -func (a *azureActions) BlobService(ctx context.Context, resourceGroup string, account string, p mgmtstorage.Permissions, r mgmtstorage.SignedResourceTypes) (*azstorage.BlobStorageClient, error) { - t := time.Now().UTC().Truncate(time.Second) - res, err := a.storageAccounts.ListAccountSAS(ctx, resourceGroup, account, mgmtstorage.AccountSasParameters{ - Services: mgmtstorage.B, - ResourceTypes: mgmtstorage.SignedResourceTypesO, - Permissions: mgmtstorage.Permissions("crwd"), - Protocols: mgmtstorage.HTTPS, - SharedAccessStartTime: &date.Time{Time: t}, - SharedAccessExpiryTime: &date.Time{Time: t.Add(24 * time.Hour)}, - }) - if err != nil { - return nil, err - } - - v, err := url.ParseQuery(*res.AccountSasToken) - if err != nil { - return nil, err - } - - blobcli := azstorage.NewAccountSASClient(account, v, (*a.env.Environment()).Environment).GetBlobService() - - return &blobcli, nil -} - -// Copies data into blob of the container -func (a *azureActions) CopyAzureBlobStorage(ctx context.Context, containerName string, blobname string, data []byte, blobService *azstorage.BlobStorageClient) error { - return blobService.GetContainerReference(containerName).GetBlobReference(blobname).CreateBlockBlobFromReader(bytes.NewReader(data), nil) -} - -// deletes blob in the container -func (a *azureActions) DeleteAzureBlobStorage(ctx context.Context, containerName string, blobname string, data []byte, blobService *azstorage.BlobStorageClient) error { - blobref := blobService.GetContainerReference(containerName).GetBlobReference(blobname) - _, err := blobref.DeleteIfExists(nil) - if err != nil { - return err - } - return nil -} diff --git a/pkg/util/mocks/adminactions/adminactions.go b/pkg/util/mocks/adminactions/adminactions.go index db521a4691b..855890c984f 100644 --- a/pkg/util/mocks/adminactions/adminactions.go +++ b/pkg/util/mocks/adminactions/adminactions.go @@ -12,8 +12,6 @@ import ( compute "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2020-06-01/compute" features "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2019-07-01/features" - storage "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" - storage0 "github.com/Azure/azure-sdk-for-go/storage" gomock "github.com/golang/mock/gomock" logrus "github.com/sirupsen/logrus" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -257,49 +255,6 @@ func (mr *MockAzureActionsMockRecorder) AppLensListDetectors(arg0 interface{}) * return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AppLensListDetectors", reflect.TypeOf((*MockAzureActions)(nil).AppLensListDetectors), arg0) } -// BlobService mocks base method. -func (m *MockAzureActions) BlobService(arg0 context.Context, arg1, arg2 string, arg3 storage.Permissions, arg4 storage.SignedResourceTypes) (*storage0.BlobStorageClient, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "BlobService", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(*storage0.BlobStorageClient) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// BlobService indicates an expected call of BlobService. -func (mr *MockAzureActionsMockRecorder) BlobService(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BlobService", reflect.TypeOf((*MockAzureActions)(nil).BlobService), arg0, arg1, arg2, arg3, arg4) -} - -// CopyAzureBlobStorage mocks base method. -func (m *MockAzureActions) CopyAzureBlobStorage(arg0 context.Context, arg1, arg2 string, arg3 []byte, arg4 *storage0.BlobStorageClient) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CopyAzureBlobStorage", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(error) - return ret0 -} - -// CopyAzureBlobStorage indicates an expected call of CopyAzureBlobStorage. -func (mr *MockAzureActionsMockRecorder) CopyAzureBlobStorage(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CopyAzureBlobStorage", reflect.TypeOf((*MockAzureActions)(nil).CopyAzureBlobStorage), arg0, arg1, arg2, arg3, arg4) -} - -// DeleteAzureBlobStorage mocks base method. -func (m *MockAzureActions) DeleteAzureBlobStorage(arg0 context.Context, arg1, arg2 string, arg3 []byte, arg4 *storage0.BlobStorageClient) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteAzureBlobStorage", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteAzureBlobStorage indicates an expected call of DeleteAzureBlobStorage. -func (mr *MockAzureActionsMockRecorder) DeleteAzureBlobStorage(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAzureBlobStorage", reflect.TypeOf((*MockAzureActions)(nil).DeleteAzureBlobStorage), arg0, arg1, arg2, arg3, arg4) -} - // GroupResourceList mocks base method. func (m *MockAzureActions) GroupResourceList(arg0 context.Context) ([]features.GenericResourceExpanded, error) { m.ctrl.T.Helper()