Подтвердить что ты не робот

Запуск задачи Ansible только тогда, когда имя хоста содержит строку

У меня есть несколько задач в роли следующим образом. Я не хочу создавать другой файл yml для обработки этой задачи. У меня уже есть учет для веб-серверов, но для нескольких наших серверов Perl требуются некоторые веб-пакеты для установки.

- name: Install Perl Modules
  command: <command>
  with_dict: perl_modules

- name: Install PHP Modules
  command: <command>
  with_dict: php_modules
  when: <Install php modules only if hostname contains the word "batch">

Файл инвентаризации хоста

[webs]
web01
web02
web03

[perl]
perl01
perl02
perl03
perl-batch01
perl-batch02
4b9b3361

Ответ 1

Ниже следует сделать трюк:

- name: Install PHP Modules
  command: <command>
  with_dict: php_modules
  when: "'batch' in inventory_hostname"

Обратите внимание, что во время игры в Playbook у вас будет несколько пропущенных хостов.

inventory_hostname является одной из Ansible "магических" переменных:

Кроме того, resource_hostname - это имя имени хоста как настроен в файле хоста инвентаризации Ansibles. Это может быть полезно для когда вы не хотите полагаться на обнаруженное имя хоста ansible_hostname или по другим таинственным причинам. Если у вас длинный FQDN, inventory_hostname_short также содержит часть до первого период, без остальной части домена.

Источник: Ansible Docs - Магические переменные и способы доступа к информации о других хостах

Ответ 2

Вы даже можете фильтровать задачи для хостов определенной группы (не весь инвентарь).

Следующее условие выполнит вашу задачу - только если в группе инвентаризации [perl] есть имя хоста, которое включает подстроку "batch":

 when: "groups['perl'] | select('search','batch') | list"

Таким образом, если в этой группе нет хоста с этой подстрокой, список пуст, что означает ложное условие.