diff --git a/pkg/cloudcommon/db/metadata.go b/pkg/cloudcommon/db/metadata.go index a04305ce80..03fa9ee736 100644 --- a/pkg/cloudcommon/db/metadata.go +++ b/pkg/cloudcommon/db/metadata.go @@ -38,8 +38,9 @@ const ( CLOUD_TAG_PREFIX = "ext:" USER_TAG_PREFIX = "user:" - TAG_DELETE_RANGE_USER = "user" - TAG_DELETE_RANGE_CLOUD = "cloud" + // TAG_DELETE_RANGE_USER = "user" + // TAG_DELETE_RANGE_CLOUD = CLOUD_TAG_PREFIX // "cloud" + TAG_DELETE_RANGE_ALL = "all" ) @@ -332,9 +333,9 @@ func (manager *SMetadataManager) SetAll(ctx context.Context, obj IModel, store m records := []SMetadata{} q := manager.Query().Equals("id", idStr).NotLike("key", `\_\_%`) //避免删除系统内置的metadata, _ 在mysql里面有特殊含义,需要转义 switch delRange { - case TAG_DELETE_RANGE_USER: + case USER_TAG_PREFIX: q = q.Like("key", USER_TAG_PREFIX+"%") - case TAG_DELETE_RANGE_CLOUD: + case CLOUD_TAG_PREFIX: q = q.Like("key", CLOUD_TAG_PREFIX+"%") } q = q.Filter(sqlchemy.NOT(sqlchemy.In(q.Field("key"), keys))) diff --git a/pkg/cloudcommon/db/standalone.go b/pkg/cloudcommon/db/standalone.go index d572c0be4e..45ef9d606f 100644 --- a/pkg/cloudcommon/db/standalone.go +++ b/pkg/cloudcommon/db/standalone.go @@ -258,7 +258,11 @@ func (model *SStandaloneResourceBase) SetUserMetadataValues(ctx context.Context, } func (model *SStandaloneResourceBase) SetUserMetadataAll(ctx context.Context, dictstore map[string]interface{}, userCred mcclient.TokenCredential) error { - return Metadata.SetAll(ctx, model, dictstore, userCred, "user") + return Metadata.SetAll(ctx, model, dictstore, userCred, USER_TAG_PREFIX) +} + +func (model *SStandaloneResourceBase) SetCloudMetadataAll(ctx context.Context, dictstore map[string]interface{}, userCred mcclient.TokenCredential) error { + return Metadata.SetAll(ctx, model, dictstore, userCred, CLOUD_TAG_PREFIX) } func (model *SStandaloneResourceBase) RemoveMetadata(ctx context.Context, key string, userCred mcclient.TokenCredential) error { @@ -343,7 +347,7 @@ func (model *SStandaloneResourceBase) PerformSetUserMetadata(ctx context.Context } dictStore := make(map[string]interface{}) for k, v := range dictMap { - dictStore["user:"+k], _ = v.GetString() + dictStore[USER_TAG_PREFIX+k], _ = v.GetString() } err = model.SetUserMetadataAll(ctx, dictStore, userCred) return nil, err diff --git a/pkg/compute/models/syncutils.go b/pkg/compute/models/syncutils.go index c64833fd77..2f69554461 100644 --- a/pkg/compute/models/syncutils.go +++ b/pkg/compute/models/syncutils.go @@ -21,11 +21,13 @@ import ( "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/mcclient" + "yunion.io/x/onecloud/pkg/cloudcommon/db" ) type IMetadataSetter interface { - SetAllMetadata(ctx context.Context, meta map[string]interface{}, userCred mcclient.TokenCredential) error - SetMetadata(ctx context.Context, key string, value interface{}, userCred mcclient.TokenCredential) error + // SetAllMetadata(ctx context.Context, meta map[string]interface{}, userCred mcclient.TokenCredential) error + // SetMetadata(ctx context.Context, key string, value interface{}, userCred mcclient.TokenCredential) error + SetCloudMetadataAll(ctx context.Context, meta map[string]interface{}, userCred mcclient.TokenCredential) error } func syncMetadata(ctx context.Context, userCred mcclient.TokenCredential, model IMetadataSetter, remote cloudprovider.ICloudResource) error { @@ -37,9 +39,13 @@ func syncMetadata(ctx context.Context, userCred mcclient.TokenCredential, model log.Errorf("Get VM Metadata error: %v", err) return err } + store := make(map[string]interface{}, 0) for key, value := range meta { - model.SetMetadata(ctx, "ext:"+key, value, userCred) + store[db.CLOUD_TAG_PREFIX + key] = value } + // model.SetMetadata(ctx, "ext:"+key, value, userCred) + // replace all ext keys + model.SetCloudMetadataAll(ctx, store, userCred) } return nil }