func createOrUpdateOverride()

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
}