func()

in pkg/appgw/requestroutingrules.go [420:467]


func (c *appGwConfigBuilder) mergePathMap(existingPathMap *n.ApplicationGatewayURLPathMap, pathMapToMerge *n.ApplicationGatewayURLPathMap, cbCtx *ConfigBuilderContext) *n.ApplicationGatewayURLPathMap {
	if pathMapToMerge.DefaultBackendAddressPool != nil && *pathMapToMerge.DefaultBackendAddressPool.ID != *cbCtx.DefaultAddressPoolID {
		existingPathMap.DefaultBackendAddressPool = pathMapToMerge.DefaultBackendAddressPool
	}
	if pathMapToMerge.DefaultBackendHTTPSettings != nil && *pathMapToMerge.DefaultBackendHTTPSettings.ID != *cbCtx.DefaultHTTPSettingsID {
		existingPathMap.DefaultBackendHTTPSettings = pathMapToMerge.DefaultBackendHTTPSettings
	}
	if pathMapToMerge.DefaultRedirectConfiguration != nil {
		existingPathMap.DefaultRedirectConfiguration = pathMapToMerge.DefaultRedirectConfiguration
		existingPathMap.DefaultBackendAddressPool = nil
		existingPathMap.DefaultBackendHTTPSettings = nil
	}
	if pathMapToMerge.DefaultRewriteRuleSet != nil {
		existingPathMap.DefaultRewriteRuleSet = pathMapToMerge.DefaultRewriteRuleSet
	}

	if pathMapToMerge.PathRules == nil || len(*pathMapToMerge.PathRules) == 0 {
		return existingPathMap
	}

	var mergedPathRules, allPathRules []n.ApplicationGatewayPathRule
	if existingPathMap.PathRules == nil {
		allPathRules = *pathMapToMerge.PathRules
	} else {
		allPathRules = append(*existingPathMap.PathRules, *pathMapToMerge.PathRules...)
	}

	// we want to ensure that there are only unique paths in the url path map
	pathMap := make(map[string]n.ApplicationGatewayPathRule)
	for _, pathRule := range allPathRules {
		addRuleToMergeList := true
		for _, path := range *pathRule.Paths {
			if _, exists := pathMap[path]; exists {
				klog.Errorf("A path-rule with path '%s' already exists'. Existing path rule {%s} and new path rule {%s}.", path, printPathRule(pathMap[path]), printPathRule(pathRule))
				addRuleToMergeList = false
			} else {
				pathMap[path] = pathRule
			}
		}
		if addRuleToMergeList {
			mergedPathRules = append(mergedPathRules, pathRule)
		}
	}

	existingPathMap.PathRules = &mergedPathRules

	return existingPathMap
}