Skip to content

feat(decoredirect): add redirectCode field (301|307) and opt-in X-Redirect-By header#17

Merged
igoramf merged 16 commits into
mainfrom
feat/decoredirect-redirect-code-header
May 29, 2026
Merged

feat(decoredirect): add redirectCode field (301|307) and opt-in X-Redirect-By header#17
igoramf merged 16 commits into
mainfrom
feat/decoredirect-redirect-code-header

Conversation

@igoramf

@igoramf igoramf commented May 28, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add redirectCode optional field to DecoRedirect CRD — accepts 301 or 307 (kubebuilder enum, validated by API server), defaults to 307. The controller sets nginx.ingress.kubernetes.io/permanent-redirect-code per-Ingress from this value.
  • Expose redirectCode in the operator management HTTP API (POST body and GET/LIST response).
  • Add opt-in X-Redirect-By response header: when redirect.decoHeader.enabled=true, the Helm chart creates a deco-custom-headers ConfigMap and nginx reads it via add-headers. Value is configurable (redirect.decoHeader.value, default "deco"). A NOTES.txt warning fires if enabled=true but add-headers is not wired.

Notes

  • Default change: existing redirects will move from 301 → 307 on next reconcile (kubebuilder injects the default at next API server write). Intentional per the spec, but worth calling out in release notes for SEO-sensitive clients.
  • The decoHeader feature requires two values to be set together (redirect.decoHeader.enabled=true + ingress-nginx.controller.config.add-headers); Helm subchart value templating doesn't allow auto-wiring, so the NOTES.txt warning bridges the gap.

Test Plan

  • make test passes (all controller + API tests green)
  • helm lint chart/ passes
  • helm template --set redirect.decoHeader.enabled=true renders deco-custom-headers ConfigMap
  • helm template (defaults) renders no deco-custom-headers
  • POST /redirects with redirectCode: 301 stores and returns 301
  • POST /redirects with redirectCode: 302 returns 422
  • POST /redirects without redirectCode defaults to 307

🤖 Generated with Claude Code


Summary by cubic

Adds an optional redirectCode (301 or 307; default 307) to DecoRedirect, passes it through the HTTP API and controller to set the NGINX per-Ingress redirect code, and adds opt-in custom response headers via Helm. Also ignores values-local.yaml.

  • New Features

    • CRD: redirectCode enum (301|307) with default 307; API server validates.
    • Controller: sets nginx.ingress.kubernetes.io/permanent-redirect-code per Ingress.
    • HTTP API: POST accepts redirectCode; GET/LIST return it; invalid values return 422.
    • Helm: opt-in custom response headers via redirect.customHeaders (map) rendering a redirect-response-headers ConfigMap; NOTES.txt shows activation steps and warns if not wired; works with ingress-nginx.
    • Helm generator: generates the custom headers ConfigMap template so it isn’t removed by cleanups.
  • Migration

    • Default change: existing redirects move from 301 to 307 on next reconcile.
    • To enable headers: set redirect.customHeaders.enabled=true with redirect.customHeaders.headers, and set ingress-nginx.controller.config.add-headers: "<redirect.namespace>/redirect-response-headers".

Written for commit 14f34d4. Summary will update on new commits.

Review in cubic

nicacioliveira
nicacioliveira previously approved these changes May 28, 2026
igoramf and others added 16 commits May 29, 2026 11:39
…header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ect-By header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…Redirect

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…directCode

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ator

Prevents cleanTemplates() from deleting the hand-placed ConfigMap on every
make generate run by adding an addRedirectCustomHeaders generator function.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@igoramf igoramf force-pushed the feat/decoredirect-redirect-code-header branch from f7e3650 to 14f34d4 Compare May 29, 2026 14:40
@igoramf igoramf merged commit f7e178f into main May 29, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants