diff --git a/pkg/cloudcommon/db/namevalidator.go b/pkg/cloudcommon/db/namevalidator.go index 8793226d2c..6ebb6ac9f9 100644 --- a/pkg/cloudcommon/db/namevalidator.go +++ b/pkg/cloudcommon/db/namevalidator.go @@ -80,6 +80,10 @@ func alterNameValidator(model IModel, name string) error { } func GenerateName(manager IModelManager, ownerId mcclient.IIdentityProvider, hint string) (string, error) { + return GenerateName2(manager, ownerId, hint, nil) +} + +func GenerateName2(manager IModelManager, ownerId mcclient.IIdentityProvider, hint string, model IModel) (string, error) { _, pattern, patternLen := stringutils.ParseNamePattern(hint) var name string idx := 1 @@ -90,7 +94,13 @@ func GenerateName(manager IModelManager, ownerId mcclient.IIdentityProvider, hin idx += 1 } for { - uniq, err := isNameUnique(manager, ownerId, name) + var uniq bool + var err error + if model == nil { + uniq, err = isNameUnique(manager, ownerId, name) + } else { + uniq, err = isAlterNameUnique(model, name) + } if err != nil { return "", err } diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index 7a4dbcb03b..980e958115 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -1584,9 +1584,9 @@ func (manager *SNetworkManager) InitializeData() error { } func (self *SNetwork) ValidateUpdateCondition(ctx context.Context) error { - if len(self.ExternalId) > 0 { + /*if len(self.ExternalId) > 0 { return httperrors.NewConflictError("Cannot update external resource") - } + }*/ return self.SSharableVirtualResourceBase.ValidateUpdateCondition(ctx) } diff --git a/pkg/keystone/driver/ldap/sync.go b/pkg/keystone/driver/ldap/sync.go index 5517e67681..46b577ba98 100644 --- a/pkg/keystone/driver/ldap/sync.go +++ b/pkg/keystone/driver/ldap/sync.go @@ -174,7 +174,7 @@ func (self *SLDAPDriver) syncDomainInfo(ctx context.Context, info SDomainInfo) ( if err == nil { if domain.Name != info.Name { // sync domain name - newName, err := db.GenerateName(models.DomainManager, nil, info.Name) + newName, err := db.GenerateName2(models.DomainManager, nil, info.Name, domain) if err != nil { log.Errorf("sync existing domain name (%s=%s) generate fail %s", domain.Name, info.Name, err) } else { diff --git a/pkg/keystone/models/groups.go b/pkg/keystone/models/groups.go index 03330a3a6e..3d7265bb2a 100644 --- a/pkg/keystone/models/groups.go +++ b/pkg/keystone/models/groups.go @@ -176,7 +176,7 @@ func (manager *SGroupManager) RegisterExternalGroup(ctx context.Context, idpId s group := SGroup{} group.SetModelManager(manager, &group) - q := manager.Query().Equals("id", pubId) + q := manager.RawQuery().Equals("id", pubId) err = q.First(&group) if err != nil && err != sql.ErrNoRows { return nil, errors.Wrap(err, "Query") @@ -191,9 +191,12 @@ func (manager *SGroupManager) RegisterExternalGroup(ctx context.Context, idpId s if err != nil { return nil, errors.Wrap(err, "Insert") } - } else if group.Displayname != groupName { + } else { _, err = db.Update(&group, func() error { + group.DomainId = domainId + group.Name = groupName group.Displayname = groupName + group.MarkUnDelete() return nil }) if err != nil { diff --git a/pkg/keystone/models/identity_provider.go b/pkg/keystone/models/identity_provider.go index 579b03a8b7..0d3758e9c5 100644 --- a/pkg/keystone/models/identity_provider.go +++ b/pkg/keystone/models/identity_provider.go @@ -627,6 +627,10 @@ func (self *SIdentityProvider) Purge(ctx context.Context, userCred mcclient.Toke if err != nil { return errors.Wrap(err, "domain.ValidatePurgeCondition") } + err = domains[i].UnlinkIdp(self.Id) + if err != nil { + return errors.Wrap(err, "domains[i].UnlinkIdp") + } err = domains[i].Delete(ctx, userCred) if err != nil { return errors.Wrap(err, "delete domain")