How can I pass variable to ansible playbook in the command line?

443.6k views Asked by At

How can one pass variable to ansible playbook in the command line?
The following command didn't work:

$ ansible-playbook -i '10.0.0.1,' yada-yada.yml --tags 'loaddata' django_fixtures="tile_colors"

Where django_fixtures is my variable.

11

There are 11 answers

5
Édouard Lopez On BEST ANSWER

Reading the docs I find the section Passing Variables On The Command Line, that gives this example:

ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"

Others examples demonstrate how to load from JSON string (≥1.2) or file (≥1.3)

0
jarv On

You can use the --extra-vars option. See the docs

5
lanni654321 On
ansible-playbook release.yml -e "version=1.23.45 other_variable=foo"
0
Ali Atakan On
ansible-playbook test.yml --extra-vars "arg1=${var1} arg2=${var2}"

In the yml file you can use them like this

---
arg1: "{{ var1 }}"
arg2: "{{ var2 }}"

Also, --extra-vars and -e are the same, you can use one of them.

5
GreensterRox On

Other answers state how to pass in the command line variables but not how to access them, so if you do:

--extra-vars "version=1.23.45 other_variable=foo"

In your yml file you assign these to scoped ansible variables by doing something like:

vars:
    my_version: "{{ version }}"
    my_other_variable: {{ other_variable }}

An alternative to using command line args is to utilise environmental variables that are already defined within your session, you can reference these within your ansible yml files like this:

vars:
    my_version: "{{ lookup('env', 'version') }}"
    my_other_variable: {{ lookup('env', 'other_variable') }}
0
Rajeev Singh On

ansible-playbok -i <inventory> <playbook-name> -e "proc_name=sshd"

You can use the above command in below playbooks.

---
- name: Service Status
gather_facts: False
tasks:
- name: Check Service Status (Linux)
shell: pgrep "{{ proc_name }}"
register: service_status
ignore_errors: yes
debug: var=service_status.rc`
0
Naveen Goyal On
ansible-playbook release.yml --extra-vars "username=hello password=bye"

#you can now use the above command anywhere in the playbook as an example below:
tasks:
- name: Create a new user in Linux
shell: useradd -m -p {{username}} {{password}}"
3
OpenITeX On

For some reason none of the above Answers worked for me. As I need to pass several extra vars to my playbook in Ansbile 2.2.0, this is how I got it working (note the -e option before each var):

ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2
0
samnoon On

In Ansible, we can define variables when running our playbook by passing variables at the command line using the --extra-vars (or -e) argument.

Bellow are some ways to pass variables to an Ansible playbook in the command line:

Method 1: key=value format

ansible-playbook site.yml --extra-vars "arg1=demo1 arg2=demo2"

Method 2: JSON string format

ansible-playbook site.yml --extra-vars '{"arg1":"demo1","arg2":"demo2"}'

The site.yml playbook will be:

---

- name: ansible playbook to print external variables
  hosts: localhost
  connection: local

  tasks:
  - name: print values
    ansible.builtin.debug:
      msg: "variable1 = {{ arg1 }}, variable2 = {{ arg2 }}"
    when: arg1 is defined and arg2 is defined
      

Method 3: Read from an external JSON file

If you have a lot of special characters, use a JSON or YAML file containing the variable definitions.

ansible-playbook site.yml --extra-vars "@vars.json"

The vars.json file:

{
   arg1: "demo1",
   arg2: "demo2"
}
0
user164328 On

This also worked for me if you want to use shell environment variables:

ansible-playbook -i "localhost," ldap.yaml --extra-vars="LDAP_HOST={{ lookup('env', 'LDAP_HOST') }} clustername=mycluster env=dev LDAP_USERNAME={{ lookup('env', 'LDAP_USERNAME') }} LDAP_PASSWORD={{ lookup('env', 'LDAP_PASSWORD') }}"

0
Nitesh Jain On
 s3_sync:
      bucket: ansible-harshika
      file_root: "{{ pathoftsfiles  }}"
      validate_certs: false 
      mode: push
      key_prefix: "{{ folder }}"

here the variables are being used named as 'pathoftsfiles' and 'folder'. Now the value to this variable can be given by the below command

sudo ansible-playbook multiadd.yml --extra-vars "pathoftsfiles=/opt/lampp/htdocs/video/uploads/tsfiles/$2 folder=nitesh"

Note: Don't use the inverted commas while passing the values to the variable in the shell command