Я не могу исправить ansible playbook

#ansible #ansible-template

#ansible #ansible-template

Вопрос:

Я пытаюсь написать playbook для создания двух файлов.Когда определены вложенные переменные. Я получил результат, но это не то, что я ожидал. Мне нужно создать два файла, содержащие только переменные, определяющие

playbook.yml

 - hosts: all
  vars:
   variable:
    - name: "item1"
      vars:
        - { id: 1, type: "get" , resource: "Customerid" }
        - { id: 17, type: "post", resource: "Cus" }
    - name: "item2"
      vars:
        - { id: 2, type: "get", resource: "Customerid" }
  tasks:

   - template:
      src: template.j2
      dest: "{{ item.name }}"
     with_items: "{{ variable }}"
       
  

содержимое файла template.j2

 {% for item in variable %}
Item Name: {{ item.name }}
{% for item_var in item.vars %}
{% if item_var['type'] == 'get' %}
    Item ID: {{ item_var['id'] }}
    Item Resource: {{ item_var['resource'] }}
    Get function
{% else %}
    Item ID: {{ item_var['id'] }}
    Item Resource: {{ item_var['resource'] }}
    Post function
{% endif %}
{% endfor %}
{% endfor %}
  

Текущий результат создания двух файлов item1 и item2:

элемент1

 Item Name: item1
    Item ID: 1
    Item Resource: Customerid
    Get function
    Item ID: 17
    Item Resource: Cus
    Post function
Item Name: item2
    Item ID: 2
    Item Resource: Customerid
    Get function
  

пункт 2

 Item Name: item1
    Item ID: 1
    Item Resource: Customerid
    Get function
    Item ID: 17
    Item Resource: Cus
    Post function
Item Name: item2
    Item ID: 2
    Item Resource: Customerid
    Get function

  

Я хотел бы получить приведенный ниже результат при создании двух файлов. Не уверен, как это получить. Желаемый результат:

элемент1

 Item Name: item1
    Item ID: 1
    Item Resource: Customerid
    Get function
    Item ID: 17
    Item Resource: Cus
    Post function
  

пункт 2

 Item Name: item2
    Item ID: 2
    Item Resource: Customerid
    Get function
  

Ответ №1:

Просто удалите повторяющийся цикл из шаблона.

 Item Name: {{ item.name }}
{% for item_var in item.vars %}
{% if item_var['type'] == 'get' %}
    Item ID: {{ item_var['id'] }}
    Item Resource: {{ item_var['resource'] }}
    Get function
{% else %}
    Item ID: {{ item_var['id'] }}
    Item Resource: {{ item_var['resource'] }}
    Post function
{% endif %}
{% endfor %}
  

Шаблон может быть упрощен

 Item Name: {{ item.name }}
{% for item_var in item.vars %}
    Item ID: {{ item_var.id }}
    Item Resource: {{ item_var.resource }}
    {{ item_var.type|capitalize }} function
{% endfor %}