How to Read a JSON file into a variable on the host with Ansible?

The JSON (JavaScript Object Notation) is an open standard file format used a lot for data interchange. I’m going to show you a live Playbook with some simple Ansible code. I’m Luca Berton, and welcome to today’s episode of Ansible Pilot.

Ansible reads a JSON file into a variable

  • ansible.builtin.file - read file contents
  • from_json filter - converts the variable to JSON.

Let’s dive deep into the Ansible lookup plugin file. Plugins are a way to expand the Ansible functionality. With lookup plugins specifically, you can load variables or templates with information from external sources. The full name is ansible.builtin.file; it’s part of ansible-core and is included in all Ansible installations. The purpose of the file lookup plugin is to read file contents. The “from_json” is an Ansible-specific filter to convert the input to JSON. Let’s combine the result of the file lookup plugin with the from_json filter for our use case.

Join 50+ hours of courses in our exclusive community

Playbook

How to read the example.json JSON file, assign it to a variable and use it in your Ansible Playbook code.

code

  • example.json
{
  "name": "John",
  "age": 30
}
  • read_json.yml
---
- name: json read Playbook
  hosts: localhost
  vars:
    jsondata: "{{ lookup('file', 'example.json') | from_json }}"
  tasks:
    - name: Print variable
      ansible.builtin.debug:
        var: jsondata

execution

$ ansible-playbook read_json.yml 
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the
implicit localhost does not match 'all'
PLAY [json read Playbook] *******************************************************************
TASK [Gathering Facts] ******************************************************************
ok: [localhost]
TASK [Print variable] *******************************************************************
ok: [localhost] => {
    "jsondata": {
        "age": 30,
        "name": "John"
    }
}
PLAY RECAP ******************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

idempotency

$ ansible-playbook read_json.yml 
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the
implicit localhost does not match 'all'
PLAY [json read Playbook] *******************************************************************
TASK [Gathering Facts] ******************************************************************
ok: [localhost]
TASK [Print variable] *******************************************************************
ok: [localhost] => {
    "jsondata": {
        "age": 30,
        "name": "John"
    }
}
PLAY RECAP ******************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

code with ❤️ in GitHub

Conclusion

Now you know how to read a JSON file into a variable on the host with Ansible. Subscribe to the YouTube channel, Medium, and Website, X (formerly Twitter) to not miss the next episode of the Ansible Pilot.

Academy

Learn the Ansible automation technology with some real-life examples in my Udemy 300+ Lessons Video Course.

BUY the Complete Udemy 300+ Lessons Video Course

My book Ansible By Examples: 200+ Automation Examples For Linux and Windows System Administrator and DevOps

BUY the Complete PDF BOOK to easily Copy and Paste the 250+ Ansible code

Want to keep this project going? Please donate

Patreon Buy me a Pizza