Ответ
В своих Ansible-плейбуках я регулярно использую следующие ключевые элементы:
- Inventory: YAML-файл или директория с определением целевых хостов и их группировкой (например,
[webservers],[dbservers]). - Play: Основной блок, определяющий, на каких хостах из inventory и с какими параметрами будут выполняться задачи.
- Tasks: Конкретные действия, выполняемые с помощью модулей Ansible (например,
apt,yum,copy,template,systemd). - Handlers: Специальные задачи, которые выполняются только по уведомлению (notify), обычно для перезапуска сервисов после изменения конфигурации.
- Variables: Данные для параметризации плейбуков. Я определяю их в самом плейбуке (
vars:), в отдельных файлах (vars_files:), вgroup_vars/,host_vars/или через командную строку (-e). - Templates: Файлы Jinja2 (
.j2), которые рендерятся с подстановкой переменных и копируются на целевые хосты. - Roles: Переиспользуемые компоненты, которые инкапсулируют задачи, обработчики, переменные, шаблоны и файлы для решения конкретной цели (например, роль
nginxилиpostgresql). - Tags: Метки, которые позволяют выборочно запускать части плейбука командой
--tagsили--skip-tags. - Conditionals: Условия
when:, которые управляют выполнением задачи в зависимости от фактов о хосте или значений переменных.
Пример плейбука для настройки веб-сервера:
---
- name: Configure Nginx on web servers
hosts: webservers
become: yes
vars:
http_port: 8080
server_name: example.com
tasks:
- name: Ensure Nginx is installed
apt:
name: nginx
state: latest
update_cache: yes
- name: Deploy Nginx configuration from template
template:
src: nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: Restart Nginx
handlers:
- name: Restart Nginx
systemd:
name: nginx
state: restarted
enabled: yes