mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #5709 from swordqiu/feature/qj-change-owner-candiate-domains
feature: add API to retrieve resource's change owner candidate domains
This commit is contained in:
@@ -247,3 +247,7 @@ type CloudproviderUpdateInput struct {
|
||||
|
||||
type CloudproviderCreateInput struct {
|
||||
}
|
||||
|
||||
type ChangeOwnerCandidateDomainsOutput struct {
|
||||
Candidates []apis.SharedDomain `json:"candidates"`
|
||||
}
|
||||
|
||||
@@ -348,6 +348,43 @@ func (manager *SManagedResourceBaseManager) GetOrderByFields(query api.ManagedRe
|
||||
return []string{query.OrderByManager, query.OrderByAccount, query.OrderByProvider, query.OrderByBrand}
|
||||
}
|
||||
|
||||
func (model *SManagedResourceBase) GetDetailsChangeOwnerCandidateDomains(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (api.ChangeOwnerCandidateDomainsOutput, error) {
|
||||
output := api.ChangeOwnerCandidateDomainsOutput{}
|
||||
provider := model.GetCloudprovider()
|
||||
if provider == nil {
|
||||
return output, nil
|
||||
}
|
||||
account := model.GetCloudaccount()
|
||||
if account == nil {
|
||||
return output, nil
|
||||
}
|
||||
var candidateIds []string
|
||||
switch account.ShareMode {
|
||||
case api.CLOUD_ACCOUNT_SHARE_MODE_ACCOUNT_DOMAIN:
|
||||
candidateIds = append(candidateIds, account.DomainId)
|
||||
case api.CLOUD_ACCOUNT_SHARE_MODE_PROVIDER_DOMAIN:
|
||||
candidateIds = append(candidateIds, provider.DomainId)
|
||||
case api.CLOUD_ACCOUNT_SHARE_MODE_SYSTEM:
|
||||
if account.PublicScope != string(rbacutils.ScopeSystem) {
|
||||
candidateIds = account.GetSharedDomains()
|
||||
candidateIds = append(candidateIds, account.DomainId)
|
||||
}
|
||||
}
|
||||
domainMap := make(map[string]db.STenant)
|
||||
err := db.FetchQueryObjectsByIds(db.TenantCacheManager.GetDomainQuery(), "id", candidateIds, &domainMap)
|
||||
if err != nil {
|
||||
return output, errors.Wrap(err, "FetchQueryObjectsByIds")
|
||||
}
|
||||
output.Candidates = make([]apis.SharedDomain, len(candidateIds))
|
||||
for i := range candidateIds {
|
||||
output.Candidates[i].Id = candidateIds[i]
|
||||
if domain, ok := domainMap[candidateIds[i]]; ok {
|
||||
output.Candidates[i].Name = domain.Name
|
||||
}
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
|
||||
func _managedResourceFilterByDomain(managerIdFieldName string, q *sqlchemy.SQuery, query apis.DomainizedResourceListInput, filterField string, subqFunc func() *sqlchemy.SQuery) (*sqlchemy.SQuery, error) {
|
||||
domainStr := query.ProjectDomain
|
||||
if len(domainStr) > 0 {
|
||||
|
||||
@@ -225,6 +225,9 @@ func (domain *SDomain) CustomizeCreate(ctx context.Context, userCred mcclient.To
|
||||
// domain.ParentId = api.KeystoneDomainRoot
|
||||
domain.DomainId = api.KeystoneDomainRoot
|
||||
domain.IsDomain = tristate.True
|
||||
if len(domain.Displayname) == 0 {
|
||||
domain.Displayname = domain.Name
|
||||
}
|
||||
return domain.SStandaloneResourceBase.CustomizeCreate(ctx, userCred, ownerId, query, data)
|
||||
}
|
||||
|
||||
|
||||
@@ -283,6 +283,9 @@ func (manager *SProjectManager) QueryDistinctExtraField(q *sqlchemy.SQuery, fiel
|
||||
func (model *SProject) CustomizeCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) error {
|
||||
model.ParentId = ownerId.GetProjectDomainId()
|
||||
model.IsDomain = tristate.False
|
||||
if len(model.Displayname) == 0 {
|
||||
model.Displayname = model.Name
|
||||
}
|
||||
return model.SIdentityBaseResource.CustomizeCreate(ctx, userCred, ownerId, query, data)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user