Запуск задачи 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
Ответы
Ответ 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"
Таким образом, если в этой группе нет хоста с этой подстрокой, список пуст, что означает ложное условие.