How to include use extra_vars as in external yaml file?

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:

  1. 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
  1. Modify your Ansible playbook to include the vars.yml file and reference the variables using extra_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.

  1. 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"
 }



Leave a Reply

Your email address will not be published. Required fields are marked *