how to use include_vars in ansible

jake picture jake · Oct 1, 2016 · Viewed 42.2k times · Source

I have created my own custom library, I added my custom library in the common folder of my repository. In that I need to pass variables dynamically. It's a confidential password, so I am using "vault" in ansible.

In that my requirement is how to pass include_vars in the tasks\main.yml before hosts.

e.g: mytasks.yml

- include_vars: sample_vault.yml
- include: sample_tasks.yml
- hosts: localhost
  tasks:
    name: "free task"
    command: ls -a

my directory structure like this:

myfolder
  - common 
      -library   
         -my file.py
      - sample_tasks.yml

  - mytasks
      -mytasks.yml(my main master playbook file)
      -sample_vault.yml  (note:i create this using vault for confidential purpose)
      - roles
        -myrole

Here I need to run sample_tasks file using a variables passed in sample_vault.yml file before I execute the hosts tasks using ansible. If I use extra variable means password is visible so I don't need that.

When I use include_vars in my tasks/main.yml file, it shows the following error:

ERROR! 'include_vars' is not a valid attribute for a Play

Answer

Konstantin Suvorov picture Konstantin Suvorov · Oct 1, 2016

You can't use include_vars this way, it's only available for use under tasks.
If sample_tasks.yml is a list of tasks, you also can't use it on playbook level. See my other answer for explanation.

You can use vars_files like this:

- hosts: localhost
  vars_files:
    - sample_vault.yml
  tasks:
    name: "free task"
    command: ls -a

Or pass a file as extra variables:

ansible-playbook --ask-vault-pass -e @sample_vault.yml myplaybook.yml