支持已存在命名空间,覆盖性迁移
This commit is contained in:
parent
6c31164c37
commit
f1fe0cfe88
@ -64,18 +64,25 @@ func Migrate(dataDriver ITransform, optionList ...SetMigrateOption) error {
|
|||||||
sourceData map[string]string
|
sourceData map[string]string
|
||||||
err error
|
err error
|
||||||
namespaceDetail *model.Namespace
|
namespaceDetail *model.Namespace
|
||||||
|
hasCreateConfigList []*model.Config
|
||||||
)
|
)
|
||||||
if sourceData, err = dataDriver.GetSourceData(); nil != err {
|
if sourceData, err = dataDriver.GetSourceData(); nil != err {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespaceID := int64(0)
|
||||||
if namespaceDetail, err = manager.Namespace.GetNamespaceDetail(0, namespace); nil == err && nil != namespaceDetail {
|
if namespaceDetail, err = manager.Namespace.GetNamespaceDetail(0, namespace); nil == err && nil != namespaceDetail {
|
||||||
|
namespaceID = namespaceDetail.ID
|
||||||
if !mo.Force {
|
if !mo.Force {
|
||||||
// 非强制迁移, 报错
|
// 非强制迁移, 报错
|
||||||
return fmt.Errorf("当前命名空间 %s(%v) 已存在, 迁移存在风险, 若要强制迁移, 请使用force=true", namespace, namespaceDetail.ID)
|
return fmt.Errorf("当前命名空间 %s(%v) 已存在, 迁移存在风险, 若要强制迁移, 请使用force=true", namespace, namespaceDetail.ID)
|
||||||
}
|
}
|
||||||
// 强制迁移, 需要查询已有的key, 用于判断后续是
|
// 强制迁移, 需要查询已有的key, 用于判断后续是
|
||||||
|
if hasCreateConfigList, err = manager.Config.GetNamespaceConfig(namespaceDetail.ID); nil != err {
|
||||||
|
return fmt.Errorf("当前命名空间 %s(%v) 已存在, 强制迁移查询已存在的配置失败: %s", namespace, namespaceDetail.ID, err.Error())
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if namespaceID == 0 {
|
||||||
// 创建命名空间
|
// 创建命名空间
|
||||||
if err = manager.Namespace.Create(&form.CreateNamespace{
|
if err = manager.Namespace.Create(&form.CreateNamespace{
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
@ -85,6 +92,9 @@ func Migrate(dataDriver ITransform, optionList ...SetMigrateOption) error {
|
|||||||
}); nil != err {
|
}); nil != err {
|
||||||
return errors.New("创建命名空间失败 : " + err.Error())
|
return errors.New("创建命名空间失败 : " + err.Error())
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if nil != namespaceDetail && namespaceDetail.Status != model.NamespaceStatusNormal {
|
||||||
// 激活命名空间
|
// 激活命名空间
|
||||||
if err = manager.Namespace.Active(&form.ActiveNamespace{
|
if err = manager.Namespace.Active(&form.ActiveNamespace{
|
||||||
NamespaceID: 0,
|
NamespaceID: 0,
|
||||||
@ -93,9 +103,16 @@ func Migrate(dataDriver ITransform, optionList ...SetMigrateOption) error {
|
|||||||
}); nil != err {
|
}); nil != err {
|
||||||
return errors.New("激活命名空间失败 : " + err.Error())
|
return errors.New("激活命名空间失败 : " + err.Error())
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hasCreateConfigTable := make(map[string]*model.Config)
|
||||||
|
for _, item := range hasCreateConfigList {
|
||||||
|
hasCreateConfigTable[item.Field] = item
|
||||||
|
}
|
||||||
// 迁移配置
|
// 迁移配置
|
||||||
for key, value := range sourceData {
|
for key, value := range sourceData {
|
||||||
|
hasSetConfig, exist := hasCreateConfigTable[key]
|
||||||
|
if !exist {
|
||||||
if err = manager.Config.Create(&form.CreateOrUpdateConfig{
|
if err = manager.Config.Create(&form.CreateOrUpdateConfig{
|
||||||
NamespaceID: 0,
|
NamespaceID: 0,
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
@ -106,6 +123,23 @@ func Migrate(dataDriver ITransform, optionList ...SetMigrateOption) error {
|
|||||||
}, namespaceDetail); nil != err {
|
}, namespaceDetail); nil != err {
|
||||||
dataDriver.MigrateKeyFailCallback(namespace, key, value, 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, hasSetConfig); nil != err {
|
||||||
|
dataDriver.MigrateKeyFailCallback(namespace, key, value, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user