in pkg/admin/services/traffic/generic_rule_operation.go [71:129]
func createOrUpdateOverride(key string, side, param string, newRule model.Override) 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 != "" {
//oJsonByte, err := yaml2.YAMLToJSON([]byte(oldRule))
//if err != nil {
// logger.Errorf("Failed to convert yaml to json!", err)
//}
//nJsonByte, err := yaml2.YAMLToJSON(newRuleByte)
//if err != nil {
// logger.Errorf("Failed to convert yaml to json!", err)
//}
//patch, err := jsonpatch.CreateMergePatch(nJsonByte, oJsonByte)
//fmt.Printf(string(patch))
//testConsumer := `[ { "op": "test", "path": "/side", "value": "consumer" } ]`
//testTimeout := `[ { "op": "test", "path": "/parameters/timeout", "value": null } ]`
//consumerPatch, _ := jsonpatch.DecodePatch(testConsumer)
//timeoutPatch, _ := jsonpatch.DecodePatch(testTimeout)
override := &model.Override{}
_ = yaml.Unmarshal([]byte(oldRule), override)
if param == "weight" {
mergeWeight(override, side, param, newRule)
} else {
mergeOverride(override, side, param, newRule)
}
mergedRuleByte, err := yaml.Marshal(override)
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 timeout yaml rule!", err)
}
return nil
}