diff --git a/pkg/multicloud/azure/azure.go b/pkg/multicloud/azure/azure.go index cc4ac53960..59218b5f85 100644 --- a/pkg/multicloud/azure/azure.go +++ b/pkg/multicloud/azure/azure.go @@ -906,9 +906,15 @@ func (self *SAzureClient) GetIProjects() ([]cloudprovider.ICloudProject, error) } func (self *SAzureClient) GetStorageClasses(regionExtId string) ([]string, error) { - iRegion, err := self.GetIRegionById(regionExtId) + var iRegion cloudprovider.ICloudRegion + var err error + if regionExtId == "" { + iRegion, err = self.getDefaultRegion() + } else { + iRegion, err = self.GetIRegionById(regionExtId) + } if err != nil { - return nil, errors.Wrap(err, "self.GetIRegionById") + return nil, errors.Wrapf(err, "self.GetIRegionById %s", regionExtId) } skus, err := iRegion.(*SRegion).GetStorageAccountSkus() if err != nil { diff --git a/pkg/multicloud/azure/classic_storage.go b/pkg/multicloud/azure/classic_storage.go index 8792b8b266..8933102a81 100644 --- a/pkg/multicloud/azure/classic_storage.go +++ b/pkg/multicloud/azure/classic_storage.go @@ -27,7 +27,7 @@ type ClassicStorageProperties struct { ProvisioningState string Status string Endpoints []string - AccountType string + AccountType string `json:"accountType"` GeoPrimaryRegion string StatusOfPrimaryRegion string GeoSecondaryRegion string diff --git a/pkg/multicloud/azure/provider/provider.go b/pkg/multicloud/azure/provider/provider.go index f3e5484b30..3d37d930dc 100644 --- a/pkg/multicloud/azure/provider/provider.go +++ b/pkg/multicloud/azure/provider/provider.go @@ -20,8 +20,8 @@ import ( "strings" "yunion.io/x/jsonutils" - "yunion.io/x/log" + api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/httperrors" @@ -175,7 +175,7 @@ func (self *SAzureProvider) GetIProjects() ([]cloudprovider.ICloudProject, error func (self *SAzureProvider) GetStorageClasses(regionId string) []string { sc, err := self.client.GetStorageClasses(regionId) if err != nil { - log.Errorf("Fail to find storage classes") + log.Errorf("Fail to find storage classes: %s", err) return nil } return sc diff --git a/pkg/multicloud/azure/region.go b/pkg/multicloud/azure/region.go index 3349f92300..b1a8071790 100644 --- a/pkg/multicloud/azure/region.go +++ b/pkg/multicloud/azure/region.go @@ -632,7 +632,7 @@ func (region *SRegion) GetIBuckets() ([]cloudprovider.ICloudBucket, error) { func (region *SRegion) CreateIBucket(name string, storageClassStr string, acl string) error { _, err := region.createStorageAccount(name, storageClassStr) if err != nil { - return errors.Wrap(err, "region.createStorageAccount") + return errors.Wrapf(err, "region.createStorageAccount name=%s storageClass=%s acl=%s", name, storageClassStr, acl) } return nil } diff --git a/pkg/multicloud/azure/storageaccount.go b/pkg/multicloud/azure/storageaccount.go index 33fd93229b..1ed4cf4255 100644 --- a/pkg/multicloud/azure/storageaccount.go +++ b/pkg/multicloud/azure/storageaccount.go @@ -16,10 +16,12 @@ package azure import ( "context" + "encoding/base64" "fmt" "io" "math/rand" "path" + "strconv" "strings" "time" @@ -32,8 +34,6 @@ import ( "yunion.io/x/pkg/errors" "yunion.io/x/pkg/utils" - "encoding/base64" - "strconv" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/multicloud" @@ -227,17 +227,24 @@ func (self *SRegion) getStorageAccountSkuByName(name string) (*SStorageAccountSk } func (self *SRegion) createStorageAccount(name string, skuName string) (*SStorageAccount, error) { - sku, err := self.getStorageAccountSkuByName(skuName) - if err != nil { - return nil, errors.Wrap(err, "getStorageAccountSkuByName") + storageKind := "Storage" + if len(skuName) > 0 { + sku, err := self.getStorageAccountSkuByName(skuName) + if err != nil { + return nil, errors.Wrap(err, "getStorageAccountSkuByName") + } + skuName = sku.Name + storageKind = sku.Kind + } else { + skuName = "Standard_GRS" } - stoargeaccount := SStorageAccount{ - region: self, - Sku: SSku{ - Name: sku.Name, - }, + storageaccount := SStorageAccount{ + region: self, Location: self.Name, - Kind: "Storage", + Sku: SSku{ + Name: skuName, + }, + Kind: storageKind, Properties: AccountProperties{ IsHnsEnabled: true, AzureFilesAadIntegration: true, @@ -245,12 +252,13 @@ func (self *SRegion) createStorageAccount(name string, skuName string) (*SStorag Name: name, Type: "Microsoft.Storage/storageAccounts", } - err = self.client.Create(jsonutils.Marshal(stoargeaccount), &stoargeaccount) + + err := self.client.Create(jsonutils.Marshal(storageaccount), &storageaccount) if err != nil { return nil, errors.Wrap(err, "Create") } self.client.invalidateIBuckets() - return &stoargeaccount, nil + return &storageaccount, nil } func (self *SRegion) CreateStorageAccount(storageAccount string) (*SStorageAccount, error) { diff --git a/pkg/multicloud/objectstore/shell.go b/pkg/multicloud/objectstore/shell.go index fce23fef49..7fff3ac3bd 100644 --- a/pkg/multicloud/objectstore/shell.go +++ b/pkg/multicloud/objectstore/shell.go @@ -43,7 +43,7 @@ func S3Shell() { type BucketCreateOptions struct { NAME string `help:"name of bucket to create"` Acl string `help:"ACL string" choices:"private|public-read|public-read-write"` - StorageClass string `help:"StorageClass" choices:"STANDARD|IA|ARCHIVE"` + StorageClass string `help:"StorageClass"` } shellutils.R(&BucketCreateOptions{}, "bucket-create", "Create bucket", func(cli cloudprovider.ICloudRegion, args *BucketCreateOptions) error { err := cli.CreateIBucket(args.NAME, args.StorageClass, args.Acl)