Home > Back-end >  clickhosue jinja looping config.xml.j2
clickhosue jinja looping config.xml.j2

Time:10-26

i have this list of ansible inventory

[clickhouse]
server01 ansible_host=10.1.1.1 name=server01 
server02 ansible_host=10.1.1.2 name=server02
server03 ansible_host=10.1.1.3 name=server03 
server04 ansible_host=10.1.1.4 name=server04

i have this config.xml.j2

   <noc>
      <shard>
        <internal_replication>true</internal_replication>
        <replica>
            <host>server01 </host>
            <port>9000</port>
        </replica>
        <replica>
            <host>server02</host>
            <port>9000</port>
        </replica>        
      </shard>
    </noc>

**can you support with looping to be like the below ** enter image description here

CodePudding user response:

create config.xml.j2 file in templates folder:

   <noc>
   {% for i in  range(0, (ansible_play_hosts_all) | length , 2) %}
      <shard>
        <internal_replication>true</internal_replication>
        <replica>
            <host>{{ ansible_play_hosts_all[i] }}</host>
            <port>9000</port>
        </replica>
        <replica>
            <host>{{ ansible_play_hosts_all[i | int   1] }}</host>
            <port>9000</port>
        </replica>        
      </shard>
    {% endfor %}
    </noc>

and use it with this playbook:

- name: "tips4"
  hosts: all
  gather_facts: false
  tasks: 
    - name: Include vars
      template:
        src: config.xml.j2
        dest: config.xml
      delegate_to: localhost

following the version of ansible you have, you could write

ansible_play_hosts_all[i 1] instead of ansible_play_hosts_all[i | int 1]

  • Related