ansible.utils.replace_keys (4.0.0) — filter

Replaces specific keys with their after value from a data recursively.

| "added in version" 2.5.0 of ansible.utils"

Authors: Sagar Paul (@KB-perByte)

Install collection

Install with ansible-galaxy collection install ansible.utils:==4.0.0


Add to requirements.yml

  collections:
    - name: ansible.utils
      version: 4.0.0

Description

This plugin replaces specific keys with their after value from a data recursively.

Matching parameter defaults to equals unless C(matching_parameter) is explicitly mentioned.

Using the parameters below- C(data|ansible.utils.replace_keys(target([....])))

Usage examples

  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# example.yaml
# interfaces:
#   - interface_name: eth0
#     enabled: true
#     duplex: auto
#     speed: auto
#   - interface_name: eth1
#     description: Configured by Ansible - Interface 1
#     mtu: 1500
#     speed: auto
#     duplex: auto
#     is_enabled: true
#     vifs:
#     - vlan_id: 100
#       description: Eth1 - VIF 100
#       mtu: 400
#       is_enabled: true
#     - vlan_id: 101
#       description: Eth1 - VIF 101
#       is_enabled: true
#   - interface_name: eth2
#     description: Configured by Ansible - Interface 2 (ADMIN DOWN)
#     mtu: 600
#     is_enabled: false

# Playbook
- name: replace keys with specified keys dict/list to dict
  ansible.builtin.set_fact:
    data: '{{ interfaces }}'
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- debug:
    msg: >-
      {{ data|ansible.utils.replace_keys(target=[{'before':'interface_name',
      'after':'name'}, {'before':'is_enabled', 'after':'enabled'}]) }}
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# Output
# TASK [replace keys with specified keys dict/list to dict] *************************
# ok: [localhost] => {
#     "ansible_facts": {
#         "data": [
#             {
#                 "duplex": "auto",
#                 "enabled": true,
#                 "interface_name": "eth0",
#                 "speed": "auto"
#             },
#             {
#                 "description": "Configured by Ansible - Interface 1",
#                 "duplex": "auto",
#                 "interface_name": "eth1",
#                 "is_enabled": true,
#                 "mtu": 1500,
#                 "speed": "auto",
#                 "vifs": [
#                     {
#                         "description": "Eth1 - VIF 100",
#                         "is_enabled": true,
#                         "mtu": 400,
#                         "vlan_id": 100
#                     },
#                     {
#                         "description": "Eth1 - VIF 101",
#                         "is_enabled": true,
#                         "vlan_id": 101
#                     }
#                 ]
#             },
#             {
#                 "description": "Configured by Ansible - Interface 2 (ADMIN DOWN)",
#                 "interface_name": "eth2",
#                 "is_enabled": false,
#                 "mtu": 600
#             }
#         ]
#     },
#     "changed": false
# }

# TASK [debug] **********************************************************************
# ok: [localhost] => {
#     "msg": [
#         {
#             "duplex": "auto",
#             "enabled": true,
#             "name": "eth0",
#             "speed": "auto"
#         },
#         {
#             "description": "Configured by Ansible - Interface 1",
#             "duplex": "auto",
#             "enabled": true,
#             "mtu": 1500,
#             "name": "eth1",
#             "speed": "auto",
#             "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"
#         }
#     ]
# }

# example.yaml
# interfaces:
#   - interface_name: eth0
#     enabled: true
#     duplex: auto
#     speed: auto
#   - interface_name: eth1
#     description: Configured by Ansible - Interface 1
#     mtu: 1500
#     speed: auto
#     duplex: auto
#     is_enabled: true
#     vifs:
#     - vlan_id: 100
#       description: Eth1 - VIF 100
#       mtu: 400
#       is_enabled: true
#     - vlan_id: 101
#       description: Eth1 - VIF 101
#       is_enabled: true
#   - interface_name: eth2
#     description: Configured by Ansible - Interface 2 (ADMIN DOWN)
#     mtu: 600
#     is_enabled: false

# Playbook
- name: replace keys with specified keys dict/list to dict
  ansible.builtin.set_fact:
    data: '{{ interfaces }}'
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- debug:
    msg: >-
      {{ data|ansible.utils.replace_keys(target=[{'before':'name',
      'after':'name'}, {'before':'enabled', 'after':'enabled'}],
      matching_parameter= 'ends_with') }}

Inputs

    
data:
    description:
    - This option represents a list of dictionaries or a dictionary with any level of
      nesting data.
    - For example C(config_data|ansible.utils.replace_keys(target([....]))), in this case
      C(config_data) represents this option.
    required: true
    type: raw

target:
    description: Specify the target keys to replace in list of dictionaries format containing
      before and after key value.
    elements: dict
    required: true
    suboptions:
      after:
        description: after attribute key [change to]
        type: str
      before:
        description: before attribute key [to change]
        type: str
    type: list

matching_parameter:
    choices:
    - starts_with
    - ends_with
    - regex
    description: Specify the matching configuration of target keys and data attributes.
    type: str