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


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

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
  • 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. Установить пакет можно с помощью графического менеджера пакетов (см. Графический менеджер пакетов synaptic) или из командной строки командой

sudo apt install ansible

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

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

  • /etc/ansible/hosts - список компьютеров (хостов), с которыми работает ansible;
  • /etc/ansible/ansible.cfg - файл настроек ansible.

Файл конфигурации /etc/ansible/hosts

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

# Это файл ansible 'hosts', установленный по умолчанию.
#
# Файл должен иметь имя /etc/ansible/hosts
#
# - Комментарии начинаются с символа '#'
# - Пустые строки игнорируются
# - Группы хостов разделяются элементами [заголовок]
# - Можно использовать имена хостов или IP-адреса
# - Имя хоста или адрес могут входить в несколько групп

# Пример 1: Хосты без групп должны быть перечислены до первого заголовка группы.

#green.example.com
#blue.example.com
#192.168.100.1
#192.168.100.10

#[webservers]

# Пример 2: После заголовка [webservers] начался список хостов, входящих в группу 'webservers'

#alpha.example.org
#beta.example.org
#192.168.1.100
#192.168.1.110

# Применение шаблонов для определения нескольких хостов
#www[001:006].example.com

# здесь всё ещё группа 'webservers'

#[dbservers]

# Пример 3: После заголовка [dbservers] началась группа серверов баз данных 'dbservers' group

#db01.intranet.mydomain.net
#db02.intranet.mydomain.net
#10.25.1.56
#10.25.1.57

# Еще пример диапазона имён, теперь без лидирующих нулей

#db-[99:101]-node.example.com

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

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

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

Ansible подключается к хостам по протоколу ssh, поэтому на каждом хосте, с которым должен работать ansible, должна быть установлена и запущена служба 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. ansible -m setup -a 'filter=ansible_memtotal_mb' all

    Инвентаризация состояния хостов. Ко всем хостам (all) применяется модуль setup (-m setup):
  3. Инвентаризация выводит слишком много информации. Отфильтровать только информацию об объёме памяти:

    ansible -m setup all

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

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

  • No labels