Ansible — система управления конфигурациями. Написана на Python, использует декларативный язык разметки для описания конфигураций.
Используется для автоматизации настройки и массового развёртывания программного обеспечения.
Работает с Linux-узлами (SSH-соединение), также поддерживает Windows (WinRM соединение).

Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
  • Astra Linux Special Edition РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1
  • Astra Linux Special Edition РУСБ.10015-16 исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12

Установка пакета

Пакет ansible доступен в репозитории Astra Linux Common Edition и в дистрибутиве Astra Linux Special Edition. Установить пакет можно с помощью графического менеджера пакетов или из командной строки командой:

sudo apt install ansible

Настройка пакета

При установке пакета:

  • В Astra Linux Special Edition 1.8 конфигурационные файлы не создаются. Для работы ansible следует создать список хостов, с которыми он должен работать (inventory). Далее работа ansible может выполняться с настройками, принятыми по умолчанию. Порядок создания inventory и конфигурационных файлов приведен далее.

  • В более ранних обновлениях при установке пакетов создаётся каталог /etc/ansible, содержащий два конфигурационных файла:

    • Файл /etc/ansible/hosts — inventory. Перед началом работы в этом файле должен быть указан список хостов, с которыми надо работать.

    • Файл /etc/ansible/ansible.cfg — файл настроек ansible.

Конфигурационные файлы ansible в Astra Linux Special Edition 1.8

В Astra Linux Special Edition 1.8 при установке пакета конфигурационные файлы не создаются и должны быть созданы вручную. Конфигурационные файлы могут располагаться в следующих локациях:

  • если определена переменная окружения ANSIBLE_CONFIG, то в качестве имени конфигурационного файла используется её значение;

  • файл ansible.cfg в текущем рабочем каталоге;

  • файл ~/.ansible.cfg в домашнем каталоге пользователя;

  • файл /etc/ansible/ansible.cfg (общесистемная конфигурация, для создания файла понадобится сначала создать каталог /etc/ansible); 

Расширение имени любого конфигурационного файла обязательно должно быть .cfg.

Если конфигурационный файл не создан при установке пакетов, то создать его можно с помощью команды ansible-config-init. Например, команда:

ansible-config init --disabled > ansible.cfg

создает файл ansible.cfg в текущем рабочем каталоге со значениями параметров, принятыми по умолчанию. Опция --disabled указывает, что все параметры записываются как комментарии.

Более подробный вывод, включающий параметры плагинов, можно получить командой:

ansible-config init --disabled -t all > ansible.cfg

Для повышения производительности можно рекомендовать использовать в конфигурационном файле следующие параметры:

[defaults]
interpreter_python = auto_silent
host_key_checking = False 
stdout_callback = yaml
forks = 20
  
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=60s

Где:

  • interpreter_python = auto_silent — выполнять поиск интерпретатора Python без показа предупреждений;
  • host_key_checking = False — выключить проверку ключей при подключении по протоколу SSH. Проверку необходимо выключить, если в службе ssh применяется парольная аутентификация. Если используется беспарольная аутентификация по открытому ключу, то необходимо включить проверку ключей (для параметра host_key_checking установить значение True).
  • stdout_callback = yaml --- отображать вывод (stdout) в формате YAML;
  • forks = 20 --- количество параллельных процессов, которые будут одновременно выполнять задачи (20);
  • [ssh_connection] --- группа параметров с настройками подключения по протоколу SSH:
    • pipelining = True --- включить конвейеризацию SSH (pipelining), т.е. не создавать отдельную SSH-сессию для каждой команды;
    • ssh_args --- настройки клиента ssh:
      • ControlMaster=auto --- использовать существующее TCP-соединение, но если его нет, создать новое;
      • ControlPersist=60s  --- TCP-соединение должно оставаться открытым в течении 60 секунд после закрытия последней SSH-сессии.

Подробнее про конфигурационные файлы ansible см. статью Ansible Configuration Settings.

Inventory

Список хостов (inventory) по умолчанию находится в файле /etc/ansible/hosts. Расположение inventory может быть изменено в конфигурационном файле значением переменной inventory в секции [defaults]. Например:

[defaults]
inventory = /etc/ansible/hosts
 

Проверить корректность inventory можно с помощью команды ansible-inventory. Например:

ansible-inventory --list

Если не указано иное, то проверятся будет файл inventory, определенный по умолчанию (/etc/ansible/hosts). Иное расположение файла можно указать с помощью любой из опций -i <имя_файла>, --inventory <имя_файла>, --inventory-file <имя_файла>, например:

ansible-inventory -i /tmp/hosts --list

Файл Inventory может быть представлен в различных форматах:

  • формат INI — простой и легко читаемый формат, удобный для небольшого количества хостов;

  • формат YAML — рекомендуется для большого количества хостов, обеспечивает большие возможности, чем формат INI.

Подробнее про содержимое и синтаксис inventory см. статью How to build your inventory.

Примеры настройки и использования

Настройка подключений SSH

Ansible подключается к хостам по протоколу ssh, поэтому на каждом хосте, с которым должен работать ansible, должна быть установлена и запущена служба ssh. Для автоматизации подключений можно использовать ключи или пароли (не рекомендуется).

Установка службы ssh и настройка аутентификации по открытому ключу описана в статье SSH.

Для настройки аутентификации по паролю:

  1. Установить пакет sshpass:

    sudo apt install sshpass

  2. Отключить проверку ssh-ключа узла путем задания в файле /etc/ansible/ansible.cfg параметра:

     host_key_checking = False
  3. Указать имя пользователя и пароль ssh. Это можно сделать следующими способами:

    1. При запуске Ansible из командной строки с помощью опции --user задать имя пользователя и с помощью опции --ask-pass указать необходимость запроса пароля:

      ansible -m ping all --user <имя_пользователя> --ask-pass

    2. При использовании inventory-файла с помощью опций ansible_user и ansible_ssh_pass задать имя пользователя и пароль в этом файле:

      [all:vars]
      ansible_connection=ssh
      ansible_user=<имя_пользователя>
      ansible_ssh_pass=<пароль>

Далее предполагается, что в файле /etc/ansible/hosts указан список хостов. В примерах операции будут применяться ко всеми указанными хостам, для чего используется псевдоним all.

Примеры

См. также: 

Простые примеры:

  1. Просто пинг. Ко всем хостам (all) применяется модуль ping (-m ping):

    ansible -m ping all

  2. Инвентаризация состояния хостов. Ко всем хостам (all) применяется модуль setup (-m setup):

    ansible -m setup all

  3. Полная инвентаризация выводит слишком много информации. Отфильтровать только информацию об объёме памяти

    ansible -m setup -a 'filter=ansible_memtotal_mb' all

  4. С помощью модуля shell проверить на всех хостах версию Astra Linux:

    ansible -m shell -a 'cat /etc/astra_version' all