How to include and use extra_vars as in external yaml file in ansible playbook?
In Ansible, you can use extra_vars
to pass additional variables to your playbook. One way to use extra_vars
is by passing them in an external YAML file. Here’s an example of how to include and use extra_vars
from an external YAML file in an Ansible playbook:
- Create an external YAML file with your variables. For example, you can create a file called
vars.yml
with the following content:
---
my_var1: value1
my_var2: value2
- Modify your Ansible playbook to include the
vars.yml
file and reference the variables usingextra_vars
. Here’s an example:
- name: Example of using extra_vars from external YAML file
hosts: all
vars_files:
- vars.yml
tasks:
- name: Print the values of my_var1 and my_var2
debug:
msg: "my_var1={{ my_var1 }}, my_var2={{ my_var2 }}"
In this example, we include the vars.yml
file using the vars_files
keyword. This makes the variables in the file available to the playbook. We then reference the variables in the debug
module using the my_var1
and my_var2
variables.
- When running the playbook, pass the
vars.yml
file using the--extra-vars
option. Here’s an example:
ansible-playbook my_playbook.yml --extra-vars "@vars.yml"
In this example, we pass the vars.yml
file using the --extra-vars
option and prefix the filename with the @
symbol. This tells Ansible to read the variables from the file and make them available to the playbook.
When you run this playbook, Ansible will print out the values of my_var1
and my_var2
using the values from the vars.yml
file:
ok: [localhost] => {
"msg": "my_var1=value1, my_var2=value2"
}
Create a ansible config file as ansible.cfg file in your project directory:
[defaults]
inventory = hosts
Create a hosts file as hosts in the project directory
[webservers]
ansnode1 ansible_ssh_host=192.168.56.202 ansible_python_interpreter=/usr/bin/python
ansnode2 ansible_ssh_host=192.168.56.203 ansible_python_interpreter=/usr/bin/python
[webservers:vars]
ansible_port=22
http_port=8080
[dbservers]
ansnode3 ansible_ssh_host=192.168.56.204 ansible_python_interpreter=/usr/bin/python
ansnode4 ansible_ssh_host=192.168.56.205 ansible_python_interpreter=/usr/bin/python
[dev:children]
webservers
dbservers
Create a file named as external_extra_vars.yml in your project directory which has extra vars included in yaml file
---
# YAML documents begin with the document separator ---
# The minus in YAML this indicates a list item. The Playbook contains a list
# of plays, with each play being a dictionary
- name: 'create and access variables inside the playbook'
# Target: where our play will run and options it will run with
hosts: ansnode1
gather_facts: true
# Task: the list of tasks that will be executed within the playbook
tasks:
- name: Displaying groupvars and hostvars from the directory structure
debug:
msg: "{{ extra_vars_key }}"
# Three dots indicate the end of a YAML document
...
Create file named as extra_vars_file.yml in your project directory which contains extra variables in yml format
---
extra_vars_key: this is extra var value from external yml
...
{
"extra_vars_key": "this is the extra var value from external json"
}