В ansible как я могу развернуть различные конфигурационные файлы в зависимости от хоста? - PullRequest
0 голосов
/ 01 мая 2020

Мне бы хотелось иметь роль, которая может развертывать как 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

Должно ли это быть как-то сделано с помощью условных выражений?

1 Ответ

0 голосов
/ 01 мая 2020

Если они отличаются только одним шаблоном, вы можете переместить это назначение в инвентарь или использовать group_vars (эквивалентный результат, но не требующий загрязнения файла инвентаря)

[all:vars]
ntp_conf_template=ntp-client.j2
; ...etc...

[ntp]
10.1.4.1
10.1.4.2

[ntp:vars]
ntp_conf_template=ntp-server.j2 

затем в задании:

- name: generate ntp.conf
  template:
    src: '{{ ntp_conf_template }}'
    dest: /etc/ntp.conf
...