如何在Ansible中循环遍历JSON列表,并按单独列表中的值过滤?

布赖恩·鲍曼(Brian Bauman)

我有一个每个包含用户名,gecos等的用户词典列表,以及一个每个包含组成员列表的组词典列表。我需要一个Ansible任务来仅循环访问与用户列表中的特定用户列表匹配的用户列表。

我怀疑我的问题与正确使用引号和Jinja分隔符有关,以便在Ansible-> Jinja-> JMESPath层次结构中的适当级别上对所有内容进行评估,但我无法确切确定我在做什么错误地。我在下面尝试了数十种变体,包括将子查询分解为自己的变量,但是没有有意义的反馈,我没有太多信息可以改进。

users.json:

{
  "aws_users": [
    {
      "name": "userA",
      "gecos": "User A"
    },
    {
      "name": "userB",
      "gecos": "User B"
    },
    {
      "name": "userC",
      "gecos": "User C"
    }
  ]
}

groups.json:

{
  "aws_groups": [
    {
      "name": "groupA",
      "members": [
        "userA",
        "userC"
      ]
    }
  ]
}

ansible.yml:

---
- hosts: 127.0.0.1
  become: true
  connection: local
  gather_facts: no
  vars_files:
    - ../../config/groups.json
    - ../../config/users.json

  vars:
     groupARoster: "{{ aws_groups | json_query('[?name==`groupA`].members | [0]') }}"
     query: "aws_users[?contains(`{{ groupARoster }}`, name)]"
     groupAUsers: "{{ aws_users | json_query(query) }}"

  tasks:
    - debug:
        var: groupARoster

    - debug:
        var: query

    - debug:
        var: groupAUsers

#    - name: Some looping thing
#      command: ...
#      loop: "{{ groupAusers }}"

输出:

PLAY [127.0.0.1] ***********************************************************************************************************************************************************************************************

TASK [debug] ***************************************************************************************************************************************************************************************************
ok: [127.0.0.1] => {
    "groupARoster": [
        "userA", 
        "userC"
    ]
}

TASK [debug] ***************************************************************************************************************************************************************************************************
ok: [127.0.0.1] => {
    "query": "aws_users[?contains(`[u'userA', u'userC']`, name)]"
}

TASK [debug] ***************************************************************************************************************************************************************************************************
ok: [127.0.0.1] => {
    "groupAUsers": ""
}

PLAY RECAP *****************************************************************************************************************************************************************************************************
127.0.0.1                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

所需的输出(用于传递到Ansible循环参数):

"groupAUsers": [
    {
      "name": "userA",
      "gecos": "User A"
    },
    {
      "name": "userC",
      "gecos": "User C"
    }
  ]
Zeitounator

除非您真的想为此使用jmespath,否则IMO有一种更简单的方法selectattr

groupARoster: "{{ (aws_groups | selectattr('name', 'equalto', 'groupA') | list)[0].members }}"
groupAUsers: "{{ aws_users | selectattr('name', 'in', groupARoster) | list }}"

同时,使用仍然可以实现json_query你真的很亲近 问题是您的中间查询。您正在将变量传递aws_userjson_query因此,"aws_user"您传递的值中没有第一级密钥。您必须从查询中删除它:

groupARoster: "{{ aws_groups | json_query('[?name==`groupA`].members | [0]') }}"
query: "[?contains(`{{ groupARoster }}`, name)]"
groupAUsers: "{{ aws_users | json_query(query) }}"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Ansible中循环遍历列表中的列表

来自分类Dev

如何在 Ansible 中遍历嵌套列表?

来自分类Dev

如何在Haskell中实现一个遍历列表所有值的for循环?

来自分类Dev

如何在Haskell中实现一个遍历列表所有值的for循环?

来自分类Dev

循环遍历Java中的列表以检查值

来自分类Dev

如何遍历 Ansible 中的 dict 元素列表

来自分类Dev

如何在ansible中在列表上运行嵌套的循环

来自分类Dev

如何在ansible中用字典列表在字典中循环?

来自分类Dev

如何在ansible中的单行命令中添加列表值?

来自分类Dev

如何在R中的数据框内的列表中过滤值?

来自分类Dev

如何在字典列表中的特定值的单独“数据框”列中创建列表?

来自分类Dev

将列表过滤到单独的列表中

来自分类Dev

将列表过滤到单独的列表中

来自分类Dev

Linq如何在列表中合并对象数组并按值分组

来自分类Dev

如何在熊猫中从列表中提取数据作为字符串,并按值选择数据?

来自分类Dev

如何从列表中的值替换url中的值并使用FOR循环遍历它们

来自分类Dev

如何遍历列表中的列表

来自分类Dev

如何循环遍历列表并在python中执行多个过滤条件

来自分类Dev

如何在 AngularJS 中按键值过滤 json 列表?

来自分类Dev

在Python中循环遍历列表

来自分类Dev

如何在C ++中遍历对象列表

来自分类Dev

在 Ansible 中过滤 unicode 列表

来自分类Dev

如何在 C# 中创建循环遍历多个列表的循环

来自分类Dev

如何在“对话”列表中访问JSON模型中的值?

来自分类Dev

如何在Ansible中查找列表中的列表成员

来自分类Dev

如何在遍历列表的同时删除列表中的项目

来自分类Dev

如何在Python中过滤列表?

来自分类Dev

如何在RXJava中过滤列表

来自分类Dev

如何在 Unity 中过滤/搜索列表

Related 相关文章

  1. 1

    在Ansible中循环遍历列表中的列表

  2. 2

    如何在 Ansible 中遍历嵌套列表?

  3. 3

    如何在Haskell中实现一个遍历列表所有值的for循环?

  4. 4

    如何在Haskell中实现一个遍历列表所有值的for循环?

  5. 5

    循环遍历Java中的列表以检查值

  6. 6

    如何遍历 Ansible 中的 dict 元素列表

  7. 7

    如何在ansible中在列表上运行嵌套的循环

  8. 8

    如何在ansible中用字典列表在字典中循环?

  9. 9

    如何在ansible中的单行命令中添加列表值?

  10. 10

    如何在R中的数据框内的列表中过滤值?

  11. 11

    如何在字典列表中的特定值的单独“数据框”列中创建列表?

  12. 12

    将列表过滤到单独的列表中

  13. 13

    将列表过滤到单独的列表中

  14. 14

    Linq如何在列表中合并对象数组并按值分组

  15. 15

    如何在熊猫中从列表中提取数据作为字符串,并按值选择数据?

  16. 16

    如何从列表中的值替换url中的值并使用FOR循环遍历它们

  17. 17

    如何遍历列表中的列表

  18. 18

    如何循环遍历列表并在python中执行多个过滤条件

  19. 19

    如何在 AngularJS 中按键值过滤 json 列表?

  20. 20

    在Python中循环遍历列表

  21. 21

    如何在C ++中遍历对象列表

  22. 22

    在 Ansible 中过滤 unicode 列表

  23. 23

    如何在 C# 中创建循环遍历多个列表的循环

  24. 24

    如何在“对话”列表中访问JSON模型中的值?

  25. 25

    如何在Ansible中查找列表中的列表成员

  26. 26

    如何在遍历列表的同时删除列表中的项目

  27. 27

    如何在Python中过滤列表?

  28. 28

    如何在RXJava中过滤列表

  29. 29

    如何在 Unity 中过滤/搜索列表

热门标签

归档