diff --git a/cmd/climc/shell/compute/cloudaccounts.go b/cmd/climc/shell/compute/cloudaccounts.go index 78219dc1b0..c1b1f8c41f 100644 --- a/cmd/climc/shell/compute/cloudaccounts.go +++ b/cmd/climc/shell/compute/cloudaccounts.go @@ -37,7 +37,7 @@ func init() { cmd.CreateWithKeyworkd("create-aws", &options.SAWSCloudAccountCreateOptions{}) cmd.CreateWithKeyworkd("create-openstack", &options.SOpenStackCloudAccountCreateOptions{}) cmd.CreateWithKeyworkd("create-huawei", &options.SHuaweiCloudAccountCreateOptions{}) - cmd.CreateWithKeyworkd("create-ucloud", &options.SHuaweiCloudAccountCreateOptions{}) + cmd.CreateWithKeyworkd("create-ucloud", &options.SUcloudCloudAccountCreateOptions{}) cmd.CreateWithKeyworkd("create-zstack", &options.SZStackCloudAccountCreateOptions{}) cmd.CreateWithKeyworkd("create-s3", &options.SS3CloudAccountCreateOptions{}) cmd.CreateWithKeyworkd("create-ceph", &options.SCephCloudAccountCreateOptions{}) diff --git a/pkg/apis/compute/cloudaccount.go b/pkg/apis/compute/cloudaccount.go index ff8e6b20d7..ea45f44dfc 100644 --- a/pkg/apis/compute/cloudaccount.go +++ b/pkg/apis/compute/cloudaccount.go @@ -319,6 +319,8 @@ type CloudaccountUpdateInput struct { // 带删除的options key RemoveOptions []string `json:"remove_options"` + SAMLAuth *bool `json:"saml_auth"` + proxyapi.ProxySettingResourceInput } diff --git a/pkg/compute/models/cloudaccounts.go b/pkg/compute/models/cloudaccounts.go index 39995a6de5..68d92008fe 100644 --- a/pkg/compute/models/cloudaccounts.go +++ b/pkg/compute/models/cloudaccounts.go @@ -304,6 +304,14 @@ func (self *SCloudaccount) ValidateUpdateData( input.Options = optionsJson } + factory, err := self.GetProviderFactory() + if err != nil { + return input, httperrors.NewGeneralError(errors.Wrapf(err, "GetProviderFactory")) + } + if input.SAMLAuth != nil && *input.SAMLAuth && !factory.IsSupportSAMLAuth() { + return input, httperrors.NewNotSupportedError("%s not support saml auth", self.Provider) + } + if len(input.ProxySettingId) > 0 { var proxySetting *proxy.SProxySetting proxySetting, input.ProxySettingResourceInput, err = proxy.ValidateProxySettingResourceInput(userCred, input.ProxySettingResourceInput) diff --git a/pkg/mcclient/options/cloudaccounts.go b/pkg/mcclient/options/cloudaccounts.go index 686fcadb94..a5f45e08fd 100644 --- a/pkg/mcclient/options/cloudaccounts.go +++ b/pkg/mcclient/options/cloudaccounts.go @@ -108,6 +108,8 @@ type SCloudAccountCreateBaseOptions struct { Disabled *bool `help:"create cloud account with disabled status"` + SamlAuth string `help:"Enable or disable saml auth" choices:"true|false"` + ProxySetting string `help:"proxy setting id or name" json:"proxy_setting"` } diff --git a/pkg/multicloud/aws/provider/provider.go b/pkg/multicloud/aws/provider/provider.go index 9bf98003b3..ad6b093ed9 100644 --- a/pkg/multicloud/aws/provider/provider.go +++ b/pkg/multicloud/aws/provider/provider.go @@ -55,6 +55,10 @@ func (factory *SAwsProviderFactory) IsSystemCloudpolicyUnified() bool { return false } +func (factory *SAwsProviderFactory) IsSupportSAMLAuth() bool { + return true +} + func (self *SAwsProviderFactory) GetSupportedDnsZoneTypes() []cloudprovider.TDnsZoneType { return []cloudprovider.TDnsZoneType{ cloudprovider.PublicZone, diff --git a/pkg/multicloud/huawei/provider/provider.go b/pkg/multicloud/huawei/provider/provider.go index ac7b108a07..6c13d5e3ff 100644 --- a/pkg/multicloud/huawei/provider/provider.go +++ b/pkg/multicloud/huawei/provider/provider.go @@ -80,6 +80,10 @@ func (factory *SHuaweiProviderFactory) IsSupportModifyRouteTable() bool { return true } +func (factory *SHuaweiProviderFactory) IsSupportSAMLAuth() bool { + return true +} + func (self *SHuaweiProviderFactory) ValidateCreateCloudaccountData(ctx context.Context, userCred mcclient.TokenCredential, input cloudprovider.SCloudaccountCredential) (cloudprovider.SCloudaccount, error) { output := cloudprovider.SCloudaccount{} if len(input.AccessKeyId) == 0 { diff --git a/pkg/multicloud/qcloud/provider/provider.go b/pkg/multicloud/qcloud/provider/provider.go index b5bf9e082f..56ce80550f 100644 --- a/pkg/multicloud/qcloud/provider/provider.go +++ b/pkg/multicloud/qcloud/provider/provider.go @@ -62,6 +62,10 @@ func (self *SQcloudProviderFactory) IsSupportCreateCloudgroup() bool { return true } +func (self *SQcloudProviderFactory) IsSupportSAMLAuth() bool { + return true +} + func (self *SQcloudProviderFactory) IsSupportCrossCloudEnvVpcPeering() bool { return false }