首页 > 解决方案 > 字典的ansible访问列表

问题描述

我正在尝试使用外部 var 文件为自定义模块创建一堆组和成员。我需要做的就是访问列表中的字典列表。我已经尝试了很多东西,但我现在可能最接近的是:vars.yml:

groups_and_members:
  FIRST_GROUP:
    "memberx":
      octet: 1
      action: add
    "nostandardy":
      octet: 3
      action: add
    "memberz":
      octet: 5
      action: add
  OTHER_GROUP:
    "member1":
      octet: 7
      action: delete
    "unexpected":
      octet: 1
      action: add

任务.yml:

  - name: "add members"
    mymodule:
      cmd: "{{ item.value.action }}"
      parameters:
        name: "{{ item.key }}"
        octet: "{{ item.value.octet }}"
    with_items: "{{ groups_and_members }}"

所以想法是从列表中获取 (groups_and_members).value(FIRST_GROUP 在第一次迭代中)。并在 cmd 中使用其成员属性。但是因为我不知道组的名字,也不知道成员的名字,所以我不知道如何访问它们。我不会事先知道小组或成员的名称。dicts 应该在一个列表中,以防万一有新的 dicts 时不必执行新任务。如何访问组、成员和成员属性?我尝试过 with_dict、with_subelements 等,但似乎无法弄清楚。

标签: listdictionaryvariablesansible

解决方案


我应该以不同的方式格式化字典列表。这是一个重复的问题:在此处回答: Ansible with_subelements

我的变量应该是这样的:

groups_members:
  - groupname: FIRST_GROUP
    members:
      - name: memberx
        octet: "1"
        action: add
      - name: nostandardy
        octet: "3"
        action: add
      - name: memberz
        octet: "2"
        action: add
      - name: unexpected
        octet: "1"
        action: add
  - groupname: RHOST
    members:
      - member: other1
        octet: "1"
        action: add

然后可以作为 item.1.action 或 item.0.value 访问,并且任务与

    with_subelements:
  - "{{ groups_members }}"
  - members

推荐阅读