Перебор переменных в задаче, в переменных которой встроен другой список

#ansible

#ansible

Вопрос:

Я хочу перебрать список переменных. Я перебираю переменные, используя with_items, однако загвоздка в том, что в этом списке переменных есть список, в котором должно быть другое подмножество / количество переменных, которые мне также нужно перебирать.

Я пробовал разные фильтры для включения with_nested, with_subelements и with_items . Я знаю, что они движутся к циклам в качестве основного движущего фактора, продвигающегося вперед, поэтому любое решение в идеале должно использовать путь ansible, продвигающийся вперед. Я рассматриваю возможность создания «внутреннего» цикла или внешней задачи, которая будет выполнять итерацию по vlans_list и вводить эти данные как свои в эту точку.

группировать переменные

 vnic_templates:
   - name: vNIC-A
     fabric: A
     mac_pool: testmac1 
     mtu: 1500 
     org_dn: org-root
     redundancy_type: none 
     state: present
     template_type: initial-template
     vlans_list:          ### THE PROBLEM CHILD
       - name: vlan2
         native: 'no'
         state: present
       - name: vlan3
         native: 'no'
         state: present    
  

Фактическая задача — у меня возникают проблемы, когда мне приходится вводить несколько vlan. Шаблон vnic будет иметь отношение 1 к одному, однако vlans_list может быть 1 vnic_template для многих vlan.

   ucs_vnic_template:
    hostname: "{{ ucs_manager_hostname }}"
    username: "{{ ucs_manager_username }}"
    password: "{{ ucs_manager_password }}"
    name: "{{ item.name }}"
    fabric: "{{ item.fabric }}"
    mac_pool: "{{ item.mac_pool }}"
    mtu: "{{ item.mtu }}"
    org_dn: "{{ item.org_dn }}"
    redundancy_type: "{{ item.redundancy_type }}"
    state: "{{ item.state }}"
    template_type: "{{ item.template_type }}"
    vlans_list: 
     - name: "{{ item.1.name }}"
       native: "{{ item.1.native }}"
       state: "{{ item.1.present }}"  
#    loop: "{{ vnic_templates | subelements('vlans_list') }}"
    with_items:
     - "{{ vnic_templates }}"
  

Я начинаю с добавления include vlan_list.yml за пределами этой задачи, но не знаком с out для этого.

Фактические результаты

The task includes an option with an undefined variable. The error was: 'item' is undefinednn

Мне нужно создать единый шаблон vnic с несколькими vlan, определенными в этом списке.

Ответ №1:

Другой инженер, с которым я работаю, смог решить этот вопрос. По тому, как расположены переменные, мы смогли легко просто изменить код

Измените это:

     vlans_list: 
     - name: "{{ item.1.name }}"
       native: "{{ item.1.native }}"
       state: "{{ item.1.present }}"  
  

К этому:

     vlans_list: "{{ item.vlans_list }}" 
  

Полный код приведен ниже.

 - name: Add vNIC Templates
  ucs_vnic_template:
    hostname: "{{ ucs_manager_hostname }}"
    username: "{{ ucs_manager_username }}"
    password: "{{ ucs_manager_password }}"
    name: "{{ item.name }}"
    fabric: "{{ item.fabric }}"
    mac_pool: "{{ item.mac_pool }}"
    mtu: "{{ item.mtu }}"
    org_dn: "{{ item.org_dn }}"
    redundancy_type: "{{ item.redundancy_type }}"
    state: "{{ item.state }}"
    template_type: "{{ item.template_type }}"
    vlans_list: "{{ item.vlans_list }}" 
  with_items:
     - "{{ vnic_templates }}"