Improve pl task
Some checks failed
Linting / YAML Lint (push) Successful in 9s
Linting / Ansible Lint (push) Failing after 28s

This commit is contained in:
2026-02-22 20:55:01 +03:00
parent b793b7806b
commit b13cc65a14

View File

@@ -3,8 +3,10 @@
import os import os
import subprocess import subprocess
import sys
from invoke.context import Context from invoke.context import Context
from invoke.exceptions import Exit
from invoke.tasks import task from invoke.tasks import task
HOSTS_FILE = "production.yml" HOSTS_FILE = "production.yml"
@@ -26,6 +28,24 @@ def _remote_host() -> str:
return _yq(".ungrouped.hosts.server.ansible_host") return _yq(".ungrouped.hosts.server.ansible_host")
def _rest_args() -> list[str]:
"""Возвращает аргументы после '--' из sys.argv"""
try:
return sys.argv[sys.argv.index("--") + 1 :]
except ValueError:
return []
def _resolve_playbook(name: str) -> str:
candidates = [name, f"{name}.yml", f"playbook-{name}.yml"]
for candidate in candidates:
if os.path.isfile(candidate):
return candidate
raise Exit(
f"Плейбук для '{name}' не найден. Проверял: {', '.join(candidates)}", code=1
)
@task @task
def install_roles(ctx: Context) -> None: def install_roles(ctx: Context) -> None:
"""Установить ansible-galaxy roles""" """Установить ansible-galaxy roles"""
@@ -33,9 +53,16 @@ def install_roles(ctx: Context) -> None:
@task @task
def pl(ctx: Context, args: str = "") -> None: def pl(ctx: Context) -> None:
"""Запустить плейбуки (передать файл плейбука через --args)""" """Запустить плейбуки по имени: inv pl -- gitea miniflux"""
ctx.run(f"uv run ansible-playbook -i production.yml --diff {args}") names = _rest_args()
if not names:
raise Exit("Укажи хотя бы один плейбук: inv pl -- <name> [name ...]", code=1)
playbooks = [_resolve_playbook(name) for name in names]
ctx.run(
f"uv run ansible-playbook -i production.yml --diff {' '.join(playbooks)}",
pty=True,
)
@task @task