#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 }}"