Переменные в Ansible можно устанавливать не только в плэйбуках и пользовательских файлах, но в inventory-файлах. Для того, чтобы установить переменную для конкретного хоста, достаточно после его имени написать название переменной и ее значение:
[webservers]
web1.example.com root_dir=/var/tmp server_name=hexlet.io
web2.example.com root_dir=/var/tmp
Если же эта переменная относится к группе хостов, то ее можно указать в отдельной секции, добавив к имени группы ключевое слово vars
:
[webservers]
web1.example.com server_name=hexlet.io
web2.example.com
[appservers]
app1.example.com
[webservers:vars]
root_dir=/var/tmp
Если переменная относится ко всем хостам, то используется ключевое слово all
:
[all:vars]
root_dir=/var/tmp
Это особенно полезно, если нужно поддерживать несколько сред развертывания с разной конфигурацией. Таким способом можно указывать разные хосты, пароли и другие конфигурационные параметры.
Полный список всех серверов, групп и переменных можно посмотреть с помощью команды ansible-inventory
с флагами --list
или --graph
:
ansible-inventory -i inventory.ini --list
{
"_meta": {
"hostvars": {
"app1.example.com": {
"root_dir": "/var/tmp"
},
"web1.example.com": {
"root_dir": "/var/tmp",
"server_name": "hexlet.io"
},
"web2.example.com": {
"root_dir": "/var/tmp"
}
}
},
"all": {
"children": [
"appservers",
"ungrouped",
"webservers"
]
},
"appservers": {
"hosts": [
"app1.example.com"
]
},
"webservers": {
"hosts": [
"web1.example.com",
"web2.example.com"
]
}
}
ansible-inventory -i inventory.ini --graph
@all:
|--@appservers:
| |--app1.example.com
|--@ungrouped:
|--@webservers:
| |--web1.example.com
| |--web2.example.com
Если параметров становится слишком много, и они не зависят от среды, то их можно вынести из inventory-файла. Для этого создается директория group_vars
с файлами, соответствующими названиям групп. Эти файлы не имеют расширения, но по факту являются yml-файлами. Поэтому в отличие от ini-файла пары параметр=значение
записываются в них через двоеточие, например, root_dir: /var/tmp
.
Так же можно поступать с переменными, которые принадлежат конкретному хосту. Только директория с файлами, соответствующими названиям хостов, будет именоваться host_vars
.
Самостоятельная работа
Создайте или используйте готовый плейбук, который устанавливает и настраивает Nginx
Используя переменные хостов выведите на html-странице имена разных серверов
Пример шаблона:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> <h2>This is server {{ server_name }}!</h2> </body> </html>
Выполните плейбук. Если все выполнено успешно, то зайдя по адресу на каждый из серверов, вы увидите разные отображаемые имена
Залейте изменения на Github
В итоге у вас получится два сервера, на которых запущен NGINX. На каждом из них будет выводиться свое имя сервера
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.