diff --git a/cmd/climc/shell/cloudaccounts.go b/cmd/climc/shell/cloudaccounts.go index 41ce9220e6..41cedb17ee 100644 --- a/cmd/climc/shell/cloudaccounts.go +++ b/cmd/climc/shell/cloudaccounts.go @@ -156,6 +156,17 @@ func init() { return nil }) + R(&options.SUcloudCloudAccountCreateOptions{}, "cloud-account-create-ucloud", "Create a Ucloud cloud account", func(s *mcclient.ClientSession, args *options.SUcloudCloudAccountCreateOptions) error { + params := jsonutils.Marshal(args) + params.(*jsonutils.JSONDict).Add(jsonutils.NewString("Ucloud"), "provider") + result, err := modules.Cloudaccounts.Create(s, params) + if err != nil { + return err + } + printObject(result) + return nil + }) + type CloudaccountUpdateOptions struct { ID string `help:"ID or Name of cloud account"` Name string `help:"New name to update"` diff --git a/pkg/mcclient/options/cloudaccounts.go b/pkg/mcclient/options/cloudaccounts.go index ccf6bbdb5f..6608ac920b 100644 --- a/pkg/mcclient/options/cloudaccounts.go +++ b/pkg/mcclient/options/cloudaccounts.go @@ -119,6 +119,11 @@ type SHuaweiCloudAccountCreateOptions struct { SAccessKeyCredentialWithEnvironment } +type SUcloudCloudAccountCreateOptions struct { + SCloudAccountCreateBaseOptions + SAccessKeyCredential +} + // update credential options type SCloudAccountUpdateCredentialBaseOptions struct { diff --git a/pkg/util/ucloud/eip.go b/pkg/util/ucloud/eip.go index 9db4880c2c..1910485d8e 100644 --- a/pkg/util/ucloud/eip.go +++ b/pkg/util/ucloud/eip.go @@ -228,6 +228,7 @@ func (self *SRegion) CreateEIP(name string, bwMbps int, chargeType string, bgpTy payMode = "Bandwidth" } params.Set("PayMode", payMode) + params.Set("ChargeType", "Dynamic") // 按需付费 eips := make([]SEip, 0) err := self.DoAction("AllocateEIP", params, &eips) diff --git a/pkg/util/ucloud/region.go b/pkg/util/ucloud/region.go index 68a4a760d8..3cd9ea2f5a 100644 --- a/pkg/util/ucloud/region.go +++ b/pkg/util/ucloud/region.go @@ -110,7 +110,8 @@ func (self *SRegion) GetIEips() ([]cloudprovider.ICloudEIP, error) { } ieips := []cloudprovider.ICloudEIP{} - for _, eip := range eips { + for i, _ := range eips { + eip := eips[i] eip.region = self ieips = append(ieips, &eip) } diff --git a/pkg/util/ucloud/snapshot.go b/pkg/util/ucloud/snapshot.go index 442fbf1d7b..2651bbb2dc 100644 --- a/pkg/util/ucloud/snapshot.go +++ b/pkg/util/ucloud/snapshot.go @@ -150,6 +150,10 @@ func (self *SRegion) GetSnapshots(diskId string, snapshotId string) ([]SSnapshot return nil, err } + for i := range snapshots { + snapshots[i].region = self + } + return snapshots, nil } diff --git a/pkg/util/ucloud/storage.go b/pkg/util/ucloud/storage.go index ea2be78862..3d38e8b293 100644 --- a/pkg/util/ucloud/storage.go +++ b/pkg/util/ucloud/storage.go @@ -79,7 +79,7 @@ func (self *SStorage) GetIDisks() ([]cloudprovider.ICloudDisk, error) { } // 普通盘 - if self.storageType == api.STORAGE_UCLOUD_CLOUD_NORMAL && strings.Contains(disk.DiskType, "SSD") { + if self.storageType == api.STORAGE_UCLOUD_CLOUD_NORMAL && !strings.Contains(disk.DiskType, "SSD") { filtedDisks = append(filtedDisks, disk) } } @@ -117,7 +117,12 @@ func (self *SStorage) GetEnabled() bool { } func (self *SStorage) CreateIDisk(name string, sizeGb int, desc string) (cloudprovider.ICloudDisk, error) { - diskId, err := self.zone.region.CreateDisk(self.zone.GetId(), self.storageType, name, sizeGb) + diskType := "DataDisk" + switch self.storageType { + case api.STORAGE_UCLOUD_CLOUD_SSD: + diskType = "SSDDataDisk" + } + diskId, err := self.zone.region.CreateDisk(self.zone.GetId(), diskType, name, sizeGb) if err != nil { return nil, err } diff --git a/pkg/util/ucloud/ucloud.go b/pkg/util/ucloud/ucloud.go index c0627ce2b0..6ccabfed4f 100644 --- a/pkg/util/ucloud/ucloud.go +++ b/pkg/util/ucloud/ucloud.go @@ -199,7 +199,7 @@ func (self *SUcloudClient) GetSubAccounts() ([]cloudprovider.SSubAccount, error) subAccounts := make([]cloudprovider.SSubAccount, 0) for _, project := range projects { subAccount := cloudprovider.SSubAccount{} - subAccount.Name = self.providerName + subAccount.Name = fmt.Sprintf("%s-%s", self.providerName, project.ProjectName) // ucloud账号ID中可能包含/。因此使用::作为分割符号 subAccount.Account = fmt.Sprintf("%s::%s", self.accessKeyId, project.ProjectID) subAccount.HealthStatus = api.CLOUD_PROVIDER_HEALTH_NORMAL