feat: add token-file option for image-pull-secret registry auth

Adds token-file key to image-pull-secret spec config. Reads the
registry token from a file on disk instead of requiring an environment
variable. File path supports ~ expansion. Falls back to token-env
if token-file is not set or file doesn't exist.

This lets operators store the GHCR token in ~/.credentials/ alongside
other secrets, removing the need for ansible to pass REGISTRY_TOKEN
as an env var.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
afd-dumpster-local-testing
A. F. Dudley 2026-03-20 19:30:44 +00:00
parent 61afeb255c
commit 9109cfb7a1
1 changed files with 18 additions and 5 deletions

View File

@ -602,16 +602,29 @@ def create_registry_secret(
server = registry_config.get("server") server = registry_config.get("server")
username = registry_config.get("username") username = registry_config.get("username")
token_env = registry_config.get("token-env") token_env = registry_config.get("token-env")
token_file = registry_config.get("token-file")
if not all([server, username, token_env]): if not server or not username:
return None
if not token_env and not token_file:
return None return None
# Type narrowing for pyright - we've validated these aren't None above # Resolve token: file takes precedence over env var
assert token_env is not None token = None
token = os.environ.get(token_env) if token_file:
token_path = os.path.expanduser(token_file)
if os.path.exists(token_path):
with open(token_path) as f:
token = f.read().strip()
else:
print(f"Warning: Registry token file '{token_path}' not found")
if not token and token_env:
token = os.environ.get(token_env)
if not token: if not token:
source = token_file or token_env
print( print(
f"Warning: Registry token env var '{token_env}' not set, " f"Warning: Registry token not available from '{source}', "
"skipping registry secret" "skipping registry secret"
) )
return None return None