Назад | Перейти на главную страницу

Публикация Ansible with_dicts group_vars

Мое требование - получить следующий вывод в файле

 - targets: [ 'host1:port1', 'host2:port1' , 'host3:port1' ]                 
   job : hostgroup1     

 - targets: [ 'host1:port2', 'host2:port2' , 'host3:port3' ]                 
   job : hostgroup2

У меня есть входной файл, как показано ниже, и он должен извлекать данные из переменных или групповых переменных. В Hostgroup1 у меня может быть n хостов, а в Hostgroup2 у меня может быть n хостов.

 Hostgroup1 : host1,host2,host3....n                                                    
 Hostgroup2 : host1,host2,host3....n                  

Я не понимаю, как создать шаблон jinja и задачи, чтобы получить этот результат

Что ж, я определил что-то вроде ваших данных в разделе «vars» в playbook. Вы можете поместить его в файл vars, или вы можете определить эти vars в своих hostvars / groupvars или что-то в этом роде. Вероятно, это не совсем то, что вам нужно, но вы можете адаптировать его к своим потребностям.

- hosts: localhost
  gather_facts: no
  vars:
    data:
    - { "name": "hostgroup1", "port": 80, "hosts": ["host1", "host2", "host3"] }
    - { "name": "hostgroup2", "port": 443, "hosts": ["host5", "host6", "host7"] }
  tasks:
  - debug:
      msg: |
        {% for item in data %}
        - job: {{ item.name }}
          targets: [ {%- for host in item.hosts -%}
          "{{ host }}:{{ item.port }}",
          {%- endfor -%}]
        {% endfor %}

Вывод

# ANSIBLE_STDOUT_CALLBACK=debug ansible-playbook 20190404_sf_961529.yml 

PLAY [localhost] ************************************************************************************

TASK [debug] ****************************************************************************************
ok: [localhost] => {}

MSG:

- job: hostgroup1
  targets: ["host1:80","host2:80","host3:80",]
- job: hostgroup2
  targets: ["host5:443","host6:443","host7:443",]


PLAY RECAP ******************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0   

Для вывода в файл вы можете использовать такую ​​задачу.

  - copy:
      dest: outputpath
      content: |
        {% for item in data %}
        - job: {{ item.name }}
          targets: [ {%- for host in item.hosts -%}
          "{{ host }}:{{ item.port }}",
          {%- endfor -%}]
        {% endfor %}