mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
fix(region): associate manager with external project
This commit is contained in:
@@ -847,6 +847,8 @@ type ICloudProject interface {
|
||||
|
||||
GetDomainId() string
|
||||
GetDomainName() string
|
||||
|
||||
GetAccountId() string
|
||||
}
|
||||
|
||||
type ICloudNatGateway interface {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ func (self DepartmentInfo) GetProjectId() string {
|
||||
}
|
||||
|
||||
type SResourceGroup struct {
|
||||
multicloud.SResourceBase
|
||||
multicloud.SProjectBase
|
||||
multicloud.ApsaraTags
|
||||
client *SApsaraClient
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -26,3 +26,7 @@ func (self *SProjectBase) GetDomainName() string {
|
||||
func (self *SProjectBase) GetDomainId() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (self *SProjectBase) GetAccountId() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user