Запуск Ansible на Debian 11

Краткое руководство по установке и первоначальной настройке системы управлением конфигурациями Ansible на ОС Debian GNU/Linux 11.6.

Для данного стенда будем использовать три машины:

одна — vm31101 — управляющая и две других — vm31102 и vm31103 — подчинённые. Так как Ansible работает при помощи SSH, то сам Ansible достаточно будет установить только на управляющей машине.

На всех машинах необходимо установить sudo. Про это читаем здесь.

Если в сети нет DNS-сервера, то в файле /etc/hosts необходимо прописать эти машины. На управляющей машине выглядеть он должен будет примерно так:

127.0.0.1       localhost
127.0.1.1       vm31101
172.16.31.101   vm31101
172.16.31.102   vm31102
172.16.31.103   vm31103

На второй и третьей, соответственно, будет меняться вторая строчка:

на vm31102

127.0.1.1	vm31102

на vm31103

127.0.1.1	vm31103

Теперь на первой (управляющей) машине проверяем подключение по SSH к остальным машинам

# ssh username@vm31102

и соответственно

# ssh username@vm31103

Переходим в режим root

# sudo -i

и устанавливаем sshpass и ansible

# apt install sshpass ansible -y

Проверяем

# ansible --version

Консоль должна показать примерно такой результат:

ansible 2.10.8
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]

Также необходимо будет создать файл со списком хостов

# mkdir /etc/ansible/
# touch /etc/ansible/hosts

Затем переходим в домашнюю директорию

# cd ~

и создадим здесь файл настроек по умолчанию

# touch ansible.cfg

открываем его

# nano ansible.cfg

и пропишем такие настройки по умолчанию:

[defaults]

inventory = /etc/ansible/hosts
host_key_checking = false

Теперь, если снова запустить проверку версии Ansible

# ansible --version

то в ответе уже будет указан путь к файлу конфигурации:

ansible 2.10.8
  config file = /root/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]

После этого откроем файл со списком хостов

# nano /etc/ansible/hosts

и пропишем туда данные для доступа для всех трёх машин:

vm31101 ansible_host=172.16.31.101 ansible_user=username ansible_ssh_private_key_file=/root/.ssh/id_rsa
vm31102 ansible_host=172.16.31.102 ansible_user=username ansible_ssh_private_key_file=/root/.ssh/id_rsa
vm31103 ansible_host=172.16.31.103 ansible_user=username ansible_ssh_private_key_file=/root/.ssh/id_rsa

ansible_host — это IP-адреса машин, на которые будут отправляться команды из управляющей машины.

Также не помешает скопировать файл конфигурации в директорию /etc/ansible/

# cp ~/ansible.cfg /etc/ansible/

Далее сгенерируем ключ управляющей машины

# ssh-keygen

и раскидаем его на все три машины

# ssh-copy-id username@vm31101
# ssh-copy-id username@vm31102
# ssh-copy-id username@vm31103

Теперь можно проверить работу Ansible при помощи модуля ping

# ansible all -m ping

то есть на все хосты запустить ping:

vm31103 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
vm31102 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
vm31101 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Можно также запустить пинг для одного хоста

# ansible vm31102 -m ping

и ответ консоли будет соответствующий:

vm31102 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Хосты также можно разделить на группы в файле hosts. Открываем его

# nano /etc/ansible/hosts

и прописываем группы машин в квадратных скобках:

[group1]
vm31101 ansible_host=172.16.31.101 ansible_user=username ansible_ssh_private_key_file=/root/.ssh/id_rsa
vm31102 ansible_host=172.16.31.102 ansible_user=username ansible_ssh_private_key_file=/root/.ssh/id_rsa

[group2]
vm31103 ansible_host=172.16.31.103 ansible_user=username ansible_ssh_private_key_file=/root/.ssh/id_rsa

Для проверки пропингуем созданную нами группу group1

# ansible group1 -m ping

и получим ответ от машин этой группы:

vm31101 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
vm31102 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Также ещё можно создать группу из групп. Для примера создадим такую группу с называнием all_groups (то есть допишем в файле хостов):

[all_groups:children]
group1
group2

пропингуем её

# ansible all_groups -m ping

и получим соответствующий ответ:

vm31103 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
vm31102 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
vm31101 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Здесь также помимо групп можно прописывать ещё машины.

Для того, чтобы запустить команду на подключённых к Ansible машинах, например uptime, необходимо выполнить команду

# ansible all -m shell -a "uptime"

или

# ansible all -m command -a "uptime"

в обоих случаях ответ консоли будет такой:

vm31102 | CHANGED | rc=0 >>
 00:14:04 up 10:45,  2 users,  load average: 0,00, 0,00, 0,00
vm31101 | CHANGED | rc=0 >>
 00:14:04 up 50 min,  2 users,  load average: 0,00, 0,01, 0,00
vm31103 | CHANGED | rc=0 >>
 00:14:04 up 10:45,  2 users,  load average: 0,01, 0,01, 0,00

Ansible можно также использовать для работы с файлами

К примеру, создадим файл example.txt в домашних директориях на всех машинах

# ansible all -m file -a "path=~/example.txt state=touch"

Этот файл будет создан с правами пользователя домашней директории.

Для того, чтобы создать файл в других директориях, необходимы права root. В этом нам поможет ключ -b

# ansible all -m file -a "path=/usr/local/example.txt state=touch" -b

Для копирования файлов также понадобятся права root

# ansible group1 -m copy -a "src=/usr/local/somefile.txt dest=/opt mode=777" -b

В работе с Ansible помимо модулей активно используются так называемые плейбуки. Файлы плейбуков в Ansible создаются в формате yaml и имеют расширение yml. Для создания и использования плейбуков необходимо воспользоваться соответствующей документацией.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *