Перейти к содержанию

Ansible — это очень простой инструмент автоматизации для подготовки ресурсов в облаке, управления конфигурацией, развёртывания приложений, оркестрации взаимодействия между сервисами и других задач.

Ansible включает контрольную ноду, которая управляет рабочими нодами по SSH.

Инвентарь

Инвентарь (inventory) — это файл конфигурации, где мы определяем информацию о хосте. Хранится в папке /etc/ansible/hosts.

Плейбуки

В плейбуках Ansible мы определяем, как применять политики, объявлять конфигурации, оркестрировать действия и запускать задачи на серверах — синхронно или асинхронно. Плейбук может включать один play или несколько. Обычно они хранятся в системе контроля версий, вроде Git и пишутся на YAML.

Play

Play — компонент плейбука, который состоит из группы задач, выполняемых на определённых хостах. Каждый play должен указывать хост или группу хостов. Пример:

-hosts: all # здесь мы указываем все хосты.
Будьте осторожны с пробелами, файлы YAML к ним очень чувствительны!

Задачи

Задачи (task) — это отдельные действия, которые выполняются плейбуками. Например:

- name: Install Apache httpd # Определение задачи может содержать модули,
например yum, git, service и copy.

Роли

Роли в Ansible назначаются группе хостов и помогают организовать задачи по автоматизации. Мы можем создать несколько ролей и назначить их группе задач. Допустим, роль webserver можно использовать для установки Apache и Varnish на указанной группе серверов.

Обработчики

Обработчики (handler) похожи на задачи, но выполняются только при вызове из события. Например, обработчик может запустить сервис httpd после того, как его установила задача. Обработчик вызывается директивой notify. Важно! Имя директивы notify и обработчика должны совпадать.

Шаблоны

Файлы шаблонов (template) основаны на шаблонизаторе Python Jinja2 и имеют расширение .j2. В файл шаблона при желании можно поместить содержимое файла index.html, но эффективнее всего использовать в них переменные и факты.

Переменные

В плейбуки можно включать собственные переменные.

Есть пять способов определить переменную:

  1. В play, в атрибуте vars_files:
vars_files:
- "/path/to/var/file"
  1. В /vars/apache-install.yml

  2. В командной строке:

ansible-playbook apache-install.yml -e "http-port=80"
  1. В play через vars:
vars: http_port: 80
  1. В каталоге group_vars/

Пример плейбука

## ПЛЕЙБУК ДЛЯ УСТАНОВКИ И НАСТРОЙКИ APACHE HTTPD НА СЕРВЕРАХ
- hosts: all
  tasks:
   - name: Install Apache httpd
     yum: pkg=httpd state=installed
     notify:
       - Start Httpd
  handlers:
    - name: Start httpd
      service: name=httpd state=started

Плейбук нужно запустить на сервере Ansible. Следующая команда выполнена из пути, где хранится плейбук apache-playbook.yml:

ansible-playbook apache-install.yml  --ask-pass -u "ansibleadmin"