add_host
#
Модуль add_host
позволяет динамически добавлять узлы и группы в описание инвентаря во время выполнения сценариев.
Это может быть полезно, если нужно добавить только что созданный узел и использовать его в последующих задачах.
Особенности работы#
Особенности использования модуля ansible.builtin.add_host
:
Модуль позволяет динамически добавлять новые узлы и группы в инвентарный список во время выполнения набора сценариев. Однако, эти изменения действуют только во время выполнения конкретного набора сценариев. После его выполнения все добавленные узлы исчезнут из инвентарного списка.
При добавлении узла обычно задают также его переменные, которые потом можно использовать в последующих сценариях того же набора. Например, при создании нового виртуального сервера в облаке,
add_host
может передать его IP-адрес, порт и название учетной записи для управления им.Модуль можно использовать на всех платформах, включая Windows.
Модуль не обходит ограничение фильтра, задаваемого аргументом
--limit
. Новые узлы, добавленные с помощьюadd_host
, не будут использоваться, если они не удовлетворяют условиям фильтрации.Например, рассмотрим запуск набора сценариев с помощью следующей команды:
ansible-playbook playbook.yml --limit "webservers"
Если узел, добавленный модулем
add_host
, не входит в группуwebservers
, то Ansible не будет выполнять для него задачи, хотя он добавлен в описание инвентаря.
Параметры#
Модуль принимает следующие параметры:
name
(обязательный параметр) – FQDN или IP-адрес узла. Можно указать порт в форматеip:port
, например,192.168.1.100:2222
.groups
– список групп, в которые будет добавлен узел.Дополнительные переменные – любые другие параметры, необходимые для работы узла, например,
ansible_user
,ansible_ssh_private_key_file
,ansible_port
,ansible_connection
.
Атрибуты#
Атрибуты определяют функции Ansible, которые может использовать модуль.
Атрибут |
Описание |
---|---|
|
Модуль имеет соответствующее расширение действий (action plugin). Это означает, что часть работы может быть выполнена на управляющем узле. |
|
Модуль не поддерживает асинхронное выполнение. |
|
Модуль не поддерживает повышение привилегий. |
|
Модуль добавляет узлы в инвентарный список не поочередно для каждого узла, а как глобальную задачу, которая выполняется для всех узлов сразу, игнорируя обычные ограничения и циклы. |
|
Этот модуль не игнорирует ключевые слова |
|
Модуль работает в режиме проверки ( |
|
Модуль не использует соединение с удаленными узлами. |
|
Только часть функциональности модуля может быть изменена с помощью расширений. |
|
Модуль не поддерживает |
|
Модуль не поддерживает режим сравнения ( |
|
Модуль игнорирует ключевое слово |
|
Модуль поддерживает все платформы. |
|
Модуль поддерживает ключевое слово |
|
Модуль поддерживает механизм повторных попыток. |
Примеры#
Для изучения возможностей модуля ознакомьтесь с приведенными ниже примерами.
Добавление узла в группу и присваивание значения переменной#
Следующий пример добавляет узел в группу just_created
и присваивает переменной ansible_user
значение admin
:
- name: Add host to group 'just_created' with variable ansible_user=admin
ansible.builtin.add_host:
name: '192.168.1.101'
groups: just_created
ansible_user: admin
Здесь:
'192.168.1.101'
– IP-адрес узла, который будет добавлен в инвентарный список;just_created
– группа, в которую добавляется узел.
Добавление узла в несколько групп#
Следующий пример добавляет узел в несколько групп:
- name: Add host to multiple groups
ansible.builtin.add_host:
hostname: '192.168.1.102'
groups:
- group1
- group2
Добавление узла с нестандартным портом#
Следующий пример добавит узел с указанным IP-адресом и нестандартным портом:
- name: Add a host with a non-standard port local to your machines
ansible.builtin.add_host:
name: '192.168.1.103:2222'
Здесь '192.168.1.103:2222'
– IP-адрес узла с портом.
Это полезно, если для подключения к узлу по SSH используется порт, отличающийся от 22
.
Подключение через промежуточный узел#
Следующий пример показывает настройку подключения к узлу 192.168.1.103
через промежуточный узел 192.168.1.104
:
- name: Add a host alias that we reach through a tunnel
ansible.builtin.add_host:
hostname: '192.168.1.103'
ansible_host: '192.168.1.104'
ansible_port: '2222'
Здесь:
'192.168.1.103'
– IP-адрес управляемого узла;'192.168.1.104'
– IP-адрес промежуточного узла;'2222'
– порт для подключения.
Добавление всех узлов в группу#
Следующий пример добавит в группу done
все узлы, которые участвуют в выполнении сценария:
- name: Add all hosts running this playbook to the done group
ansible.builtin.add_host:
name: '{{ item }}'
groups: done
loop: "{{ ansible_play_hosts }}"
Здесь
"{{ ansible_play_hosts }}"
– перебирает все узлы, которые задействованы в текущем наборе сценариев;'{{ item }}'
– использует каждый узел в списке и добавляет его в группуdone
.