- AnsibleFest
- Products
- Community
- Webinars & Training
- Blog

Documentation

# subelements – traverse nested key from a list of dictionaries

- Synopsis
- Parameters
- Examples
- Return Values
- Status

## Synopsis

- Subelements walks a list of hashes (aka dictionaries) and then traverses a list with a given (nested sub-)key inside of those records.

## Parameters

Parameter | Choices/Defaults | Configuration | Comments
--- | --- | --- | ---
_terms - / required |  |  | tuple of list of dictionaries and dictionary key to extract
skip_missing - | Default: "no" |  | If set to True, the lookup plugin will skip the lists items that do not contain the given subkey. If False, the plugin will yield an error and complain about the missing subkey.

## Examples

    - 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'
          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
          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
          debug: var=item
          loop: "{{lookup('subelements', users, 'groups', {'skip_missing': True})}}"

## Return Values

Common return values are documented here, the following are the fields unique to this lookup:

Key | Returned | Description
--- | --- | ---
_list - |  | list of subelements extracted

## Status

- This lookup is not guaranteed to have a backwards compatible interface. [preview]
- This lookup is maintained by the Ansible Community. [community]

### Authors

- Serge van Ginderachter <serge@vanginderachter.be>

Hint

If you notice any issues in this documentation, you can edit this document to improve it.

Hint

Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.