Предыдущий урок: Ansible практика – урок №0: Подготовка окружения.
В прошлый раз мы подготовили наше тестовое окружение и установили Ansible. Сегодня нас ждет базовая настройка ansible.cfg файла, отвечающего за параметры запуска Ansible. Создание простейшего inventory и первый запуск программы.
Первым делом создадим отдельную директорию для ansible и перейдем в нее. Заходим в консоль Control Node и начинаем:
[root@Control-Node ~]# mkdir ansible
[root@Control-Node ~]# cd ansible/
[root@Control-Node ansible]#
Базовая настройка и первый запуск
- Шаг 1: Создание простого inventory
- Шаг 2: Настройка ansible.cfg файла
- Шаг 3: gather_facts сбор информации о хостах
- Шаг 4: Первый запуск Ansible, исполнение команды на удаленном хосте
Шаг 1: Создание простого inventory
Ansible Inventory — это список серверов, с которыми работает Ansible, с их адресами, характеристиками и группами. Такая адресная книга, содержащая вспомогательную информацию о том к кому и как подключаться.
Инвентори может быть статический или динамический, может иметь логическую структуру с делением на группы. Но мы пока в самом начале, наш inventory будет до безобразия простым.
С помощью текстового редактора создадим файл inventory в котором построчно перечислим названия и IP адреса Managed нод. В моем случае это:
Managed-Node-1 ansible_host=192.168.0.151
Managed-Node-2 ansible_host=192.168.0.152
Первый столбец – название хоста в рамках Ansible, простые и описательные имена, чтобы вы сами понимали, что это за сервер. ansible_host – физический адрес хоста, может быть задан в качестве доменного имени или IP адреса.
Проверим, что наш инвентори работает. Запустим следующую команду:
[root@Control-Node ansible]# ansible -i inventory all --key-file ~/.ssh/ansible -m 'ping'
Managed-Node-2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
Managed-Node-1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
[root@Control-Node ansible]#
Использованные параметры:
–i inventory – указание файла инвентори
all – хосты, с которыми будет работать Ansible
—key-file ~/.ssh/ansible – SSH ключ, с которым Ansible будет подключаться к хостам
–m ‘ping’ – использование модуля
Ansible запустил модуль ping (–m ‘ping’) проверяющий доступность хоста, отправил запрос на подключение с использованием ключа (—key-file ~/.ssh/ansible) к каждому (all) хосту, перечисленному в инвентори (–i inventory) и успешно подключился.
Мы создали наш первый inventory и совершили успешный запуск Ansible.
Шаг 2: Настройка ansible.cfg файла
Если у нас есть параметры запуска, которые не будут меняться долгое время, например название файла инвентори или SSH ключ, их можно указать в настройках Ansible в качестве используемых по умолчанию.
Используем текстовый редактор, чтобы создать файл ansible.cfg следующего содержания:
[defaults]
inventory=<название_файла>
remote_user=<имя пользователя>
[ssh_connection]
ssh_args=-p <номер_порта> -i <файл_ключа>
Объяснение параметров:
inventory – файл со списком хостов, используемый по умолчанию
remote_user – пользователь под которым осуществляется подключение к управляемым хостам, например, если вы используете отдельного пользователя для управления серверами.
ssh_args – параметры SSH подключения, на случай если вы используете нестандартный порт или хотите изменить другие параметры подключения.
Это далеко не все параметры, которые можно регулировать с помощью ansible.cfg, но на данном этапе нам этого достаточно.
У меня получились такие настройки:
[root@Control-Node ansible]# cat ansible.cfg
[defaults]
inventory=inventory
remote_user=root
[ssh_connection]
ssh_args=-p 22 -i ~/.ssh/ansible
[root@Control-Node ansible]#
Повторим наш тестовый запуск Ansible ping, но на этот раз исключим из команды параметры, внесенные в конфиг файл:
[root@Control-Node ansible]# ansible all -m 'ping'
Managed-Node-1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
Managed-Node-2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
[root@Control-Node ansible]#
Результат тот же, значит, наши настройки вступили в силу.
Шаг 3: gather_facts сбор информации о хостах
Ansible может собирать основную информацию о серверах, как то – IP адреса, ОС и прочее. Это помогает подстраиваться под окружение. За сбор информации отвечает модуль gather_facts, запустим его для наших хостов:
[root@Control-Node ansible]# ansible all -m gather_facts
Managed-Node-1 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.0.151"
],
...
"ansible_bios_version": "VirtualBox",
...
"ansible_default_ipv4": {
"address": "192.168.0.151",
...
"ansible_distribution": "CentOS",
"ansible_distribution_file_parsed": true,
"ansible_distribution_file_path": "/etc/centos-release",
"ansible_distribution_file_variety": "CentOS",
"ansible_distribution_major_version": "9",
"ansible_distribution_release": "Stream",
"ansible_distribution_version": "9",
...
}
Managed-Node-2 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.0.152"
],
...
"ansible_default_ipv4": {
"address": "192.168.0.152",
...
"ansible_distribution": "CentOS",
"ansible_distribution_file_parsed": true,
"ansible_distribution_file_path": "/etc/centos-release",
"ansible_distribution_file_variety": "CentOS",
"ansible_distribution_major_version": "9",
"ansible_distribution_release": "Stream",
"ansible_distribution_version": "9",
...
}
[root@Control-Node ansible]#
В выводе вы получите огромный список всевозможных параметров, их можно будет использовать как для персонализации работы Ansible, так и в качестве вспомогательной информации в случае возникновения ошибок.
Шаг 4: Первый запуск Ansible, исполнение команды на удаленном хосте
По сути, мы уже запускали Ansible, используя модули, однако это не вносило никаких изменений на управляемых серверах. Давайте исполним простую команду – создадим тестовый файл.
Сначала зайдем на Managed-Node-1 и проверим отсутствие файла:
[root@Managed-Node-1 ~]# ls /tmp/test_file.txt
ls: cannot access '/tmp/test_file.txt': No such file or directory
[root@Managed-Node-1 ~]#
Можете перепроверить и Managed-Node-2, но я уверен, что и там файл отсутствует.
Возвращаемся к контрольной машине. Выполним команду:
[root@Control-Node ansible]# ansible all -a 'touch /tmp/test_file.txt'
Managed-Node-1 | CHANGED | rc=0 >>
Managed-Node-2 | CHANGED | rc=0 >>
[root@Control-Node ansible]#
Использованные параметры:
all – хосты, над которыми выполняет действие Ansible
–a ‘touch /tmp/test_file.txt’ – команда выполняемая на хостах
Зайдем на Managed Node и проверим, появился ли файл:
[root@Managed-Node-1 ~]# ls /tmp/test_file.txt
/tmp/test_file.txt
[root@Managed-Node-1 ~]#
Видим, что Ansible успешно отработал и создал тестовый файл на управляемых хостах.
Итоги:
Сегодня мы провели базовую настройку Ansible, составили наш первый inventory и провели пару тестовых запусков программы с внесением изменений на хосты и без. Так же мы узнали, как и какую Ansible собирает информацию о хостах.
Следующий урок: Ansible практика – урок №2: Как запустить первый плейбук.