Ansible практика – урок №0: Подготовка окружения.

Мы уже разобрались, что такое Ansible и зачем он нужен. Самое время изучить его практическое применение. Данная статья начинает серию уроков, в которых мы на примерах разберем основные концепции и принцип работы Ansible.

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

Вы можете корректировать тестовое окружение под свои потенциальные нужды, а можете полностью повторять примеры за мной.

Тестовое окружение для изучения Ansible

В Ansible есть два типа хостов: контрольная машина (Control Node) и управляемые машины (Managed Nodes). С помощью Virtual Box, я подготовил три виртуальные машины. Если вы никогда раньше не пользовались Virtual Box, у нас есть отдельные статьи о том, как установить программу и как создавать виртуальные машины.

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

Подготовка окружения

На всех трех виртуалках установлена минимальная комплектация CentOS Stream 9. Тип сетевого подключения у них «Сетевой мост», это позволяет добавлять виртуальные машины к общей сети как отдельные устройства со своим IP адресом. В DHCP настройках роутера закрепил за каждой машиной статический IP, чтобы на протяжении всей практики каждая виртуалка имела постоянный адрес.

Я буду использовать следующие IP:

Control_Node: 192.168.0.150
Managed_Node_1: 192.168.0.151
Managed_Node_2: 192.168.0.152

Подключимся ко всем трем серверам по SSH, можете использовать командную строку или отдельное ПО, например PuTTY. Пора приступать к настройке окружения.

Шаг 1: Настройка SSH доступа между серверами

Ansible осуществляет доступ до управляемых хостов по средствам протокола SSH. Чтобы наш управляющий сервер имел свободный доступ до других серверов нам нужно создать SSH ключ для Control Node и добавить его публичную часть на Managed хосты.

В консоли контрольного сервера выполните следующие команды. Создание SSH ключа (ключевую фразу оставьте пустой):

[root@Control-Node ~]# ssh-keygen -t ed25519 -f /root/.ssh/ansible
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/ansible
Your public key has been saved in /root/.ssh/ansible.pub
The key fingerprint is:
SHA256:gZPd0j3Mv1G7tqQQp7Pb8BYITl+idFNQv3i6CrlW3lM root@Control-Node
The key's randomart image is:
+--[ED25519 256]--+
|           .o.   |
|       + o + ..  |
|      + + o *  ..|
|       . * + +..o|
|        S =.=oo+ |
|         o.++.oE.|
|         oo=..++ |
|         .o.B+= .|
|        .. ++=.. |
+----[SHA256]-----+
[root@Control-Node ~]#

Мы создали пару ключей, закрытый – /root/.ssh/ansibleи публичный – /root/.ssh/ansible.pub.

Проверим наш публичный ключ:

[root@Control-Node ~]# cat /root/.ssh/ansible.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDMWLoS2pvZ+1XVD4rSF7rvCDb/4LM+b9LelAeF+9hfL root@Control-Node
[root@Control-Node ~]#

Теперь добавим публичный ключ на управляемые хосты. На первый:

[root@Control-Node ~]# ssh-copy-id -i /root/.ssh/ansible.pub root@192.168.0.151
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/ansible.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.151's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.0.151'"
and check to make sure that only the key(s) you wanted were added.

[root@Control-Node ~]#

На второй:

[root@Control-Node ~]# ssh-copy-id -i /root/.ssh/ansible.pub root@192.168.0.152
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/ansible.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.152's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.0.152'"
and check to make sure that only the key(s) you wanted were added.

[root@Control-Node ~]#

Зайдем в консоль управляемых серверов и проверим, что публичный ключ добавлен в авторизованные.

Первый сервер:

[root@Managed-Node-1 ~]# cat .ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDMWLoS2pvZ+1XVD4rSF7rvCDb/4LM+b9LelAeF+9hfL root@Control-Node
[root@Managed-Node-1 ~]#

Второй сервер:

[root@Managed-Node-2 ~]# cat .ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDMWLoS2pvZ+1XVD4rSF7rvCDb/4LM+b9LelAeF+9hfL root@Control-Node
[root@Managed-Node-2 ~]#

На обоих Managed Node присутствует ключ, вернемся на Control Node и попробуем подключиться с использованием ключа.

К Managed-Node-1:

[root@Control-Node ~]# ssh -i /root/.ssh/ansible root@192.168.0.151
Last login: Sun Dec  7 14:53:27 2025 from 192.168.0.150
[root@Managed-Node-1 ~]# exit
logout
Connection to 192.168.0.151 closed.
[root@Control-Node ~]#

К Managed-Node-2:

[root@Control-Node ~]# ssh -i /root/.ssh/ansible root@192.168.0.152
Last login: Sun Dec  7 14:53:40 2025 from 192.168.0.150
[root@Managed-Node-2 ~]# exit
logout
Connection to 192.168.0.152 closed.
[root@Control-Node ~]#

Мы настроили надежный и беспрепятственный доступ управляющего сервера до управляемых.

Шаг 2: Проверка/обновление Python на всех серверах

Ansible написан на языке Python. С его помощью он дает команды серверам. Нам нужно убедиться, что Python присутствует на всех нодах, как на контрольной, так и на управляемых.

Ansible работает с python3, скорее всего он установлен на сервере по умолчанию. Проверим, что Python установлен:

[root@Control-Node ~]# python3 --version
Python 3.9.18
[root@Control-Node ~]#

Если в ответ получили текущую версию Python, то он установлен, если же нет, установите его. Если вы никогда не устанавливали Python, у нас есть отдельные статьи, посвященные его установки для CentOS и Ubuntu.

Так как у нас на всех серверах одинаковая ОС, процесс обновления Python будет одинаковым. Привожу пример на контрольном хосте:

[root@Control-Node ~]# dnf update -y python3
Last metadata expiration check: 0:53:18 ago on Sun 07 Dec 2025 06:25:14 PM +10.
Dependencies resolved.
=====================================================================================================================================================================================================
 Package                                                     Architecture                            Version                                        Repository                                  Size
=====================================================================================================================================================================================================
Upgrading:
 python-unversioned-command                                  noarch                                  3.9.25-2.el9                                   appstream                                  9.1 k
 python3                                                     x86_64                                  3.9.25-2.el9                                   baseos                                      26 k
 python3-libs                                                x86_64                                  3.9.25-2.el9                                   baseos                                     8.1 M

Transaction Summary
=====================================================================================================================================================================================================
Upgrade  3 Packages

Total download size: 8.1 M
Downloading Packages:
(1/3): python-unversioned-command-3.9.25-2.el9.noarch.rpm                                                                                                             51 kB/s | 9.1 kB     00:00
(2/3): python3-3.9.25-2.el9.x86_64.rpm                                                                                                                                73 kB/s |  26 kB     00:00
(3/3): python3-libs-3.9.25-2.el9.x86_64.rpm                                                                                                                          395 kB/s | 8.1 MB     00:20
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                348 kB/s | 8.1 MB     00:23
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                             1/1
  Upgrading        : python3-libs-3.9.25-2.el9.x86_64                                                                                                                                            1/6
  Upgrading        : python-unversioned-command-3.9.25-2.el9.noarch                                                                                                                              2/6
  Upgrading        : python3-3.9.25-2.el9.x86_64                                                                                                                                                 3/6
  Cleanup          : python3-3.9.18-3.el9.x86_64                                                                                                                                                 4/6
  Cleanup          : python-unversioned-command-3.9.18-3.el9.noarch                                                                                                                              5/6
  Cleanup          : python3-libs-3.9.18-3.el9.x86_64                                                                                                                                            6/6
  Running scriptlet: python3-libs-3.9.18-3.el9.x86_64                                                                                                                                            6/6
  Verifying        : python3-3.9.25-2.el9.x86_64                                                                                                                                                 1/6
  Verifying        : python3-3.9.18-3.el9.x86_64                                                                                                                                                 2/6
  Verifying        : python3-libs-3.9.25-2.el9.x86_64                                                                                                                                            3/6
  Verifying        : python3-libs-3.9.18-3.el9.x86_64                                                                                                                                            4/6
  Verifying        : python-unversioned-command-3.9.25-2.el9.noarch                                                                                                                              5/6
  Verifying        : python-unversioned-command-3.9.18-3.el9.noarch                                                                                                                              6/6

Upgraded:
  python-unversioned-command-3.9.25-2.el9.noarch                              python3-3.9.25-2.el9.x86_64                              python3-libs-3.9.25-2.el9.x86_64

Complete!
[root@Control-Node ~]#

Проверим результат:

[root@Control-Node ~]# python3 --version
Python 3.9.25
[root@Control-Node ~]#

Обновите Python на остальных серверах.

Шаг 3: Установка Ansible на Control Node

У нас есть несколько статей, в которых подробно рассмотрен процесс установки Ansible на разные ОС (Ubuntu, CentOS). Здесь мы лишь быстро установим его без лишних рассуждений.

Устанавливаем репозиторий EPEL:

[root@Control-Node ~]# dnf install -y epel-release
Last metadata expiration check: 0:29:15 ago on Sun 07 Dec 2025 06:33:07 PM +10.
Dependencies resolved.
=====================================================================================================================================================================================================
 Package                                              Architecture                              Version                                       Repository                                        Size
=====================================================================================================================================================================================================
Installing:
 epel-release                                         noarch                                    9-7.el9                                       extras-common                                     19 k
Installing weak dependencies:
 epel-next-release                                    noarch                                    9-7.el9                                       extras-common                                    8.1 k

Transaction Summary
=====================================================================================================================================================================================================
Install  2 Packages

Total download size: 27 k
Installed size: 29 k
Downloading Packages:
(1/2): epel-next-release-9-7.el9.noarch.rpm                                                                                                                           33 kB/s | 8.1 kB     00:00
(2/2): epel-release-9-7.el9.noarch.rpm                                                                                                                                45 kB/s |  19 kB     00:00
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                211  B/s |  27 kB     02:09
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                             1/1
  Installing       : epel-release-9-7.el9.noarch                                                                                                                                                 1/2
  Running scriptlet: epel-release-9-7.el9.noarch                                                                                                                                                 1/2
Many EPEL packages require the CodeReady Builder (CRB) repository.
It is recommended that you run /usr/bin/crb enable to enable the CRB repository.

  Installing       : epel-next-release-9-7.el9.noarch                                                                                                                                            2/2
  Running scriptlet: epel-next-release-9-7.el9.noarch                                                                                                                                            2/2
  Verifying        : epel-next-release-9-7.el9.noarch                                                                                                                                            1/2
  Verifying        : epel-release-9-7.el9.noarch                                                                                                                                                 2/2

Installed:
  epel-next-release-9-7.el9.noarch                                                                    epel-release-9-7.el9.noarch

Complete!
[root@Control-Node ~]#

Устанавливаем Ansible:

[root@Control-Node ~]# dnf install -y ansible
Last metadata expiration check: 0:31:44 ago on Sun 07 Dec 2025 06:33:07 PM +10.
Dependencies resolved.
=====================================================================================================================================================================================================
 Package                                                Architecture                             Version                                           Repository                                   Size
=====================================================================================================================================================================================================
Installing:
 ansible                                                noarch                                   1:7.7.0-1.el9                                     epel                                         34 M
Installing dependencies:
 ansible-core                                           x86_64                                   1:2.14.18-2.el9                                   appstream                                   2.6 M
 git-core                                               x86_64                                   2.47.3-1.el9                                      appstream                                   4.7 M
 python3-cffi                                           x86_64                                   1.14.5-5.el9                                      baseos                                      253 k
 python3-cryptography                                   x86_64                                   36.0.1-5.el9                                      baseos                                      1.2 M
 python3-packaging                                      noarch                                   20.9-5.el9                                        appstream                                    77 k
 python3-ply                                            noarch                                   3.11-14.el9                                       baseos                                      106 k
 python3-pycparser                                      noarch                                   2.20-6.el9                                        baseos                                      135 k
 python3-pyparsing                                      noarch                                   2.4.7-9.el9                                       baseos                                      150 k
 python3-pyyaml                                         x86_64                                   5.4.1-6.el9                                       baseos                                      205 k
 python3-resolvelib                                     noarch                                   0.5.4-5.el9                                       appstream                                    34 k
 python3-setuptools                                     noarch                                   53.0.0-15.el9                                     baseos                                      936 k
 sshpass                                                x86_64                                   1.09-4.el9                                        appstream                                    28 k

Transaction Summary
=====================================================================================================================================================================================================
Install  13 Packages

Total download size: 45 M
Installed size: 410 M
Downloading Packages:
(1/13): python3-ply-3.11-14.el9.noarch.rpm                                                                                                                           158 kB/s | 106 kB     00:00
(2/13): python3-cffi-1.14.5-5.el9.x86_64.rpm                                                                                                                         295 kB/s | 253 kB     00:00
(3/13): python3-pycparser-2.20-6.el9.noarch.rpm                                                                                                                      244 kB/s | 135 kB     00:00
(4/13): python3-pyparsing-2.4.7-9.el9.noarch.rpm                                                                                                                     166 kB/s | 150 kB     00:00
(5/13): python3-pyyaml-5.4.1-6.el9.x86_64.rpm                                                                                                                        187 kB/s | 205 kB     00:01
(6/13): python3-cryptography-36.0.1-5.el9.x86_64.rpm                                                                                                                 490 kB/s | 1.2 MB     00:02
(7/13): python3-setuptools-53.0.0-15.el9.noarch.rpm                                                                                                                  1.0 MB/s | 936 kB     00:00
(8/13): python3-packaging-20.9-5.el9.noarch.rpm                                                                                                                      148 kB/s |  77 kB     00:00
(9/13): python3-resolvelib-0.5.4-5.el9.noarch.rpm                                                                                                                    268 kB/s |  34 kB     00:00
(10/13): sshpass-1.09-4.el9.x86_64.rpm                                                                                                                               214 kB/s |  28 kB     00:00
(11/13): ansible-core-2.14.18-2.el9.x86_64.rpm                                                                                                                       551 kB/s | 2.6 MB     00:04
(12/13): git-core-2.47.3-1.el9.x86_64.rpm                                                                                                                            487 kB/s | 4.7 MB     00:09
(13/13): ansible-7.7.0-1.el9.noarch.rpm                                                                                                                              672 kB/s |  34 MB     00:52
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                776 kB/s |  45 MB     00:58
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                             1/1
  Installing       : sshpass-1.09-4.el9.x86_64                                                                                                                                                  1/13
  Installing       : python3-resolvelib-0.5.4-5.el9.noarch                                                                                                                                      2/13
  Installing       : git-core-2.47.3-1.el9.x86_64                                                                                                                                               3/13
  Installing       : python3-setuptools-53.0.0-15.el9.noarch                                                                                                                                    4/13
  Installing       : python3-pyyaml-5.4.1-6.el9.x86_64                                                                                                                                          5/13
  Installing       : python3-pyparsing-2.4.7-9.el9.noarch                                                                                                                                       6/13
  Installing       : python3-packaging-20.9-5.el9.noarch                                                                                                                                        7/13
  Installing       : python3-ply-3.11-14.el9.noarch                                                                                                                                             8/13
  Installing       : python3-pycparser-2.20-6.el9.noarch                                                                                                                                        9/13
  Installing       : python3-cffi-1.14.5-5.el9.x86_64                                                                                                                                          10/13
  Installing       : python3-cryptography-36.0.1-5.el9.x86_64                                                                                                                                  11/13
  Installing       : ansible-core-1:2.14.18-2.el9.x86_64                                                                                                                                       12/13
  Installing       : ansible-1:7.7.0-1.el9.noarch                                                                                                                                              13/13
  Running scriptlet: ansible-1:7.7.0-1.el9.noarch                                                                                                                                              13/13
  Verifying        : python3-cffi-1.14.5-5.el9.x86_64                                                                                                                                           1/13
  Verifying        : python3-cryptography-36.0.1-5.el9.x86_64                                                                                                                                   2/13
  Verifying        : python3-ply-3.11-14.el9.noarch                                                                                                                                             3/13
  Verifying        : python3-pycparser-2.20-6.el9.noarch                                                                                                                                        4/13
  Verifying        : python3-pyparsing-2.4.7-9.el9.noarch                                                                                                                                       5/13
  Verifying        : python3-pyyaml-5.4.1-6.el9.x86_64                                                                                                                                          6/13
  Verifying        : python3-setuptools-53.0.0-15.el9.noarch                                                                                                                                    7/13
  Verifying        : ansible-core-1:2.14.18-2.el9.x86_64                                                                                                                                        8/13
  Verifying        : git-core-2.47.3-1.el9.x86_64                                                                                                                                               9/13
  Verifying        : python3-packaging-20.9-5.el9.noarch                                                                                                                                       10/13
  Verifying        : python3-resolvelib-0.5.4-5.el9.noarch                                                                                                                                     11/13
  Verifying        : sshpass-1.09-4.el9.x86_64                                                                                                                                                 12/13
  Verifying        : ansible-1:7.7.0-1.el9.noarch                                                                                                                                              13/13

Installed:
  ansible-1:7.7.0-1.el9.noarch          ansible-core-1:2.14.18-2.el9.x86_64     git-core-2.47.3-1.el9.x86_64        python3-cffi-1.14.5-5.el9.x86_64     python3-cryptography-36.0.1-5.el9.x86_64
  python3-packaging-20.9-5.el9.noarch   python3-ply-3.11-14.el9.noarch          python3-pycparser-2.20-6.el9.noarch python3-pyparsing-2.4.7-9.el9.noarch python3-pyyaml-5.4.1-6.el9.x86_64
  python3-resolvelib-0.5.4-5.el9.noarch python3-setuptools-53.0.0-15.el9.noarch sshpass-1.09-4.el9.x86_64

Complete!
[root@Control-Node ~]#

Проверяем результат:

[root@Control-Node ~]# ansible --version
ansible [core 2.14.18]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.9.25 (main, Nov 10 2025, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-14)] (/usr/bin/python3)
  jinja version = 3.1.2
  libyaml = True
[root@Control-Node ~]#

Итоги:

Мы подготовили окружение. На данном этапе у нас три виртуальные машины, на каждой установлен и обновлен Python. На контрольной машине установлен Ansible. Настроен SSH доступ по ключу контрольной ноды на управляемые серверам.

Следующий урок: Ansible практика – урок №1: Базовая настройка и первый запуск.