#ansible
#ansible
Вопрос:
Сейчас я прочитал несколько тем об этом, но мне трудно понять, как получить доступ к вложенному словарю, как к словарю в сборнике пьес. В этом примере словарь является ansible_net_interfaces .
Например, я могу использовать следующий код для получения списка всех интерфейсов и их конкретной информации:
- name: test debug
debug:
msg:
- "{{ item.key }}:"
- " description: {{ item.value.description | default('', true) }}"
- " ip_address: {{ item.value.ipv4.0.address | default('', true) }}"
- " subnet: {{ item.value.ipv4.0.subnet | default('', true) }}"
when:
- item.key != "Async0/0/0"
- item.key != "Dialer1"
with_dict: "{{ ansible_net_interfaces }}"
Но чего я не могу понять, так это как получить доступ к вложенному словарю каждого интерфейса одинаково и одновременно. В этом случае я использовал фильтр для присвоения нулевого значения, если его нет, чтобы предотвратить завершение воспроизведения, но я хотел бы знать, как ссылаться на пары ключ / значение в каждом вложенном словаре таким же образом, как я ссылаюсь на каждый интерфейс с помощью «item.key». Я рассуждаю так, что затем я могу перебирать и фиксировать каждое значение, даже не зная заранее, какие пары значений ключа назначены. В конечном итоге это может оказаться непрактичным в этом случае, но это то, что я все равно хотел бы знать.
Вещи, которые я пробовал до сих пор: with_nested (возможно, работает только со списками, а не со словарями?) with_items и отдельный пользовательский список интерфейсов with_subelements различные комбинации и синтаксис всего вышеперечисленного.
пример того, что я пытаюсь сделать:
- name: second loop
debug:
for interfaces in {{ ansible_net_interfaces }}:
msg: "{{ ansible_net_interfaces[interfaces].item.key }}"
Я пытаюсь перебрать каждый интерфейс в ansible_net_facts и внутри этого цикла пытаюсь перечислить все ключи / пары в этом интерфейсе.
По сути, поскольку словарь представляет собой массив, как мне настроить таргетинг на индекс вложенного словаря — скажем, значение элемента 0 (который, я думаю, является описанием интерфейса) в элементе 0 (словарь атрибутов интерфейса) в ansible_net_interfaces (словарь интерфейсов)
Комментарии:
1. Я не совсем понимаю, что вы пытаетесь сделать. Может быть, покажите пример того, как вы хотели бы, чтобы код выглядел (даже если он не работает)?
2. Я обновил пример, надеюсь, это немного прояснит ситуацию!
3. Я все еще не уверен, что вам нужно. Когда вы говорите «перечислите все ключи / пары в этом интерфейсе», вы имеете в виду, что хотите перечислить значения
.description
и.ipv4
без их указания? В любом случае, если вы просто печатаете данные, попробуйте просто распечататьitem.value
— это должно показать вам всю его информацию4. это работает, но при этом отображается вся информация. Если я хочу отобразить первый ключ / пару в интерфейсе, как мне это сделать?