Мне бы хотелось иметь роль, которая может развертывать как ntp-клиенты (хосты, которые указывают время на внутренние ntp-серверы), так и ntp-сервер (хосты, которые указывают на inte rnet для времени).
Есть хорошая ссылка для того, как сделать это с несколькими ролями , но, поскольку разница между ними очень мала (сервер против клиента), мне интересно, есть ли способ упростить и использовать одну роль с некоторым интеллектом для настройки хостов по мере необходимости.
В моем инвентаре хостов у меня есть группа [ntp], которые являются серверами, а все остальное - клиенты.
[web]
10.1.1.1
10.1.1.2
[app]
10.1.2.1
10.1.2.2
[db]
10.1.3.1
10.1.3.2
[ntp]
10.1.4.1
10.1.4.2
Роль / задача по развертыванию сервера или клиента - это в основном одно и то же, за исключением шаблона, скопированного в /etc/ntp.conf
. Для всех хостов скопируйте шаблон ntp-client.j2
, если хост не является частью группы [ntp]
, а затем скопируйте шаблон ntp-server.j2
.
Мысль № 1: Установить теги в книге воспроизведения?
Может ли начальная книга воспроизведения установить переменную тега для роли? Я не имею в виду фильтр, основанный на теге, но установите его для той роли, которую он будет вызывать. Что-то вроде:
- hosts:all,!ntp
tags: client (set the server tag, don’t filter against the argument)
roles:
- ntp
- hosts:ntp
tags: server (set the server tag, don’t filter against the argument)
roles:
- ntp
И затем в роли /ntp/template/main.yml
определение файла
- name: stuff all host do
module: modulename attribute=value
tags:
- client
- server
- name: stuff just for ntp server
module: modulename attribute=value
tags:
- server
- name: stuff for all hosts (other then ntp servers)
module: modulename attribute=value
tags:
- client
Мысль № 2: Использование хостов в файле задачи
Или в Файл /ntp/tasks/main.yml
, можем ли мы использовать фильтры hosts
для управления тем, что работает на каких хостах?
- hosts: all
- name: stuff all host do
module: modulename attribute=value
- hosts: ntp
- name: stuff just for ntp server
module: modulename attribute=value
- hosts: all,!ntp
- name: stuff for all hosts (other then ntp servers)
module: modulename attribute=value
Должно ли это быть как-то сделано с помощью условных выражений?