fix(cloudid): huawei saml provider (#14664)

This commit is contained in:
屈轩
2022-07-18 23:03:15 +08:00
committed by GitHub
parent 7020256481
commit 6ec1ff09ad
2 changed files with 52 additions and 8 deletions
+27 -8
View File
@@ -218,19 +218,38 @@ func (self *SHuaweiClient) CreateSAMLProvider(opts *cloudprovider.SAMLProviderCr
name = append(name, '-')
}
}
opts.Name = string(name)
_, err = client.SAMLProviders.Update(opts.Name, params)
if err != nil {
if he, ok := err.(*modules.HuaweiClientError); ok && he.Code != 409 {
return nil, errors.Wrapf(err, "SAMLProviders.Update")
samlName := string(name)
err = func() error {
idx := 1
for {
_, err = client.SAMLProviders.Update(samlName, params)
if err == nil {
return nil
}
he, ok := err.(*modules.HuaweiClientError)
if !ok {
return errors.Wrapf(err, "SAMLProviders.Update")
}
if he.Code != 409 {
return errors.Wrapf(err, "SAMLProviders.Update")
}
samlName = fmt.Sprintf("%s-%d", string(name), idx)
idx++
if idx >= 40 {
break
}
}
return err
}()
if err != nil {
return nil, errors.Wrapf(err, "saml provider create")
}
ret := SAMLProvider{client: self, Id: opts.Name}
err = self.UpdateSAMLProviderMetadata(opts.Name, opts.Metadata.String())
ret := SAMLProvider{client: self, Id: samlName}
err = self.UpdateSAMLProviderMetadata(samlName, opts.Metadata.String())
if err != nil {
return nil, errors.Wrapf(err, "resp.Unmarshal")
}
err = self.InitSAMLProviderMapping(opts.Name)
err = self.InitSAMLProviderMapping(samlName)
if err != nil {
return nil, errors.Wrapf(err, "InitSAMLProviderMapping")
}
@@ -15,7 +15,9 @@
package shell
import (
"yunion.io/x/onecloud/pkg/cloudprovider"
"yunion.io/x/onecloud/pkg/multicloud/huawei"
"yunion.io/x/onecloud/pkg/util/samlutils"
"yunion.io/x/onecloud/pkg/util/shellutils"
)
@@ -31,6 +33,29 @@ func init() {
return nil
})
type SAMLProviderCreateOptions struct {
NAME string
Metadata string
}
shellutils.R(&SAMLProviderCreateOptions{}, "saml-provider-create", "Create saml provider", func(cli *huawei.SRegion, args *SAMLProviderCreateOptions) error {
opts := cloudprovider.SAMLProviderCreateOptions{
Name: args.NAME,
}
if len(args.Metadata) > 0 {
var err error
opts.Metadata, err = samlutils.ParseMetadata([]byte(args.Metadata))
if err != nil {
return err
}
}
result, err := cli.GetClient().CreateSAMLProvider(&opts)
if err != nil {
return err
}
printObject(result)
return nil
})
type SAMLProviderIdOptions struct {
ID string
}