ansible.builtin.subelements 查找 - 从字典列表中遍历嵌套键

注意

此查找插件是 ansible-core 的一部分,包含在所有 Ansible 安装中。在大多数情况下,您可以使用简短的插件名称 subelements。但是,我们建议您使用 完全限定的集合名称 (FQCN) ansible.builtin.subelements 以便轻松链接到插件文档并避免与可能具有相同查找插件名称的其他集合发生冲突。

概述

  • Subelements 遍历哈希(也称为字典)列表,然后遍历这些记录内具有给定(嵌套子)键的列表。

术语

参数

评论

术语

字符串 / 必需

字典列表和要提取的字典键的元组

关键字参数

这描述了查找的关键字参数。这些是在以下示例中的值 key1=value1key2=value2 等等:lookup('ansible.builtin.subelements', key1=value1, key2=value2, ...)query('ansible.builtin.subelements', key1=value1, key2=value2, ...)

参数

评论

skip_missing

字符串

查找从字典中接受此标志作为可选。有关更多信息,请参见示例部分。

如果设置为 True,查找插件将跳过不包含给定子键的列表项。

如果设置为 False,插件将产生错误并抱怨缺少子键。

默认值: false

注释

注意

  • 当关键字参数和位置参数一起使用时,位置参数必须列在关键字参数之前:lookup('ansible.builtin.subelements', term1, term2, key1=value1, key2=value2)query('ansible.builtin.subelements', term1, term2, key1=value1, key2=value2)

示例

- name: show var structure as it is needed for example to make sense
  hosts: all
  vars:
    users:
      - name: alice
        authorized:
          - /tmp/alice/onekey.pub
          - /tmp/alice/twokey.pub
        mysql:
            password: mysql-password
            hosts:
              - "%"
              - "127.0.0.1"
              - "::1"
              - "localhost"
            privs:
              - "*.*:SELECT"
              - "DB1.*:ALL"
        groups:
          - wheel
      - name: bob
        authorized:
          - /tmp/bob/id_rsa.pub
        mysql:
            password: other-mysql-password
            hosts:
              - "db1"
            privs:
              - "*.*:SELECT"
              - "DB2.*:ALL"
  tasks:
    - name: Set authorized ssh key, extracting just that data from 'users'
      ansible.posix.authorized_key:
        user: "{{ item.0.name }}"
        key: "{{ lookup('file', item.1) }}"
      with_subelements:
         - "{{ users }}"
         - authorized

    - name: Setup MySQL users, given the mysql hosts and privs subkey lists
      community.mysql.mysql_user:
        name: "{{ item.0.name }}"
        password: "{{ item.0.mysql.password }}"
        host: "{{ item.1 }}"
        priv: "{{ item.0.mysql.privs | join('/') }}"
      with_subelements:
        - "{{ users }}"
        - mysql.hosts

    - name: list groups for users that have them, don't error if groups key is missing
      ansible.builtin.debug: var=item
      loop: "{{ q('ansible.builtin.subelements', users, 'groups', {'skip_missing': True}) }}"

返回值

描述

返回值

字符串

提取的子元素列表

返回:成功

作者

  • Serge van Ginderachter

提示

每种条目类型的配置条目具有从低到高的优先级顺序。例如,列表中较低的变量将覆盖列表中较高的变量。