fix(region): associate manager with external project

This commit is contained in:
ioito
2022-02-10 17:16:33 +08:00
parent 814f7117a8
commit bb8df2b6ea
7 changed files with 37 additions and 10 deletions
+2
View File
@@ -847,6 +847,8 @@ type ICloudProject interface {
GetDomainId() string
GetDomainName() string
GetAccountId() string
}
type ICloudNatGateway interface {
+20
View File
@@ -82,10 +82,12 @@ func (manager *SExternalProjectManager) FetchCustomizeColumns(
) []api.ExternalProjectDetails {
rows := make([]api.ExternalProjectDetails, len(objs))
virRows := manager.SVirtualResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList)
managerRows := manager.SManagedResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList)
accountIds := make([]string, len(objs))
for i := range rows {
rows[i] = api.ExternalProjectDetails{
VirtualResourceDetails: virRows[i],
ManagedResourceInfo: managerRows[i],
}
proj := objs[i].(*SExternalProject)
accountIds[i] = proj.CloudaccountId
@@ -186,10 +188,18 @@ func (self *SExternalProject) syncRemoveCloudProject(ctx context.Context, userCr
func (self *SExternalProject) SyncWithCloudProject(ctx context.Context, userCred mcclient.TokenCredential, account *SCloudaccount, ext cloudprovider.ICloudProject) error {
s := auth.GetAdminSession(ctx, consts.GetRegion(), "v1")
providers := account.GetCloudproviders()
providerMaps := map[string]string{}
for _, provider := range providers {
providerMaps[provider.Account] = provider.Id
}
diff, err := db.UpdateWithLock(ctx, self, func() error {
self.Name = ext.GetName()
self.IsEmulated = ext.IsEmulated()
self.Status = ext.GetStatus()
if accountId := ext.GetAccountId(); len(accountId) > 0 {
self.ManagerId, _ = providerMaps[accountId]
}
share := account.GetSharedInfo()
if self.DomainId != account.DomainId && !(share.PublicScope == rbacutils.ScopeSystem ||
(share.PublicScope == rbacutils.ScopeDomain && utils.IsInStringArray(self.DomainId, share.SharedDomains))) {
@@ -312,6 +322,16 @@ func (manager *SExternalProjectManager) newFromCloudProject(ctx context.Context,
project.DomainId = account.DomainId
project.ProjectId = account.ProjectId
project.ExternalDomainId = extProject.GetDomainId()
providers := account.GetCloudproviders()
providerMaps := map[string]string{}
for _, provider := range providers {
providerMaps[provider.Account] = provider.Id
}
if accountId := extProject.GetAccountId(); len(accountId) > 0 {
project.ManagerId, _ = providerMaps[accountId]
}
domainName := extProject.GetDomainName()
if len(project.ExternalDomainId) > 0 && len(domainName) > 0 {
domainId, err := account.getOrCreateDomain(ctx, userCred, project.ExternalDomainId, domainName)
+1 -9
View File
@@ -133,7 +133,7 @@ func (self *SOrganizationTree) ListProjects() []SResourceGroupList {
}
type SProject struct {
multicloud.SResourceBase
multicloud.SProjectBase
client *SApsaraClient
Id string
@@ -145,14 +145,6 @@ func (self *SProject) GetId() string {
return self.Id
}
func (self *SProject) GetDomainId() string {
return ""
}
func (self *SProject) GetDomainName() string {
return ""
}
func (self *SProject) GetGlobalId() string {
return self.Id
}
+1 -1
View File
@@ -37,7 +37,7 @@ func (self DepartmentInfo) GetProjectId() string {
}
type SResourceGroup struct {
multicloud.SResourceBase
multicloud.SProjectBase
multicloud.ApsaraTags
client *SApsaraClient
+4
View File
@@ -578,6 +578,10 @@ func (self *SAzureClient) ListResourceGroups() ([]SResourceGroup, error) {
if err != nil {
return nil, errors.Wrap(err, "list")
}
for i := range resourceGroups {
resourceGroups[i].client = self
resourceGroups[i].subId = self.subscriptionId
}
return resourceGroups, nil
}
+5
View File
@@ -39,6 +39,7 @@ type SResourceGroup struct {
Location string
Properties GroupProperties
ManagedBy string
subId string
}
func (self *SRegion) GetResourceGroupDetail(groupName string) (*SResourceGroup, error) {
@@ -74,6 +75,10 @@ func (r *SResourceGroup) GetId() string {
return r.ID
}
func (self *SResourceGroup) GetAccountId() string {
return fmt.Sprintf("%s/%s", self.client.tenantId, self.subId)
}
func (r *SResourceGroup) GetGlobalId() string {
return strings.ToLower(r.Name)
}
+4
View File
@@ -26,3 +26,7 @@ func (self *SProjectBase) GetDomainName() string {
func (self *SProjectBase) GetDomainId() string {
return ""
}
func (self *SProjectBase) GetAccountId() string {
return ""
}