fix(region): external project sync (#15647)

This commit is contained in:
屈轩
2022-12-29 14:57:06 +08:00
committed by GitHub
parent 5ffa5791a9
commit 1094243359
8 changed files with 75 additions and 11 deletions
+1 -1
View File
@@ -81,7 +81,7 @@ require (
k8s.io/client-go v0.19.3
k8s.io/cluster-bootstrap v0.19.3
moul.io/http2curl/v2 v2.3.0
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221228030216-7840b7140ffa
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221229033822-9125be57abc8
yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656
yunion.io/x/jsonutils v1.0.1-0.20220819091305-3bab322ab4fd
yunion.io/x/log v1.0.0
+2 -2
View File
@@ -1158,8 +1158,8 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221228030216-7840b7140ffa h1:w31Dhfg8D9fufpOP3WD15VpIKBQnBqGGB/kVUkYgH0M=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221228030216-7840b7140ffa/go.mod h1:yEMFtIKPyIdIfPzsw7oTcH41JXc8G5StUAQw3ZoGj5I=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221229033822-9125be57abc8 h1:mwfMHctVw2QGMIt9HWgY8BshxB1vXXxJtBqXtJ8Lm1g=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221229033822-9125be57abc8/go.mod h1:yEMFtIKPyIdIfPzsw7oTcH41JXc8G5StUAQw3ZoGj5I=
yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656 h1:0zlZD5uhZoIHgLVAWCz2aHaYk2ZrNsACCYD7R6EIBII=
yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws=
yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634=
+36 -1
View File
@@ -267,7 +267,42 @@ func (self *SExternalProject) SyncWithCloudProject(ctx context.Context, userCred
}
return nil
}
if account.AutoCreateProject && options.Options.EnableAutoRenameProject {
pm, _ := account.GetProjectMapping()
if pm != nil && pm.Enabled.IsTrue() && pm.IsNeedProjectSync() && self.ProjectSrc != string(apis.OWNER_SOURCE_LOCAL) {
extTags, err := ext.GetTags()
if err != nil {
return errors.Wrapf(err, "extModel.GetTags")
}
find := false
if pm.Rules != nil {
for _, rule := range *pm.Rules {
domainId, projectId, newProj, isMatch := rule.IsMatchTags(extTags)
if isMatch && len(newProj) > 0 {
domainId, projectId, err = account.getOrCreateTenant(context.TODO(), newProj, "", "", "auto create from tag")
if err != nil {
log.Errorf("getOrCreateTenant(%s) error: %v", newProj, err)
continue
}
if len(domainId) > 0 && len(projectId) > 0 {
self.DomainId = domainId
self.ProjectId = projectId
find = true
break
}
}
}
}
if !find && account.AutoCreateProject {
desc := fmt.Sprintf("auto create from cloud project %s (%s)", self.Name, self.ExternalId)
domainId, projectId, err := account.getOrCreateTenant(ctx, self.Name, self.DomainId, "", desc)
if err != nil {
log.Errorf("failed to get or create tenant %s(%s) %v", self.Name, self.ExternalId, err)
} else {
self.DomainId = domainId
self.ProjectId = projectId
}
}
} else if account.AutoCreateProject && options.Options.EnableAutoRenameProject {
tenant, err := db.TenantCacheManager.FetchTenantById(ctx, self.ProjectId)
if err != nil {
return errors.Wrapf(err, "TenantCacheManager.FetchTenantById(%s)", self.ProjectId)
+1 -1
View File
@@ -1439,7 +1439,7 @@ sigs.k8s.io/structured-merge-diff/v4/value
# sigs.k8s.io/yaml v1.2.0
## explicit; go 1.12
sigs.k8s.io/yaml
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221228030216-7840b7140ffa
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221229033822-9125be57abc8
## explicit; go 1.18
yunion.io/x/cloudmux/pkg/apis
yunion.io/x/cloudmux/pkg/apis/billing
+2 -2
View File
@@ -977,8 +977,8 @@ func getResourceGroup(id string) string {
break
}
}
if idx > 0 && idx < len(info)-1 {
return fmt.Sprintf("%s/%s", info[1], info[idx])
if idx > 0 && idx < len(info)-2 {
return fmt.Sprintf("%s/%s", info[2], info[idx])
}
return ""
}
+2 -2
View File
@@ -96,12 +96,12 @@ func (self *SESXiClient) getEcsMetrics(metricName string, metricType cloudprovid
sample, err := perfManager.Query(self.context, queries)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "Query")
}
result, err := perfManager.ToMetricSeries(self.context, sample)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "ToMetricSeries")
}
ret := []cloudprovider.MetricValues{}
+1 -1
View File
@@ -155,7 +155,7 @@ func (self *SDatastoreImageCache) GetIImageInImagecache() ([]cloudprovider.IClou
var ErrTimeConsuming = errors.Error("time consuming")
func (self *SDatastoreImageCache) getTemplateVMsFromCache() ([]*SVirtualMachine, error) {
ihosts, err := self.datastore.datacenter.GetIHosts()
ihosts, err := self.datastore.getCachedAttachedHosts()
if err != nil {
return nil, err
}
+30 -1
View File
@@ -53,7 +53,7 @@ var (
vmLayoutExProps = []string{"layoutEx.file"}
)
var VIRTUAL_MACHINE_PROPS = []string{"name", "parent", "resourcePool", "snapshot", "config", "availableField"}
var VIRTUAL_MACHINE_PROPS = []string{"name", "parent", "resourcePool", "snapshot", "config", "availableField", "datastore"}
func init() {
VIRTUAL_MACHINE_PROPS = append(VIRTUAL_MACHINE_PROPS, vmSummaryProps...)
@@ -1588,3 +1588,32 @@ func (self *SVirtualMachine) ResetToInstanceSnapshot(ctx context.Context, idStr
}
return object.NewTask(self.manager.client.Client, res.Returnval).Wait(ctx)
}
func (vm *SVirtualMachine) GetDatastores() ([]*SDatastore, error) {
dsList := make([]*SDatastore, 0)
dss := vm.getVirtualMachine().Datastore
for i := range dss {
var moStore mo.Datastore
err := vm.manager.reference2Object(dss[i].Reference(), DATASTORE_PROPS, &moStore)
if err != nil {
log.Errorf("datastore reference2Object %s", err)
return nil, errors.Wrap(err, "reference2Object")
}
ds := NewDatastore(vm.manager, &moStore, vm.datacenter)
dsList = append(dsList, ds)
}
return dsList, nil
}
func (vm *SVirtualMachine) GetDatastoreNames() []string {
dss, err := vm.GetDatastores()
if err != nil {
log.Errorf("GetDatastores fail %s", err)
return nil
}
names := make([]string, 0, len(dss))
for i := range dss {
names = append(names, dss[i].GetName())
}
return names
}