Skip to content

feat(traefik): add Selectel v2 DNS-01 challenge support - #221

Merged
ineedjet merged 4 commits into
mainfrom
traefik-selectelv2-dns-challenge
Oct 10, 2026
Merged

ineedjet merged 4 commits into
mainfrom
traefik-selectelv2-dns-challenge

Conversation

@ineedjet

@ineedjet ineedjet commented Oct 10, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • lego's selectelv2 provider authenticates via Keystone/OpenStack and needs four credentials at once (SELECTELV2_USERNAME, SELECTELV2_PASSWORD, SELECTELV2_ACCOUNT_ID, SELECTELV2_PROJECT_ID), so it can't fit the previous single-token x-dns-challenge-tokens fan-out pattern
  • Rather than special-case just Selectel v2, every DNS challenge provider's credential variable(s) are now named explicitly in apps/traefik/docker-compose.yml's x-vault-env, with the container-side key matching lego's own forced env var name one-for-one: Cloudflare's CF_DNS_API_TOKEN, DigitalOcean's DO_AUTH_TOKEN, Hetzner's HETZNER_API_TOKEN, Linode's LINODE_TOKEN, and Selectel v2's four. The shared DNS_CHALLENGE_TOKEN fan-out variable is dropped entirely.
  • Since lego's own forced keys for Cloudflare/DigitalOcean are abbreviated (CF_/DO_ - hardcoded in lego, not negotiable), the app-facing ${VAR:-} side is decoupled and spelled out in full instead: ${CLOUDFLARE_DNS_API_TOKEN:-} and ${DIGITALOCEAN_AUTH_TOKEN:-}. Hetzner/Linode/Selectel v2's forced names were already unabbreviated, so those are unchanged.
  • vaults/traefik.yml (the live hawkeye/rubykatzen.com target) updated to map its Cloudflare secret through the new full CLOUDFLARE_DNS_API_TOKEN app-facing name
  • AGENTS.md's "Traefik Integration" section rewritten to document the explicit-naming pattern, the container-key-vs-app-facing-name split, and how to add a new provider

Closes #220

Test plan

  • docker compose -f apps/traefik/docker-compose.yml config with required vars set renders all provider credential vars correctly, including the Cloudflare full-name substitution, defaulting to empty string when unset
  • Pre-commit hooks (yamllint, pymarkdown) pass

🤖 Generated with Claude Code

ineedjet and others added 3 commits October 10, 2026 17:57
lego's selectelv2 provider authenticates via Keystone/OpenStack and
needs four credentials at once, so it can't fit the single-token
x-dns-challenge-tokens fan-out pattern. Add SELECTELV2_USERNAME,
SELECTELV2_PASSWORD, SELECTELV2_ACCOUNT_ID, and SELECTELV2_PROJECT_ID
as explicit, optional x-vault-env entries instead.

Fixes #220

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…plicitly

Drop the shared DNS_CHALLENGE_TOKEN fan-out for single-token providers
(CF_DNS_API_TOKEN, DO_AUTH_TOKEN, HETZNER_API_TOKEN, LINODE_TOKEN) so
every provider follows the same explicit, non-fanned-out pattern as
Selectel v2 - one vault variable per lego credential, regardless of
how many a provider needs. Update vaults/traefik.yml's live mapping
to match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…r names

CF_DNS_API_TOKEN and DO_AUTH_TOKEN are lego's own forced container-side
env var names (CF_/DO_ prefixes are hardcoded in lego, not our choice),
but the app-facing ${VAR:-} name a target's vault maps into doesn't have
to mirror that abbreviation. Point both at fully-spelled-out names
instead: ${CLOUDFLARE_DNS_API_TOKEN:-} and ${DIGITALOCEAN_AUTH_TOKEN:-}.
Hetzner/Linode/Selectel v2's forced names were already unabbreviated,
so they're unchanged. Update vaults/traefik.yml's live mapping to match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@ineedjet
ineedjet merged commit 314139f into main Oct 10, 2026
4 checks passed
@ineedjet
ineedjet deleted the traefik-selectelv2-dns-challenge branch October 10, 2026 16:49
@ineedjet ineedjet mentioned this pull request Oct 10, 2026
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.

traefik: add Selectel v2 DNS-01 challenge support

1 participant