支持已存在命名空间,覆盖性迁移
This commit is contained in:
parent
6c31164c37
commit
f1fe0cfe88
@ -61,49 +61,83 @@ func Migrate(dataDriver ITransform, optionList ...SetMigrateOption) error {
|
||||
}
|
||||
|
||||
var (
|
||||
sourceData map[string]string
|
||||
err error
|
||||
namespaceDetail *model.Namespace
|
||||
sourceData map[string]string
|
||||
err error
|
||||
namespaceDetail *model.Namespace
|
||||
hasCreateConfigList []*model.Config
|
||||
)
|
||||
if sourceData, err = dataDriver.GetSourceData(); nil != err {
|
||||
return err
|
||||
}
|
||||
|
||||
namespaceID := int64(0)
|
||||
if namespaceDetail, err = manager.Namespace.GetNamespaceDetail(0, namespace); nil == err && nil != namespaceDetail {
|
||||
namespaceID = namespaceDetail.ID
|
||||
if !mo.Force {
|
||||
// 非强制迁移, 报错
|
||||
return fmt.Errorf("当前命名空间 %s(%v) 已存在, 迁移存在风险, 若要强制迁移, 请使用force=true", namespace, namespaceDetail.ID)
|
||||
}
|
||||
// 强制迁移, 需要查询已有的key, 用于判断后续是
|
||||
if hasCreateConfigList, err = manager.Config.GetNamespaceConfig(namespaceDetail.ID); nil != err {
|
||||
return fmt.Errorf("当前命名空间 %s(%v) 已存在, 强制迁移查询已存在的配置失败: %s", namespace, namespaceDetail.ID, err.Error())
|
||||
}
|
||||
}
|
||||
// 创建命名空间
|
||||
if err = manager.Namespace.Create(&form.CreateNamespace{
|
||||
Namespace: namespace,
|
||||
Name: "apollo迁移-" + namespace,
|
||||
Description: "从apollo迁移过来的配置",
|
||||
CreateUserID: "migrate-script",
|
||||
}); nil != err {
|
||||
return errors.New("创建命名空间失败 : " + err.Error())
|
||||
}
|
||||
// 激活命名空间
|
||||
if err = manager.Namespace.Active(&form.ActiveNamespace{
|
||||
NamespaceID: 0,
|
||||
Namespace: namespace,
|
||||
UpdateUserID: "system-script",
|
||||
}); nil != err {
|
||||
return errors.New("激活命名空间失败 : " + err.Error())
|
||||
if namespaceID == 0 {
|
||||
// 创建命名空间
|
||||
if err = manager.Namespace.Create(&form.CreateNamespace{
|
||||
Namespace: namespace,
|
||||
Name: "apollo迁移-" + namespace,
|
||||
Description: "从apollo迁移过来的配置",
|
||||
CreateUserID: "migrate-script",
|
||||
}); nil != err {
|
||||
return errors.New("创建命名空间失败 : " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
if nil != namespaceDetail && namespaceDetail.Status != model.NamespaceStatusNormal {
|
||||
// 激活命名空间
|
||||
if err = manager.Namespace.Active(&form.ActiveNamespace{
|
||||
NamespaceID: 0,
|
||||
Namespace: namespace,
|
||||
UpdateUserID: "system-script",
|
||||
}); nil != err {
|
||||
return errors.New("激活命名空间失败 : " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
hasCreateConfigTable := make(map[string]*model.Config)
|
||||
for _, item := range hasCreateConfigList {
|
||||
hasCreateConfigTable[item.Field] = item
|
||||
}
|
||||
// 迁移配置
|
||||
for key, value := range sourceData {
|
||||
if err = manager.Config.Create(&form.CreateOrUpdateConfig{
|
||||
NamespaceID: 0,
|
||||
hasSetConfig, exist := hasCreateConfigTable[key]
|
||||
if !exist {
|
||||
if err = manager.Config.Create(&form.CreateOrUpdateConfig{
|
||||
NamespaceID: 0,
|
||||
Namespace: namespace,
|
||||
Key: key,
|
||||
Value: value,
|
||||
OperateUserID: "system-script",
|
||||
Description: fmt.Sprintf("从apollo-%s-%s迁移过来的配置", namespace, key),
|
||||
}, namespaceDetail); nil != err {
|
||||
dataDriver.MigrateKeyFailCallback(namespace, key, value, err)
|
||||
}
|
||||
continue
|
||||
}
|
||||
// 已存在更新,执行下面的逻辑
|
||||
if hasSetConfig.Value == value {
|
||||
// 已存在值和目标值一致,无需处理
|
||||
continue
|
||||
}
|
||||
if err = manager.Config.Update(&form.CreateOrUpdateConfig{
|
||||
NamespaceID: namespaceDetail.ID,
|
||||
Namespace: namespace,
|
||||
Key: key,
|
||||
Value: value,
|
||||
OperateUserID: "system-script",
|
||||
Description: fmt.Sprintf("从apollo-%s-%s迁移过来的配置", namespace, key),
|
||||
}, namespaceDetail); nil != err {
|
||||
}, namespaceDetail, hasSetConfig); nil != err {
|
||||
dataDriver.MigrateKeyFailCallback(namespace, key, value, err)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user