Ansible практика – урок №10: Больше переменных в host vars.

Предыдущий урок: Ansible практика – урок №9: Как использовать переменные в playbook.

В прошлом уроке мы научились создавать свои переменные, используя ивентори. Сегодня мы продолжим работу с переменными и рассмотрим такой механизм как host vars.

Зачем нужны host vars?

Когда у нас маленький плейбук, с парой переменных, их конечно можно добавить в инвентори и не париться. Но что если переменных больше? Представьте, во что превратится файл инвентори если в него вписать десятки переменных для каждого хоста?

host vars позволяет вынести переменные в отдельные файлы для каждого управляемого сервера.

Больше переменных в host vars.

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

Шаг 1: Создаем host vars

Создадим директорию host_vars:

[root@Control-Node ansible]# mkdir host_vars
[root@Control-Node ansible]#

В этой директории создадим файл для каждой управляемой ноды. Имя файла должно иметь название, совпадающее с именем хоста в inventory.

В моем случае это:

[root@Control-Node ansible]# touch host_vars/Managed-Node-1.yml
[root@Control-Node ansible]# touch host_vars/Managed-Node-2.yml
[root@Control-Node ansible]# touch host_vars/Managed-Node-3.yml
[root@Control-Node ansible]#

Теперь вынесем переменные из инвентори и создадим пару новых.

Шаг 2: Заносим переменные в host vars

Заполняем полученные файлы, host_vars/Managed-Node-1.yml:

---
mariadb_log_conf_file: /etc/my.cnf.d/logs.cnf
domain_name: example-1.com
basic_auth: true

Если у вас есть реальное доменное имя, которое вы планируете использовать, укажите его в переменной domain_name.

Содержание файла host_vars/Managed-Node-2.yml:

---
mariadb_log_conf_file: /etc/my.cnf.d/logs.cnf
domain_name: example-2.com
basic_auth: false

Содержание файла host_vars/Managed-Node-3.yml:

---
mariadb_log_conf_file: /etc/mysql/mariadb.conf.d/logs.cnf
domain_name: example-3.com

Удалим переменные из файла inventory, останется только:

Managed-Node-1 ansible_host=192.168.0.151
Managed-Node-2 ansible_host=192.168.0.152
Managed-Node-3 ansible_host=192.168.0.153

Шаг 3: Проверяем плейбук

Перед запуском Ansible пройдем по хостам и удалим файл logs.cnf, чтобы плейбуку было что менять.

Managed-Node-1:

[root@Managed-Node-1 ~]# rm -f /etc/my.cnf.d/logs.cnf
[root@Managed-Node-1 ~]#

Managed-Node-2:

[root@Managed-Node-2 ~]# rm -f /etc/my.cnf.d/logs.cnf
[root@Managed-Node-2 ~]#

Managed-Node-3:

root@Managed-Node-3:~# rm -f /etc/mysql/mariadb.conf.d/logs.cnf
root@Managed-Node-3:~#

Запускаем плейбук:

[root@Control-Node ansible]# ansible-playbook install_lemp.yml --tags mariadb --skip-tags installation,start

PLAY [all] ******************************************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************************************
ok: [Managed-Node-1]
ok: [Managed-Node-2]
ok: [Managed-Node-3]

TASK [mariadb : Copy custom config file to Managed Node] ********************************************************************************************************************************************
changed: [Managed-Node-2]
changed: [Managed-Node-1]
changed: [Managed-Node-3]

RUNNING HANDLER [mariadb : restart_mariadb] *********************************************************************************************************************************************************
changed: [Managed-Node-1]
changed: [Managed-Node-2]
changed: [Managed-Node-3]

PLAY RECAP ******************************************************************************************************************************************************************************************
Managed-Node-1             : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
Managed-Node-2             : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
Managed-Node-3             : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@Control-Node ansible]#

Ansible успешно отработал.

Итоги:

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

Следующий урок: Ansible практика – урок №11: Шаблоны и их применение.