Playbooks#
Playbooks являются основным способом описания автоматизированных задач в Ansible Core. Они представляют собой файлы в формате YAML с инструкциями о том, какие действия необходимо выполнить на управляемых хостах. Playbooks позволяют организовывать и структурировать автоматизированные процессы, делая их более понятными и управляемыми.
Структура playbook#
Каждый playbook может состоять из одного или нескольких сценариев playbook (plays). Сценарий playbook - это основной элемент структуры playbook, который определяет, какие задачи будут выполняться на каких хостах; может содержать информацию о целевых хостах, переменных, задачах и других параметрах.
Основные элементы структуры playbooks и их сценариев:
Имя playbook (опционально) - playbook может начинаться с поля
name, которое описывает его назначение. Пример поля для playbook установки и настройки веб-сервера:- name: Install and configure web serverХосты - поле
hostsопределяет, на каких хостах будут выполняться задачи. Это может быть конкретный хост, группа хостов из inventory или специальное значениеallдля всех доступных хостов.hosts: webserversПользователь (опционально) - поле
remote_userуказывает, под каким пользователем будут выполняться задачи на удаленных хостах. Если не заполнено, будет использоваться пользователь, запустивший Ansible Core.remote_user: ansible_userПеременные (опционально) - playbook может содержать переменные, используемые в задачах. Переменные могут быть определены в playbook или загружены из внешних файлов.
vars: http_port: 80Задачи - основная часть playbook представляет собой список задач, которые будут выполняться на указанных хостах. Каждая задача должна содержать имя (опционально) и модуль с его параметрами.
tasks: - name: Install httpd package yum: name: httpd state: presentОбработчики (опционально) — специальные задачи, которые выполняются только в случае вызова других задач. Обычно используются для перезапуска служб после внесения изменений.
handlers: - name: Restart httpd service: name: httpd state: restartedРоли (опционально) - заполнение данного поля позволяет организовать playbooks в более структурированном виде, разделяя и группируя задачи, переменные и файлы. Роли могут быть использованы для повторного использования кода.
roles: - webserver
Примеры playbooks#
Playbook, который устанавливает и настраивает веб-сервер Apache на удаленных хостах (включая установку пакета, запуск службы и создание файла
index.htmlс приветственным сообщением):- name: Install and configure web server hosts: webservers remote_user: ansible_user vars: http_port: 80 tasks: - name: Install httpd package yum: name: httpd state: present - name: Start httpd service service: name: httpd state: started enabled: true - name: Create index file copy: content: "<h1>Hello, World!</h1>" dest: <path_to_file_on_remote_host> handlers: - name: Restart httpd service: name: httpd state: restartedPlaybook, который устанавливает MySQL, запускает службу, создает базу данных и пользователя со всеми привилегиями, а также задает для него пароль:
- name: Install and configure MySQL hosts: databases remote_user: ansible_user vars: db_name: my_database db_user: db_user db_password: <secure_password> tasks: - name: Install MySQL package yum: name: mysql-server state: present - name: Start MySQL service service: name: mysqld state: started enabled: true - name: Create database mysql_db: name: "{{ db_name }}" state: present - name: Create user mysql_user: name: "{{ db_user }}" password: "{{ db_password }}" priv: "{{ db_name }}.*:ALL" state: presentPlaybook, который обновляет все пакеты на удаленных хостах до последних версий:
- name: System Update hosts: all remote_user: ansible_user tasks: - name: Update all packages yum: name: '*' state: latestPlaybook, который устанавливает Docker со всеми зависимостями, запускает его и добавляет пользователя
ansible_userв группуdocker:- name: Install and configure Docker hosts: all remote_user: ansible_user tasks: - name: Install dependencies yum: name: - yum-utils - device-mapper-persistent-data - lvm2 state: present - name: Add Docker repository command: > yum-config-manager --add-repo <URL> - name: Install Docker yum: name: docker-ce state: present - name: Start Docker service service: name: docker state: started enabled: true - name: Add user to Docker group user: name: "{{ ansible_user }}" groups: docker append: yesPlaybook, который настраивает SSH-доступ для удаленных хостов, добавляя публичный ключ пользователя (это позволит ему подключаться к серверам по SSH без необходимости вводить пароль):
- name: Configure SSH access hosts: all remote_user: ansible_user tasks: - name: Add public key to authorized_keys authorized_key: user: ansible_user state: present key: "{{ lookup('file', '<path_to_public_key>.pub') }}"