fix: replace all ext metadata

This commit is contained in:
Qiu Jian
2019-06-30 01:11:49 +08:00
parent 0ed5531915
commit bcb5fc06ea
3 changed files with 20 additions and 9 deletions
+5 -4
View File
@@ -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)))
+6 -2
View File
@@ -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
+9 -3
View File
@@ -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
}