robinhoodjr
robinhoodjr

Reputation: 465

Using variables from one yml file in another playbook

I am new to ansible and am trying to use variables from a vars.yml file in a playbook.yml file.

vars.yml

---
- firstvar:
    id: 1
    name: One
- secondvar:
    id: 2
    name: two

playbook.yml

---
- hosts: localhost

  tasks:
  - name: Import vars
    include_vars:
      file: ./vars.yml
      name: vardata

  - name: Use FirstVar
    iso_vlan:
      vlan_id: "{{ vardata.firstvar.id }}"
      name: "{{ vardata.firstvar.name }}"
      state: present

  - name: Use Secondvar
    iso_vlan:
      vlan_id: "{{ vardata.secondvar.id }}"
      name: "{{ vardata.secondvar.name }}"
      state: present

So you can see here I am treating the imported variable data, which is stored in vardata, as object and trying to call each of them in other tasks. I am pretty sure these imported vars at the first task are only available in that very task. How can I use that in other tasks? It would output as variables undefined for each tasks. Any input is appreciated.

Upvotes: 5

Views: 9690

Answers (2)

lsc
lsc

Reputation: 13

On top of the error you made when declaring the variables (syntax is very important), you can also define include_vars: ./vars.yml such that you can just call {{ firstvar.name }}, {{ firstvar.id }} immediately. Much more leaner/shorter.

Upvotes: 0

kenlukas
kenlukas

Reputation: 3963

Your vars.yml file isn't formatted correctly.

Try this:

---

firstvar:
  id: 1
  name: One
secondvar:
  id: 2
  name: two

I used this to test it:

---
- hosts: localhost

  tasks:
    - name: Import vars
      include_vars:
        file: ./vars.yml
        name: vardata

    - name: debug
      debug:
        msg: "{{ vardata.firstvar.name }}"

    - name: more debug
      debug:
        msg: "{{ vardata.secondvar.id }}"

Upvotes: 7

Related Questions