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.
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
``json
{
"name": "John",
"age": 30
}
`
- read_json.yml
`yaml
---
- name: json read Playbook
hosts: localhost
vars:
jsondata: "{{ lookup('file', 'example.json') | from_json }}"
tasks:
- name: Print variable
ansible.builtin.debug:
var: jsondata
`
execution
`bash
$ 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
``bash
$ 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 *