in pkg/appgw/requestroutingrules.go [266:324]
func (c *appGwConfigBuilder) getDefaultFromRule(cbCtx *ConfigBuilderContext, listenerID listenerIdentifier, listenerAzConfig listenerAzConfig, ingress *networking.Ingress, rule *networking.IngressRule) (*string, *string, *string, *string) {
if sslRedirect, _ := annotations.IsSslRedirect(ingress); sslRedirect && listenerAzConfig.Protocol == n.ApplicationGatewayProtocolHTTP {
targetListener := listenerID
targetListener.FrontendPort = 443
// We could end up in a situation where we are attempting to attach a redirect, which does not exist.
redirectRef := c.getSslRedirectConfigResourceReference(targetListener)
redirectsSet := *c.groupRedirectsByID(c.getRedirectConfigurations(cbCtx))
if _, exists := redirectsSet[*redirectRef.ID]; exists {
klog.V(3).Infof("Attached default redirection %s to rule %+v", *redirectRef.ID, *rule)
return nil, nil, redirectRef.ID, nil
}
klog.Errorf("Will not attach default redirect to rule; SSL Redirect does not exist: %s", *redirectRef.ID)
}
var defRule *networking.IngressRule
var defPath *networking.HTTPIngressPath
defBackend := ingress.Spec.DefaultBackend
for pathIdx := range rule.HTTP.Paths {
path := &rule.HTTP.Paths[pathIdx]
if isPathCatchAll(path.Path, path.PathType) {
defBackend = &path.Backend
defPath = path
defRule = rule
}
}
backendPools := c.newBackendPoolMap(cbCtx)
_, backendHTTPSettingsMap, _, _ := c.getBackendsAndSettingsMap(cbCtx)
var defaultRewriteRuleSet *string
if defBackend != nil {
// has default backend
defaultBackendID := generateBackendID(ingress, defRule, defPath, defBackend)
defaultHTTPSettings := backendHTTPSettingsMap[defaultBackendID]
defaultAddressPool := backendPools[defaultBackendID]
// check both annotations for rewrite-rule-set, use appropriate one, if both are present - throw error
rewriteRuleSet, err1 := annotations.RewriteRuleSet(ingress)
rewriteRuleSetCR, err2 := annotations.RewriteRuleSetCustomResource(ingress)
if err1 == nil && rewriteRuleSet != "" && err2 == nil && rewriteRuleSetCR != "" {
klog.Errorf("%s and %s both annotations are defined. Please use one.", annotations.RewriteRuleSetKey, annotations.RewriteRuleSetCustomResourceKey)
} else if err1 == nil && rewriteRuleSet != "" {
defaultRewriteRuleSet = to.StringPtr(c.appGwIdentifier.rewriteRuleSetID(rewriteRuleSet))
} else if err2 == nil && rewriteRuleSetCR != "" {
rewriteRuleSetCR = fmt.Sprintf("crd-%s-%s", ingress.Namespace, rewriteRuleSetCR)
defaultRewriteRuleSet = to.StringPtr(c.appGwIdentifier.rewriteRuleSetID(rewriteRuleSetCR))
}
if defaultAddressPool != nil && defaultHTTPSettings != nil {
poolID := to.StringPtr(c.appGwIdentifier.AddressPoolID(*defaultAddressPool.Name))
settID := to.StringPtr(c.appGwIdentifier.HTTPSettingsID(*defaultHTTPSettings.Name))
return poolID, settID, nil, defaultRewriteRuleSet
}
}
return cbCtx.DefaultAddressPoolID, cbCtx.DefaultHTTPSettingsID, nil, defaultRewriteRuleSet
}