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
}