Using when and not

I have a task to copy two different versions of the same file:

`

  • name: Copy Version A
    copy: …
    when: useCopyA

  • name: Copy Version B
    copy: …
    when: not useCopyA

`

For a playbook that has useCopyA defined as false, Ansible is skipping both tasks.

If I replace “not useCopyA” with “not false”, “Copy Version B” successfully executes with either OK or Changed, so ‘not’ works as I would expect. I have ‘useCopyA’ defined as false in my defaults/main.yml. It is only defined as true in one inventory which I am not using. Any idea on what could be going wrong here?

There was a bug in ansible where when a variable foo is the string
"false" it interprets both "foo" and "not foo" as true.

https://github.com/ansible/ansible/issues/8629

But this bug is for an old version of ansible. Which version are you using?

Using 1.7.3. I don't quote false or true anywhere; just using literal value.

It's probably the bug Michael mentions. Due to playbooks going
through both yaml and jinja and sometimes variabels going through
jinja multiple times, things sometimes end up as strings instead of
the value you expect. One workaround that helps in many cases is to
use the jinja bool filter:

useCopyA>bool

-Toshio