mirror of
https://github.com/traefik/traefik.git
synced 2026-05-28 04:35:59 -04:00
Make resolveReference method as a function
This commit is contained in:
parent
36a565a599
commit
83cc8fee5d
3 changed files with 31 additions and 31 deletions
|
|
@ -434,32 +434,6 @@ func (p *Provider) loadConfigurationFromCRD(ctx context.Context, client Client)
|
|||
return conf
|
||||
}
|
||||
|
||||
func (p *Provider) resolveReference(ctx context.Context, parentNs, ns, name string) (string, error) {
|
||||
if strings.Contains(name, providerNamespaceSeparator) {
|
||||
if !p.AllowCrossNamespace && strings.HasSuffix(name, providerNamespaceSeparator+providerName) {
|
||||
return "", errors.New("when allowCrossNamespace is disabled, @kubernetescrd references are disallowed")
|
||||
}
|
||||
|
||||
if !isCrossProviderNamespaceAllowed(p.CrossProviderNamespaces, parentNs) {
|
||||
return "", fmt.Errorf("namespace %q is not in crossProviderNamespaces", parentNs)
|
||||
}
|
||||
|
||||
if ns != "" {
|
||||
log.FromContext(ctx).Warnf("Namespace %q is ignored in cross-provider context", ns)
|
||||
}
|
||||
|
||||
return name, nil
|
||||
}
|
||||
|
||||
ns = namespaceOrParentNamespace(ns, parentNs)
|
||||
|
||||
if !isNamespaceAllowed(p.AllowCrossNamespace, parentNs, ns) {
|
||||
return "", errors.New("allowCrossNamespace is disabled, cross-namespace are disallowed")
|
||||
}
|
||||
|
||||
return provider.Normalize(ns + "-" + name), nil
|
||||
}
|
||||
|
||||
func (p *Provider) createErrorPageMiddleware(ctx context.Context, client Client, namespace string, errorPage *traefikv1alpha1.ErrorPage) (string, *dynamic.ErrorPage, *dynamic.Service, error) {
|
||||
if errorPage == nil {
|
||||
return "", nil, nil, nil
|
||||
|
|
@ -493,7 +467,7 @@ func (p *Provider) createChainMiddleware(ctx context.Context, parentNamespace st
|
|||
for _, mi := range chain.Middlewares {
|
||||
ctxMid := log.With(ctx, log.Str("middlewareRef", mi.Namespace+"/"+mi.Name))
|
||||
|
||||
middlewareRef, err := p.resolveReference(ctxMid, parentNamespace, mi.Namespace, mi.Name)
|
||||
middlewareRef, err := resolveReference(ctxMid, parentNamespace, mi.Namespace, mi.Name, p.CrossProviderNamespaces, p.AllowCrossNamespace)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid reference to middleware %s: %w", mi.Name, err)
|
||||
}
|
||||
|
|
@ -1234,3 +1208,29 @@ func isCrossProviderNamespaceAllowed(allowList []string, namespace string) bool
|
|||
|
||||
return slices.Contains(allowList, namespace)
|
||||
}
|
||||
|
||||
func resolveReference(ctx context.Context, parentNs, ns, name string, crossProviderNamespaces []string, allowCrossNamespace bool) (string, error) {
|
||||
if strings.Contains(name, providerNamespaceSeparator) {
|
||||
if !allowCrossNamespace && strings.HasSuffix(name, providerNamespaceSeparator+providerName) {
|
||||
return "", errors.New("when allowCrossNamespace is disabled, @kubernetescrd references are disallowed")
|
||||
}
|
||||
|
||||
if !isCrossProviderNamespaceAllowed(crossProviderNamespaces, parentNs) {
|
||||
return "", fmt.Errorf("namespace %q is not in crossProviderNamespaces", parentNs)
|
||||
}
|
||||
|
||||
if ns != "" {
|
||||
log.FromContext(ctx).Warnf("Namespace %q is ignored in cross-provider context", ns)
|
||||
}
|
||||
|
||||
return name, nil
|
||||
}
|
||||
|
||||
ns = namespaceOrParentNamespace(ns, parentNs)
|
||||
|
||||
if !isNamespaceAllowed(allowCrossNamespace, parentNs, ns) {
|
||||
return "", errors.New("allowCrossNamespace is disabled, cross-namespace are disallowed")
|
||||
}
|
||||
|
||||
return provider.Normalize(ns + "-" + name), nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ func (p *Provider) loadIngressRouteConfiguration(ctx context.Context, client Cli
|
|||
tlsOptions := ingressRoute.Spec.TLS.Options
|
||||
ctxTLSOption := log.With(ctx, log.Str("TLSOption", tlsOptions.Name))
|
||||
|
||||
r.TLS.Options, err = p.resolveReference(ctxTLSOption, ingressRoute.Namespace, tlsOptions.Namespace, tlsOptions.Name)
|
||||
r.TLS.Options, err = resolveReference(ctxTLSOption, ingressRoute.Namespace, tlsOptions.Namespace, tlsOptions.Name, p.CrossProviderNamespaces, p.AllowCrossNamespace)
|
||||
if err != nil {
|
||||
logger.WithError(err).Errorf("Invalid reference to TLSOption %q", ingressRoute.Spec.TLS.Options.Name)
|
||||
continue
|
||||
|
|
@ -151,7 +151,7 @@ func (p *Provider) makeMiddlewareKeys(ctx context.Context, ingRouteNamespace str
|
|||
for _, mi := range middlewares {
|
||||
ctxMid := log.With(ctx, log.Str(log.MiddlewareName, mi.Name))
|
||||
|
||||
middlewareRef, err := p.resolveReference(ctxMid, ingRouteNamespace, mi.Namespace, mi.Name)
|
||||
middlewareRef, err := resolveReference(ctxMid, ingRouteNamespace, mi.Namespace, mi.Name, p.CrossProviderNamespaces, p.AllowCrossNamespace)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid reference to middleware %s: %w", mi.Name, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ func (p *Provider) loadIngressRouteTCPConfiguration(ctx context.Context, client
|
|||
tlsOptions := ingressRouteTCP.Spec.TLS.Options
|
||||
ctxTLSOption := log.With(ctx, log.Str("TLSOption", tlsOptions.Name))
|
||||
|
||||
r.TLS.Options, err = p.resolveReference(ctxTLSOption, ingressRouteTCP.Namespace, tlsOptions.Namespace, tlsOptions.Name)
|
||||
r.TLS.Options, err = resolveReference(ctxTLSOption, ingressRouteTCP.Namespace, tlsOptions.Namespace, tlsOptions.Name, p.CrossProviderNamespaces, p.AllowCrossNamespace)
|
||||
if err != nil {
|
||||
logger.WithError(err).Errorf("Invalid reference to TLSOption %q", ingressRouteTCP.Spec.TLS.Options.Name)
|
||||
continue
|
||||
|
|
@ -132,7 +132,7 @@ func (p *Provider) makeMiddlewareTCPKeys(ctx context.Context, ingRouteTCPNamespa
|
|||
for _, mi := range middlewares {
|
||||
ctxMid := log.With(ctx, log.Str(log.MiddlewareName, mi.Name))
|
||||
|
||||
middlewareRef, err := p.resolveReference(ctxMid, ingRouteTCPNamespace, mi.Namespace, mi.Name)
|
||||
middlewareRef, err := resolveReference(ctxMid, ingRouteTCPNamespace, mi.Namespace, mi.Name, p.CrossProviderNamespaces, p.AllowCrossNamespace)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid reference to middleware %s: %w", mi.Name, err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue