Предыдущий урок: 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: Шаблоны и их применение.