in pkg/admin/services/traffic/generic_rule_operation.go [177:228]
func createOrUpdateCondition(key string, newRule model.ConditionRoute) error {
var mergedRule string
newRuleByte, _ := yaml.Marshal(newRule)
oldRule, err := config.Governance.GetConfig(key)
if err != nil {
if _, ok := err.(*config.RuleNotFound); ok {
logger.Infof("No existing configuration found, will create a new one directly!")
err := config.Governance.SetConfig(key, string(newRuleByte))
if err != nil {
logger.Errorf("Failed to save configuration status, please try again!", err)
return err
}
return nil
} else {
logger.Errorf("Failed to check previous configuration status, please try again!", err)
}
return err
}
if oldRule != "" {
route := &model.ConditionRoute{}
_ = yaml.Unmarshal([]byte(oldRule), route)
exist := false
for _, c := range route.Conditions {
if c == newRule.Conditions[0] {
exist = true
}
}
if !exist {
route.Conditions = append(route.Conditions, newRule.Conditions[0])
}
route.Force = newRule.Force
route.Enabled = newRule.Enabled
route.Runtime = newRule.Runtime
mergedRuleByte, err := yaml.Marshal(route)
if err != nil {
return err
}
mergedRule = string(mergedRuleByte)
} else {
mergedRule = string(newRuleByte)
}
err = config.Governance.SetConfig(key, mergedRule)
if err != nil {
logger.Errorf("Failed to save region condition rule!", err)
}
return nil
}