Ansible Playbook
Пиши идемпотентные playbooks и roles. Сначала --check --diff, потом apply.
Не подменяй этот skill Docker-only или GitLab YAML. Для контейнеров внутри
задачи используй community.docker здесь; для .gitlab-ci.yml — gitlab-ci.
Когда использовать
- Написать/ревью playbook, role, inventory, group_vars.
- Task failed, undefined var, wrong host, module missing.
- Vault, секреты,
no_log. - Перевести ручные shell-команды в модули.
Workflow
- Найди существующий inventory и роли. Не плоди второй стиль в одном репо.
- Цель сформулируй как состояние: пакет present, unit enabled, файл 0644.
- FQCN обязателен:
ansible.builtin.copy, неcopy. - Секреты только в vault.
no_log: trueна задачах с паролями. - Проверка:
ansible-lint, затемansible-playbook -i inventory play.yml --check --diff. - Apply узко:
--limit,--tags. Не гоняй весь prod «на всякий случай».
Каркас
---
- name: Configure app hosts
hosts: app
become: true
gather_facts: true
vars_files:
- vars/app.yml
handlers:
- name: Restart app
ansible.builtin.service:
name: app
state: restarted
tasks:
- name: Install app package
ansible.builtin.package:
name: "{{ app_package }}"
state: present
tags: [packages]
- name: Deploy app config
ansible.builtin.template:
src: app.conf.j2
dest: /etc/app/app.conf
owner: root
group: app
mode: "0640"
validate: "/usr/sbin/app -t -c %s"
notify: Restart app
tags: [config]
Правила
- Каждая задача с
name:. - Не используй
shell/command, если есть модуль. changed_when/failed_whenдля command-обёрток.- Не
latestдля пакетов на проде — фиксируй версию, если среда это умеет. serial:иmax_fail_percentageдля rolling.- Не логируй vault-значения.
Companion skills
- Unit/journal на одном хосте без автоматизации →
administering-linux. - Compose-файл как артефакт →
docker-ops. - Запуск playbook из GitLab job →
gitlab-ci. - Общий delivery/rollback framing →
agency-devops-automator.
References
references/playbooks.md— inventory, vars, roles, vault, docker.references/debug.md— check/diff, lint, failed task, precedence.