--- # ============================================================================ # roles/compose_service — раскладка Docker Compose стека + systemd-юнита. # Обобщает то, что делает pve-grimmory.yml (compose.yml, .env с секретами, # oneshot-юнит, валидация, health-check). # ============================================================================ # --- Обязательное ---------------------------------------------------------- # Имя сервиса. Оно же имя systemd-юнита (.service) и имя каталога # по умолчанию. Роль падает с понятным сообщением, если не задано. compose_service_name: "" # Содержимое compose.yml. Ровно один из двух способов: # compose_service_compose_content — готовая строка (можно собрать в vars); # compose_service_compose_template — путь к Jinja-шаблону в вызывающей роли # или в playbooks/templates. compose_service_compose_content: "" compose_service_compose_template: "" # --- Раскладка на диске ---------------------------------------------------- compose_service_root: "/opt/{{ compose_service_name }}" compose_service_root_mode: "0750" compose_service_owner: root compose_service_group: root compose_service_compose_file: compose.yml compose_service_compose_mode: "0644" # Дополнительные каталоги данных. Формат: # - {path: /opt/grimmory/data, owner: "1000", group: "1000", mode: "0750"} compose_service_directories: [] # --- Файл окружения -------------------------------------------------------- compose_service_env_path: "{{ compose_service_root }}/.env" compose_service_env_mode: "0600" # Пары ключ-значение, записываемые в .env как есть. compose_service_env_static: {} # Имена переменных, значения которых генерируются `openssl rand -hex` ОДИН РАЗ. # Файл .env создаётся только если его ещё нет: повторный прогон не перетирает # уже используемые пароли. Чтобы поменять секрет — удалите .env вручную. compose_service_env_generated: [] compose_service_env_secret_bytes: 32 # Необязательный .env.example для документирования формата (без секретов!). compose_service_env_example: "" compose_service_env_example_mode: "0644" # --- systemd --------------------------------------------------------------- compose_service_description: "{{ compose_service_name }} Compose stack" # Дополнительные юниты в After= / Requires= (docker.service уже включён). compose_service_after: [] compose_service_requires: [] compose_service_unit_path: "/etc/systemd/system/{{ compose_service_name }}.service" compose_service_docker_binary: /usr/bin/docker compose_service_enabled: true # Дополнительные условия рестарта: список булевых значений от вызывающего # (например, результат pull образа). compose_service_restart_triggers: [] # --- Валидация и health-check --------------------------------------------- # `docker compose config --quiet` перед стартом. Выполняется с no_log, # потому что вывод при ошибке может содержать значения из .env. compose_service_validate: true # URL health-check после старта. Пустая строка — проверка пропускается. compose_service_health_url: "" compose_service_health_status: [200] compose_service_health_retries: 24 compose_service_health_delay: 5 compose_service_health_follow_redirects: safe