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

提示

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