keep_keys¶
Collection Note
This module is part of the ansible.utils collection. To install the collection, use:
Added in version2.5.0.
Synopsis¶
- This plugin keep only specified keys from a provided data recursively.
- Matching parameter defaults to equals unless C(matching_parameter) is explicitly mentioned.
- Using the parameters below- C(data|ansible.utils.keep_keys(target([....])))
Parameters¶
| Parameter | Defaults / Choices | Comments |
|---|---|---|
| data raw required |
This option represents a list of dictionaries or a dictionary with any level of nesting data. For example C(config_data|ansible.utils.keep_keys(target([....]))), in this case C(config_data) represents this option. |
|
| matching_parameter str |
Choices: starts_with, ends_with, regex | Specify the matching configuration of target keys and data attributes. |
| target list / elements=str required |
Specify the target keys to keep in list format. |
Examples¶
# example.yaml
# interfaces:
# - name: eth0
# enabled: true
# duplex: auto
# speed: auto
# note:
# - Connected green wire
# - name: eth1
# description: Configured by Ansible - Interface 1
# mtu: 1500
# speed: auto
# duplex: auto
# enabled: true
# note:
# - Connected blue wire
# - Configured by Paul
# vifs:
# - vlan_id: 100
# description: Eth1 - VIF 100
# mtu: 400
# enabled: true
# comment: Needs reconfiguration
# - vlan_id: 101
# description: Eth1 - VIF 101
# enabled: true
# - name: eth2
# description: Configured by Ansible - Interface 2 (ADMIN DOWN)
# mtu: 600
# enabled: false
# Playbook
- name: keep selective keys from dict/list of dict data
ansible.builtin.set_fact:
data: '{{ interfaces }}'
- debug:
msg: >-
{{ data|ansible.utils.keep_keys(target=['description', 'name', 'mtu',
'duplex', 'enabled', 'vifs', 'vlan_id']) }}
# Output
# TASK [keep selective keys from python dict/list of dict] ****************************************************************************************
# ok: [localhost] => {
# "ansible_facts": {
# "data": [
# {
# "duplex": "auto",
# "enabled": true,
# "name": "eth0",
# "note": [
# "Connected green wire"
# ],
# "speed": "auto"
# },
# {
# "description": "Configured by Ansible - Interface 1",
# "duplex": "auto",
# "enabled": true,
# "mtu": 1500,
# "name": "eth1",
# "note": [
# "Connected blue wire",
# "Configured by Paul"
# ],
# "speed": "auto",
# "vifs": [
# {
# "comment": "Needs reconfiguration",
# "description": "Eth1 - VIF 100",
# "enabled": true,
# "mtu": 400,
# "vlan_id": 100
# },
# {
# "description": "Eth1 - VIF 101",
# "enabled": true,
# "vlan_id": 101
# }
# ]
# },
# {
# "description": "Configured by Ansible - Interface 2 (ADMIN DOWN)",
# "enabled": false,
# "mtu": 600,
# "name": "eth2"
# }
# ]
# },
# "changed": false
# }
# Read vars_file 'example.yaml'
# TASK [debug] *************************************************************************************************************
# ok: [localhost] => {
# "msg": [
# {
# "duplex": "auto",
# "enabled": true,
# "name": "eth0"
# },
# {
# "description": "Configured by Ansible - Interface 1",
# "duplex": "auto",
# "enabled": true,
# "mtu": 1500,
# "name": "eth1",
# "vifs": [
# {
# "description": "Eth1 - VIF 100",
# "enabled": true,
# "mtu": 400,
# "vlan_id": 100
# },
# {
# "description": "Eth1 - VIF 101",
# "enabled": true,
# "vlan_id": 101
# }
# ]
# },
# {
# "description": "Configured by Ansible - Interface 2 (ADMIN DOWN)",
# "enabled": false,
# "mtu": 600,
# "name": "eth2"
# }
# ]
# }
# Playbook
- name: keep selective keys from dict/list of dict data
ansible.builtin.set_fact:
data: "{{ interfaces }}"
- debug:
msg: "{{ data|ansible.utils.keep_keys(target=['desc', 'name'], matching_parameter= 'starts_with') }}"
# Output
# TASK [keep selective keys from python dict/list of dict] **************************
# ok: [localhost] => {
# "ansible_facts": {
# "data": [
# {
# "duplex": "auto",
# "enabled": true,
# "name": "eth0",
# "note": [
# "Connected green wire"
# ],
# "speed": "auto"
# },
# {
# "description": "Configured by Ansible - Interface 1",
# "duplex": "auto",
# "enabled": true,
# "mtu": 1500,
# "name": "eth1",
# "note": [
# "Connected blue wire",
# "Configured by Paul"
# ],
# "speed": "auto",
# "vifs": [
# {
# "comment": "Needs reconfiguration",
# "description": "Eth1 - VIF 100",
# "enabled": true,
# "mtu": 400,
# "vlan_id": 100
# },
# {
# "description": "Eth1 - VIF 101",
# "enabled": true,
# "vlan_id": 101
# }
# ]
# },
# {
# "description": "Configured by Ansible - Interface 2 (ADMIN DOWN)",
# "enabled": false,
# "mtu": 600,
# "name": "eth2"
# }
# ]
# },
# "changed": false
# }
# Read vars_file 'example.yaml'
# TASK [debug] **********************************************************************************
# ok: [localhost] => {
# "msg": [
# {
# "name": "eth0"
# },
# {
# "description": "Configured by Ansible - Interface 1",
# "name": "eth1",
# "vifs": [
# {
# "description": "Eth1 - VIF 100"
# },
# {
# "description": "Eth1 - VIF 101"
# }
# ]
# },
# {
# "description": "Configured by Ansible - Interface 2 (ADMIN DOWN)",
# "name": "eth2"
# }
# ]
# }
Authors¶
- Sagar Paul (@kb-Perbyte)