установка_и_настройка_ansible_в_ubuntu_22.04

Установка и настройка Ansible в Ubuntu 22.04

Устанавливается из репозиториев по умолчанию

sudo apt install ansible -y

Файл инвентаризации содержит информацию о хостах, которыми будем управлять с помощью Ansible. В файл инвентаризации можно включить от одного до нескольких сотен серверов, а хосты можно разделять на группы и подгруппы. Файл инвентаризации также часто используется для установки переменных, которые будут действительны только для определенных хостов или групп, чтобы их можно было использовать в playbooks и шаблонах. Некоторые переменные также могут влиять на запуск playbooks, например переменная ansible_python_interpreter, с которой скоро познакомимся.

Nota Bene! Хотя Ansible обычно создает файл инвентаризации по умолчанию в /etc/ansible/hosts, его можно создать в любом месте, которое лучше соответствует потребностям. В этом случае нужно будет указать путь к пользовательскому файлу инвентаризации с помощью параметра -i при запуске команд Ansible и playbooks. Использование файлов инвентаризации для каждого проекта является хорошей практикой, позволяющей свести к минимуму риск запуска playbook на неправильной группе серверов.

Чтобы отредактировать содержимое инвентаря Ansible по умолчанию, сначала создаем директорию /etc/ansible, а в ней файл /etc/ansible/hosts. Пример содержимого файла инвентаризации:

[servers]
server1 ansible_host=10.10.20.111
server2 ansible_host=10.10.20.112
server3 ansible_host=10.10.20.113
 
[all:vars]
ansible_python_interpreter=/usr/bin/python3

В примере выше, определяется группа [servers] с тремя разными хостами, каждый из которых идентифицируется пользовательским псевдонимом: server1, server2 и server3.

Подгруппа [all:vars] задает параметр ansible_python_interpreter, который будет действовать для всех хостов, включенных в эту инвентаризацию. Этот параметр гарантирует, что удаленный сервер использует исполняемый файл Python 3 /usr/bin/python3 вместо /usr/bin/python (Python 2.7), которого нет в последних версиях Ubuntu. Всякий раз, когда нужно проверить файл инвентаризации, используем команду:

ansible-inventory --list -y
 
all:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 10.10.20.111
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 10.10.20.112
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 10.10.20.113
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}

Для управления удаленными хостами, Ansible по умолчанию использует аутентификацию через SSH ключ. Поэтому, необходимо сгенерировать SSH ключи и скопировать и скопировать их на удаленные хосты, которыми намериваемся управлять.

Генерируем:

ssh-keygen

И копируем ключ на удаленные хосты. Если хостов много, во избежание большого количества рутинных ручных операций, можно воспользоваться bash скриптом

Используем аргумент -u, чтобы указать пользователя удаленной системы. Если он не указан, Ansible попытается подключиться к управляющему узлу от имени вашего текущего системного пользователя.

На управляющем узле Ansible запустим:

ansible all -m ping -u username

Эта команда будет использовать встроенный модуль Ansible – ping, для тестирования подключений на всех узлах из инвентаря по умолчанию. Подключаемся как пользователь username. Модуль ping будет тестировать:

  • хосты на доступность;
  • имеются ли действующие учетные данные SSH;
  • могут ли хосты запускать модули Ansible с помощью Python.

Должны получить подобный вывод:

Output
server1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Если получаем ответ «pong» от хоста, это означает, что Ansible готов запускать команды и playbooks на этом сервере.

Любая команда, которая обычно выполняется на удаленном сервере через SSH, может быть запущена с помощью Ansible на серверах, указанных в файле инвентаризации. Например, можно проверить использование диска на всех серверах с помощью:

ansible all -a "df -h" -u username

Введенную команду df -h можно заменить любой командой по текуще потребности.

Также, можно запускать модули Ansible с помощью специальных команд, аналогично тому, что делали ранее с модулем ping для тестирования соединения. Например, вот как можно использовать модуль apt для установки последней версии vim на все серверы из инвентаря:

ansible all -m apt -a "name=vim state=latest" -u root
 
# Либо вводим из под непривелигированного пользователя
ansible all -m apt -a "name=vim state=latest" -u username --become --ask-become-pass

Также, можно указывать отдельные хосты, группы и подгруппы при выполнении команд Ansible. Например, так проверим uptime у каждого хоста в группе servers:

ansible servers -a "uptime" -u username

Либо укажем отдельные хосты, разделив их двоеточием:

ansible server1:server2 -m ping -u username
  • установка_и_настройка_ansible_в_ubuntu_22.04.txt
  • Последнее изменение: 2022/04/28 14:41
  • admin