func()

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
}