Hi,
I want to use variable in when statement, for example:
- include: some_playbook.yml
when: “{{ SOME_VARIABLE }}” == “true”
where:
SOME_VARIABLE - is given as false/true via --extra-vars
Unfortunately I get error:
ERROR: Syntax Error while loading YAML script, run_soak_test.yaml
Note: The error may actually appear before this position: line 3, column 26
- include: some_playbook.yml
when: “{{ SOME_VARIABLE }}” == “true”
^
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:
with_items:
Should be written as:
with_items:
Do you know what’s the reason and what’s the workaround?
Thanks in advance,
Wojtek
Hi Wojtek
The error you are getting is due to inconsistent quoting. You may also need to cast your variable. Try one of these:
- include: some_playbook.yml
when: "{{ some_variable | bool }} == True"
or shorter:
- include: some_playbook.yml
when: "{{ some_variable | bool }}"
See http://docs.ansible.com/YAMLSyntax.html#gotchas and http://docs.ansible.com/playbooks_variables.html#other-useful-filters for more details.
Regards
Tom
Thanks Tom. It worked pefrect.
But I faced another issue with including tasks.
I have the file tasks.yml with two tasks, I tagged them as below:
- name: Perform action - FULL
shell: run_script_full.py
tags:
- full
- name: Perform action - BASIC
shell: run_script_basic.py
tags:
- basic
In my main playbook I want to inlcude them like below:
- hosts: controller
user: ansuser
tasks:
- include: tasks.yml tags=full
when: “‘{{ LEVEL }}’ == ‘full’”
- include: tasks.yml tags=basic
when: “‘{{ LEVEL }}’ == ‘basic’”
I run ansible with command:
ansible-playbook main_playbook.yml --extra-vars=“LEVEL=basic”. My point is to execute only task with tagged as “basic” so I’d like main script to:
- skip first include statement
- execute tasks.yml in second include statement but only second one (first is tagged as full so requirenments are not met).
Is it possible to achive this way?
Regards,
Wojtek
W dniu wtorek, 13 stycznia 2015 09:29:08 UTC+1 użytkownik Wojciech Korzenny napisał:
The inclusion of tagged tasks doesn’t work like you’re expecting in your example. That will simply tag all tasks in the included file. It won’t include the tasks that are tagged like that. You want something like:
`
cat hosts
[localhost]
127.0.0.1
cat playbook.yml
Cheers Dan for your answer.
It works but it’s not exactly what I want to achieve. I tried one more configruation using tags but still doesn’t work as I expect.
I have main playbook (test1.yml) with only one include:
- include: test2.yml tags=“{{ TEST_LEVEL }}”
Playbook test2.yml looks like below:
-
hosts: controller
user: ansuser
tasks:
-
name: Test task 1
shell: ‘echo 1’
tags:
-
test1
-
hosts: controller
user: ansuser
tasks:
-
name: Test task 2
shell: ‘echo 2’
tags:
-
test2
I’d like to run main playbook with extra-vars where I set TEST_LEVEL, like:
ansible-playbook examples/test1.yml --extra-vars=“TEST_LEVEL=test2”
and value of TEST_LEVEL to be a tag for choosing tasks from test2.yml playbook.
For now it executes all tasks (whatever value for TEST_LEVEL I choose). Is there any typo/wrong quotas etc.in my playbook or I just try to use something wrong way?
Regards,
Wojtek
W dniu wtorek, 13 stycznia 2015 09:29:08 UTC+1 użytkownik Wojciech Korzenny napisał:
Hi, I got what you said. However, I must repeat myself: passing tags to the include task will tag all tasks in the included file, it will NOT call ONLY the tasks that have that specific tag.