mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix(cloudid): huawei saml provider (#14664)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user