tasks.py: версия authelia CLI берётся из docker-compose
- константа AUTHELIA_DOCKER была прибита к 4.39.4, а сервис уже на 4.39.20 — конфиг валидировался чужим бинарником - authelia-validate-config сам создаёт temp/: директория в .gitignore, на свежем клоне задача падала
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
"""Invoke tasks — замена Taskfile.yml"""
|
||||
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
@@ -11,7 +12,7 @@ from invoke.tasks import task
|
||||
|
||||
HOSTS_FILE = "production.yml"
|
||||
VARS_FILE = "group_vars/all/main.yml"
|
||||
AUTHELIA_DOCKER = "docker run --rm -v $PWD:/data authelia/authelia:4.39.4 authelia"
|
||||
AUTHELIA_COMPOSE_FILE = "files/authelia/docker-compose.template.yml"
|
||||
|
||||
|
||||
# --- Базовый набор: единый интерфейс команд во всех репозиториях ---
|
||||
@@ -33,6 +34,17 @@ def _remote_host() -> str:
|
||||
return _yq(".ungrouped.hosts.server.ansible_host")
|
||||
|
||||
|
||||
def _authelia_docker() -> str:
|
||||
"""Команда запуска authelia CLI на том же образе, что и задеплоенный сервис"""
|
||||
pattern = re.compile(r"""image:\s*["']?(\S*authelia/authelia:[^"'\s]+)""")
|
||||
with open(AUTHELIA_COMPOSE_FILE, encoding="utf-8") as compose:
|
||||
for line in compose:
|
||||
match = pattern.search(line)
|
||||
if match:
|
||||
return f"docker run --rm -v $PWD:/data {match.group(1)} authelia"
|
||||
raise Exit(f"Образ authelia не найден в {AUTHELIA_COMPOSE_FILE}", code=1)
|
||||
|
||||
|
||||
def _rest_args() -> list[str]:
|
||||
"""Возвращает аргументы после '--' из sys.argv"""
|
||||
try:
|
||||
@@ -247,13 +259,15 @@ def login_as_app(ctx: Context, app: str) -> None:
|
||||
@task
|
||||
def authelia_cli(ctx: Context, args: str = "") -> None:
|
||||
"""Запустить authelia CLI в docker"""
|
||||
ctx.run(f"{AUTHELIA_DOCKER} {args}")
|
||||
ctx.run(f"{_authelia_docker()} {args}")
|
||||
|
||||
|
||||
@task
|
||||
def authelia_validate_config(ctx: Context) -> None:
|
||||
"""Отрендерить конфиг authelia из шаблона и проверить его"""
|
||||
dest = "temp/configuration.yml"
|
||||
# temp/ в .gitignore, на свежем клоне его нет — ansible сам директорию не создаёт.
|
||||
os.makedirs(os.path.dirname(dest), exist_ok=True)
|
||||
try:
|
||||
ctx.run(
|
||||
"uv run ansible localhost"
|
||||
@@ -262,7 +276,7 @@ def authelia_validate_config(ctx: Context) -> None:
|
||||
" --extra-vars @group_vars/all/secrets.yml"
|
||||
" --extra-vars @files/authelia/secrets.yml"
|
||||
)
|
||||
ctx.run(f"{AUTHELIA_DOCKER} validate-config --config /data/{dest}")
|
||||
ctx.run(f"{_authelia_docker()} validate-config --config /data/{dest}")
|
||||
finally:
|
||||
ctx.run(f"rm -f {dest}", warn=True)
|
||||
|
||||
@@ -270,14 +284,16 @@ def authelia_validate_config(ctx: Context) -> None:
|
||||
@task
|
||||
def authelia_gen_random_string(ctx: Context, length: int = 10) -> None:
|
||||
"""Сгенерировать случайную alphanumeric-строку"""
|
||||
ctx.run(f"{AUTHELIA_DOCKER} crypto rand --length {length} --charset alphanumeric")
|
||||
ctx.run(
|
||||
f"{_authelia_docker()} crypto rand --length {length} --charset alphanumeric"
|
||||
)
|
||||
|
||||
|
||||
@task
|
||||
def authelia_gen_secret_and_hash(ctx: Context, length: int = 72) -> None:
|
||||
"""Сгенерировать случайный секрет и его pbkdf2-sha512 хэш"""
|
||||
ctx.run(
|
||||
f"{AUTHELIA_DOCKER} crypto hash generate pbkdf2"
|
||||
f"{_authelia_docker()} crypto hash generate pbkdf2"
|
||||
f" --variant sha512 --random --random.length {length} --random.charset rfc3986"
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user