попытка опросить вложенные словари в ansible

#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. это работает, но при этом отображается вся информация. Если я хочу отобразить первый ключ / пару в интерфейсе, как мне это сделать?