From 6327b475a8e24d0327731b1e267d41aeba93862b Mon Sep 17 00:00:00 2001 From: Andy Liu Date: Sat, 5 Oct 2019 09:30:26 +0800 Subject: [PATCH] chore: add sas token support for abs. --- pkg/apis/etcd/v1beta2/backup_types.go | 1 + pkg/backup/backup_manager.go | 1 + pkg/backup/util/util.go | 3 ++- pkg/util/azureutil/absfactory/client.go | 28 +++++++++++++++++++------ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/pkg/apis/etcd/v1beta2/backup_types.go b/pkg/apis/etcd/v1beta2/backup_types.go index 3f6ff2367..118d5074e 100644 --- a/pkg/apis/etcd/v1beta2/backup_types.go +++ b/pkg/apis/etcd/v1beta2/backup_types.go @@ -28,6 +28,7 @@ const ( BackupStorageTypeABS BackupStorageType = "ABS" AzureSecretStorageAccount = "storage-account" AzureSecretStorageKey = "storage-key" + AzureSecretSASURI = "storage-sas-uri" AzureCloudKey = "cloud" // Google GCS related consts diff --git a/pkg/backup/backup_manager.go b/pkg/backup/backup_manager.go index a82ae32eb..fd3fb7006 100644 --- a/pkg/backup/backup_manager.go +++ b/pkg/backup/backup_manager.go @@ -98,6 +98,7 @@ func (bm *BackupManager) EnsureMaxBackup(ctx context.Context, basePath string, m if err != nil { return fmt.Errorf("failed to delete snapshot: %v", err) } + logrus.Infof("Successfully deleted snapshot: (%s)", snapshotPath) } return nil } diff --git a/pkg/backup/util/util.go b/pkg/backup/util/util.go index 1b5e81259..d16deb6b3 100644 --- a/pkg/backup/util/util.go +++ b/pkg/backup/util/util.go @@ -28,7 +28,8 @@ func MakeBackupName(ver string, rev int64) string { func ParseBucketAndKey(path string) (string, string, error) { toks := strings.SplitN(path, "/", 2) if len(toks) != 2 || len(toks[0]) == 0 || len(toks[1]) == 0 { - return "", "", fmt.Errorf("Invalid S3 path (%v)", path) + // this is used by gcs/oss/abs/s3 + return "", "", fmt.Errorf("Invalid path (%v)", path) } return toks[0], toks[1], nil } diff --git a/pkg/util/azureutil/absfactory/client.go b/pkg/util/azureutil/absfactory/client.go index 0d797d64e..d2e251852 100644 --- a/pkg/util/azureutil/absfactory/client.go +++ b/pkg/util/azureutil/absfactory/client.go @@ -55,18 +55,34 @@ func NewClientFromSecret(kubecli kubernetes.Interface, namespace, absSecret stri storageAccount := se.Data[api.AzureSecretStorageAccount] storageKey := se.Data[api.AzureSecretStorageKey] cloudName := se.Data[api.AzureCloudKey] + sasURI := se.Data[api.AzureSecretSASURI] cloud, err := parseAzureEnvironment(string(cloudName)) if err != nil { return nil, err } + var bc storage.Client + if len(sasURI) != 0 { + qIndex := strings.IndexAny(sasURI, "?") + if qIndex != -1 { + baseURL := sasURI[0:qIndex] + sasToken := sasURI[qIndex+1:] - bc, err := storage.NewBasicClientOnSovereignCloud( - string(storageAccount), - string(storageKey), - cloud) - if err != nil { - return nil, fmt.Errorf("failed to create Azure storage client: %v", err) + bc, err := storage.NewAccountSASClientFromEndpointToken(baseURL, sasToken) + if err != nil { + return nil, fmt.Errorf("create ABS client (from SAS token) failed: %v", err) + } + } else { + return nil, fmt.Errorf("No '?' in the URI, invalid sas token uri") + } + } else { + bc, err := storage.NewBasicClientOnSovereignCloud( + string(storageAccount), + string(storageKey), + cloud) + if err != nil { + return nil, fmt.Errorf("failed to create Azure storage client: %v", err) + } } abs := bc.GetBlobService()