Ansible how to create list of dictionary keys

2 min read 06-10-2024
Ansible how to create list of dictionary keys


Extracting Dictionary Keys into a List with Ansible: A Simple Guide

Problem: You have a dictionary in Ansible and need to obtain a list of its keys for further processing. This is a common task when working with Ansible playbooks and you need to dynamically access data within a dictionary.

Scenario: Imagine you're managing a group of servers, and you have a dictionary called server_details containing information like hostname, IP address, and operating system. You want to iterate through each server and retrieve its hostname. To do this, you need to extract the keys from the server_details dictionary.

Original Code (Example):

---
- hosts: all
  tasks:
    - name: Create a list of server hostnames
      set_fact:
        server_hostnames: "{{ server_details | keys }}"

Understanding the Code:

  • set_fact: This module sets a variable within the Ansible playbook.
  • server_details | keys: This filters the server_details dictionary using the keys filter, which returns a list of all its keys.
  • server_hostnames: The extracted keys are stored in this new variable.

Additional Insights:

  • Dynamic Inventory: You can use this technique to dynamically generate lists of servers based on specific criteria from your inventory.
  • Looping with Keys: Now that you have the list of keys (server_hostnames), you can iterate through it and access specific values within the server_details dictionary using the key.
  • Filtering: Ansible provides a vast collection of filters to manipulate data. Explore them to tailor your key extraction to specific requirements.

Example Usage:

---
- hosts: all
  tasks:
    - name: Set server details
      set_fact:
        server_details:
          server1:
            hostname: server1.example.com
            ip_address: 192.168.1.10
          server2:
            hostname: server2.example.com
            ip_address: 192.168.1.20
    - name: Create a list of server hostnames
      set_fact:
        server_hostnames: "{{ server_details | keys }}"
    - name: Print each server hostname
      debug:
        msg: "Hostname: {{ item }}"
      loop: "{{ server_hostnames }}"

Benefits of this Approach:

  • Flexibility: This allows for dynamic and adaptable code, easily handling changes in data structure.
  • Clean Code: It promotes a clear separation of concerns by keeping your data manipulation focused within specific tasks.
  • Efficiency: By leveraging Ansible's built-in filters, you streamline your code and avoid complex loops or manual data extraction.

Conclusion:

Extracting keys from a dictionary is a fundamental task in Ansible, empowering you to work with complex data structures efficiently. With the keys filter and the set_fact module, you gain control over your data, enabling you to dynamically generate lists and perform operations based on your dictionary structure.

Further Resources: