ntp.j2 for different set of hosts

Hi,

I have created a role for the ntp with the ntp.j2 and ntp1.j2 templates in templates diretory .

with ntp.j2 consisting of

server 2.2.2.1 iburst

and with tp.
ntp1.j2 consist of

server 1.2.1.3 iburst

In the task under the

  • name:

template:

src: ntp.conf.j2
dest: /etc/ntp.conf
notify: restart ntp

I want to use the template for different hosts if the hosts are say test1 testops1 db-client1 ans 10 others etc .apply ntp.j2 and if the hosts are dev1 devops1 db-devclien1 app-devclient2 and others … how do we use the when clause to achieve this . this hosts are randomly mentioned in the inventory in different groups.

Thank you .

You could add a group and put them like ntp_grp and ntp1_grp

Then the when will be
  when: inventory_hostname in group['ntp_grp']

If you don't want to have groups then you need to list every host like so
  when: inventory_hostname in ['test1','testops1','db-client1']

Why not have a variable ntp_template and just set the group_var for each group to be the template required.

Have two template files ntp1.j2 and ntp2.j2. (This a poor naming scheme, you should name it related to the group)

[group1]
testops1 db-client1

[group2]
testops1 other-client

testops2 other-client

testops3 other-client

testops4 other-client

[group1:vars]
ntp_template: ntp1.j2

[group2:vars]
ntp_template: ntp2.j2

The play would look like this

  • name:
    template:
    src: “{{ ntp_template }}”
    dest: /etc/ntp.conf
    notify: restart ntp

If you just want to change the ip of the server, you can just use a variable in the template

server {{ ntp_server }} iburst

I find it better to limit conditionals(when) and better to rely on different groups_vars or different inventories(/group_vars). It make it much more readable and enables your code to be more flexible, re-usable.

Thanks Kai and Steve for your different approaches to the issue.

So Steve, you have mentioned in the last line "If you just want to change the ip of the server, you can just use a variable in the template

server {{ ntp_server }} iburst"-- > you mean that to have a single template file and in the group_vars (say /etc/ansible/group_vars/group1.yml ) have a variable
as ntp_server : 2.2.2.1 and for (/etc/ansible/group_vars/group2.yml) have a variable as ntp_server: 1.2.1.3 . and have a single template file which has the variable as
server {{ ntp_server}} iburst etc and it take it from there… is that what you mean.