Karan Gaur
Karan Gaur

Reputation: 859

Avoid unused and undefined variable in playbook

I have following data in a variable file

data: [
    {
        service: "ServiceName",
        var2: "file/path/value",
        var3: "{{ check_var }}",
    }, {
        service: "ServiceName",
        var2: "file/path/value",
        var3: "{{ check_var }}",
    }
]

I have two playbooks which require the same data. However one playbook does not require var3.

- debug: msg="{{ item['service'] }} uses - {{ item['var2'] }}"
with_items: "{{ data }}" 

This gives error - "'check_var' is undefined".
TRIED:
I don't want to populate the playbook with bad standards and use
when: check_var is undefined
Or use false dummy data in playbook's vars atrribute. Is there any way around this while maintaining standards. Also the actual data is quite huge so I don't want to repeat it twice for each playbook.

Upvotes: 1

Views: 711

Answers (1)

ceving
ceving

Reputation: 23774

In Ansible data has to be assigned to hosts not to playbooks.

You have to create two host groups. Those hosts, who needs just two variables go into the first group. And those hosts which need 3 variables go into both groups. You can include the hosts of the first group in the second group.

Then you create two group var files. In the first you put 2 variables and in the second the 3rd variable.

By this each host gets the right amount of information. Playbook 1 uses 3 variables and playbook 2 uses just 2 variables.

Update: Minimal example

$ diff -N -r none .
diff -N -r none/check_var.yaml ./check_var.yaml
0a1,4
> ---
> - hosts: localhost
>   tasks:
>     - debug: var=check_var
diff -N -r none/group_vars/myhosts.yaml ./group_vars/myhosts.yaml
0a1
> check_var: "Hello World!"
diff -N -r none/inventory ./inventory
0a1,2
> [myhosts]
> localhost
$ ansible-playbook -i inventory check_var.yaml

PLAY [localhost] ***************************************************************************

TASK [Gathering Facts] *********************************************************************
ok: [localhost]

TASK [debug] *******************************************************************************
ok: [localhost] => {
    "check_var": "Hello World!"
}

PLAY RECAP *********************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0   

Upvotes: 1

Related Questions