Sebohal
Sebohal

Reputation: 51

ansible template loop jinja2 "i need a line separated with , but the last entry without ,

i want to create an dynamical playbook for my infrastructure.

i need this line in my config:

wsrep_cluster_address='gcomm://192.168.126.38,192.168.126.39,192.168.126.40'

my template looks like this:

wsrep_cluster_address = 'gcomm://{% for host in groups['db-server']%}{{hostvars[host]['ansible_host']}},{% endfor %}'

it works and looks like this on the host:

wsrep_cluster_address = 'gcomm://172.16.120.45,172.16.120.40,172.16.120.42,'

the last comma is breaking my nerves.

Is there a way to tell ansible not to comma the last entry of the loop?

Tanks for any help, have a great day

Upvotes: 2

Views: 1468

Answers (2)

ADV-IT
ADV-IT

Reputation: 831

You saved my Day! Also if you need line in config file like JSON:

nodelist = ["192.168.126.38","192.168.126.39","192.168.126.40"]

This is your Ansible for this:

nodelist={%for host in groups['mygroup']%}"{{hostvars[host].ansible_eth0.ipv4.address}}"{% if not loop.last %},{% endif %}{% endfor %}

Here is if full example:

 - name: Create List of nodes to be added into Cluster
   set_fact: nodelist={%for host in groups['mygroup']%}"{{hostvars[host].ansible_eth0.ipv4.address}}"{% if not loop.last %},{% endif %}{% endfor %}

 - debug: msg=[{{nodelist}}]

 - name: Set Cluster node list in config file
   lineinfile:
         path: "/etc/myfonfig.cfg"
         line: "hosts: [{{ nodelist }}]"

as results you will have the following line in config file:

hosts: ["192.168.126.38","192.168.126.39","192.168.126.40"]

Upvotes: 2

Sebohal
Sebohal

Reputation: 51

Found the solution, thanks to my developer.

wsrep_cluster_address = 'gcomm://{% for host in groups['db-server']%}{{hostvars[host]['ansible_host']}}{% if not loop.last %},{% endif %}{% endfor %}'

Upvotes: 3

Related Questions