4.Ansible. переменные

Thank you for reading this post, don't forget to subscribe!

В систе­ме управ­ле­ния кон­фи­гу­ра­ци­я­ми Ansible пере­мен­ные хра­нят зна­че­ния, кото­рые могут исполь­зо­вать­ся в набо­рах инструк­ций (playbook). Инфор­ма­ция об уда­лен­ных хостах из фай­ла inventory так­же может быть исполь­зо­ва­на в каче­стве переменных

При­ме­ча­ние. Дело в том, что пакет Apache име­ет раз­ное назва­ние в раз­лич­ных дис­три­бу­ти­вах — httpd для RedHat и apache2 для Debian.

Созда­дим файл /etc/ansible/playbooks/install_apache.yml

Допол­ни­тель­ные зада­чи Debug и Debug1 поз­во­ля­ют уви­деть, что на уда­лен­ном хосте уста­нов­ле­на ОС Debian, и в пере­мен­ную package_name запи­са­но зна­че­ние apache2.

Бла­го­да­ря успеш­но­му исполь­зо­ва­нию пере­мен­ной package_name дан­ный набор инструк­ций пра­виль­но уста­но­вит web-сер­вер apache и на RedHat, и на Debian.

В Ansible пере­мен­ные мож­но зада­вать в отдель­ном (гло­баль­ном) фай­ле, а потом вклю­чать этот файл в playbook с помо­щью клю­че­во­го сло­ва vars_files:. Напри­мер, у нас есть файл с пере­мен­ны­ми /etc/ansible/vars/test_var.yml с таким содержанием:

В набо­ре инструк­ций вклю­че­ние это­го фай­ла с пере­мен­ны­ми будет выгля­деть сле­ду­ю­щим образом:

Так­же есть воз­мож­ность уста­нав­ли­вать пере­мен­ные непо­сред­ствен­но в playbook с помо­щью клю­че­во­го сло­ва vars:, выгля­дит это так:

в каче­стве пере­мен­ных мож­но исполь­зо­вать дан­ные, полу­чен­ные при выпол­не­нии зада­чи GATHERING FACTS.

Посмот­реть пере­мен­ные и их зна­че­ния мож­но командой:

Исполь­зо­ва­ние групп в инвен­тар­ном фай­ле поз­во­ля­ет груп­пи­ро­вать уда­лен­ные хосты по реги­о­нам раз­ме­ще­ния или по ролям сер­ве­ров — это чрез­вы­чай­но удоб­но при рабо­те с сот­ня­ми и тыся­ча­ми серверов.

Так­же в inventory фай­ле мож­но исполь­зо­вать регу­ляр­ные выра­же­ния, напри­мер запись:

[test]

test-[01:99]

будет соот­вет­ство­вать груп­пе хостов test, в кото­рую вхо­дят хосты test-01, test-02, test-03, … test-99.

Для кон­крет­но­го хоста или груп­пы хостов из инвен­тар­но­го фай­ла мож­но уста­но­вить спе­ци­фи­че­ские пере­мен­ные при необ­хо­ди­мо­сти. Напри­мер, хосту test-1 мож­но назна­чить ssh порт таким образом:

[test]

test-1 ssh_port=5555

test-2

Изме­нить ssh порт для всей груп­пы хостов мож­но так:

[test]

test-1

test-2

[test:vars]
ssh_port=5555

При­ме­ча­ние. Конеч­но же, мож­но созда­вать отдель­ные фай­лы пере­мен­ных для хостов и для групп — в дирек­то­рии host_vars и в дирек­то­рии group_vars соот­вет­ствен­но. Един­ствен­ное усло­вие — ката­ло­ги с эти­ми фай­ла­ми пере­мен­ных долж­ны нахо­дить­ся в одной дирек­то­рии с инвен­тар­ным (inventory) файлом.

Сто­ит пом­нить об иерар­хии пере­мен­ных: пере­мен­ные из гло­баль­но­го фай­ла пере­опре­де­ля­ют хост-пере­мен­ные, груп­по­вые пере­мен­ные и пере­мен­ные в инвен­тар­ном фай­ле. Груп­по­вые пере­мен­ные пере­опре­де­ля­ют пере­мен­ные из инвен­тар­но­го фай­ла, а хост-пере­мен­ные пере­опре­де­ля­ют груп­по­вые переменные