How to read a file into a variable on the host with Ansible?
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 read a file into a variable
ansible.builtin.file
- read file contents
Let's deep dive 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.
Parameters and Return Values
Parameters
- \_terms string - path(s) of files to read
Return Values
- \_raw list - content of file(s)
The parameters of the lookup plugin file.
The only required parameter is the default "\_terms", with the path(s) of files to read.
The normal usage is to assign the lookup plugin to a variable name that you could use in your playbook.
## Playbook
Read a file into a variable on the host with Ansible Playbook.
code
``yaml
---
- name: read file on host
hosts: all
vars:
contents: "{{ lookup('file','example.txt') }}"
tasks:
- name: print file
ansible.builtin.debug:
msg: "the content of file is {{ contents }}"
`
execution
`bash
ansible-pilot $ ansible-playbook -i virtualmachines/demo/inventory variables/read-file.yml
PLAY [read file on host] **
TASK [Gathering Facts]
ok: [demo.example.com]
TASK [print file] *
ok: [demo.example.com] => {
"msg": "the content of file is example contents"
}
PLAY RECAP **
demo.example.com : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansible-pilot $
`
idempotency
``bash
ansible-pilot $ ansible-playbook -i virtualmachines/demo/inventory variables/read-file.yml
PLAY [read file on host] **
TASK [Gathering Facts]
ok: [demo.example.com]
TASK [print file] **