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

Модуль имеет соответствующее расширение действий (action plugin). Это означает, что часть работы может быть выполнена на управляющем узле.

async

Модуль не поддерживает асинхронное выполнение.

become

Модуль не поддерживает повышение привилегий.

bypass_host_loop

Модуль добавляет узлы в инвентарный список не поочередно для каждого узла, а как глобальную задачу, которая выполняется для всех узлов сразу, игнорируя обычные ограничения и циклы.

bypass_task_loop

Этот модуль не игнорирует ключевые слова loop и with_.

check_mode

Модуль работает в режиме проверки (check_mode) не в полном объеме. Режим проверки позволяет узнать, что бы произошло, если бы узел был добавлен в инвентарный список.

connection

Модуль не использует соединение с удаленными узлами.

core

Только часть функциональности модуля может быть изменена с помощью расширений.

delegation

Модуль не поддерживает delegate_to, то есть не может выполнятся на другом узле.

diff_mode

Модуль не поддерживает режим сравнения (diff_mode).

ignore_conditional

Модуль игнорирует ключевое слово when:.

platform

Модуль поддерживает все платформы.

tags

Модуль поддерживает ключевое слово tags.

until

Модуль поддерживает механизм повторных попыток.

Примеры#

Для изучения возможностей модуля ознакомьтесь с приведенными ниже примерами.

Добавление узла в группу и присваивание значения переменной#

Следующий пример добавляет узел в группу 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.