Problem with conditionals restricting certain tasks

26 views
Skip to first unread message

Dave Florek

unread,
Sep 27, 2017, 12:52:40 PM9/27/17
to Ansible Project
Hi,

Just had one more question. Is there a way to stop an Ansible playbook or set of lines from executing if a variable matches a specific text? I saw the Ansible conditionals documentation, however it doesn't provide good examples on how to achieve this with a "when:" statement nor does it tell where would be best to insert these conditionals to prevent the specific lines from executing.

Here's my script

---
- hosts: all

  become
: yes

  vars_prompt
:
   
- name: "new_user"
     prompt
: "What is the name of the new user?"
     
when: new_user != "root"

  tasks
:
   
- name: some function
     command
: .....
   
   
- name: another function
     command
: .....
 

Do I tack the "when:" conditional on at the end of the vars_prompt: or after each "command:" function below that to stop the commands from being run?

Kai Stian Olstad

unread,
Sep 27, 2017, 1:13:23 PM9/27/17
to ansible...@googlegroups.com
On 27. sep. 2017 18:52, Dave Florek wrote:
> Hi,
>
> Just had one more question. Is there a way to stop an Ansible playbook or
> set of lines from executing if a variable matches a specific text? I saw
> the Ansible conditionals documentation
> <http://docs.ansible.com/ansible/latest/playbooks_conditionals.html>,
> however it doesn't provide good examples on how to achieve this with a
> "when:" statement nor does it tell where would be best to insert these
> conditionals to prevent the specific lines from executing.
>
> Here's my script
>
> ---
> - hosts: all
>
> become: yes
>
> vars_prompt:
> - name: "new_user"
> prompt: "What is the name of the new user?"
> when: new_user != "root"

vars_prompt doesn't support when, only task does.

>
> tasks:
> - name: some function
> command: .....
>
> - name: another function
> command: .....
>
>
> Do I tack the "when:" conditional on at the end of the vars_prompt: or
> after each "command:" function below that to stop the commands from being
> run?

You would need it on each task.

But you can group task together with block: and set the when on the
block. Then Ansible will add when on all the task

Or put all the task in a file, and use include: <file> and add the when
to the include, here too Ansible will add when to each task.


--
Kai Stian Olstad

Dave Florek

unread,
Sep 27, 2017, 3:10:31 PM9/27/17
to Ansible Project
Thanks Kai. For some reason, when I run my playbook though, the Ansible doesn't like how the when: conditional is structured

when: new_user != "root"

fatal: [192.168.1.5]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_args": {"name": "dave3", "when": "new_user != \"root\""}, "module_name": "user"}, "msg": "unsupported parameter for module: when"}

I don't see too many examples where a variable is invoked by when: so, I'm not sure if the syntax somehow is wrong. I tried specifying it as a list as well, but that had no effect:

fatal: [192.168.76.103]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_args": {"name": "dave3", "when": ["new_user != \"root\""]}, "module_name": "user"}, "msg": "unsupported parameter for module: when"}

Kai Stian Olstad

unread,
Sep 27, 2017, 3:28:15 PM9/27/17
to ansible...@googlegroups.com
On 27. sep. 2017 21:10, Dave Florek wrote:
> Thanks Kai. For some reason, when I run my playbook though, the Ansible
> doesn't like how the when: conditional is structured
>
> when: new_user != "root"

This when check if the variable new_user not equal to the string root


> *fatal: [192.168.1.5]: FAILED! => {"changed": false, "failed": true,
> "invocation": {"module_args": {"name": "dave3", "when": "new_user !=
> \"root\""}, "module_name": "user"}, "msg": "unsupported parameter for
> module: when"}*
>
> I don't see too many examples where a variable is invoked by when: so, I'm
> not sure if the syntax somehow is wrong. I tried specifying it as a list as
> well, but that had no effect:


Most when is using variables, and for the Ansible docs about conditional
you posted has several (actually all of them has at least one variable)

But you error messages indicate wrong indentation of when.
This would be easier if you showed your code and not just the error, but
if you look at the link you posted you'll see when is indentation must
be at the same level as the module name.


--
Kai Stian Olstad

Dave Florek

unread,
Sep 27, 2017, 4:02:44 PM9/27/17
to Ansible Project
I see where the issue was. With the when: conditional, doesn't use the brackets and quotes for referencing. It's just the variable name itself. 

Yea, you're right, the place where I defined my when: variable was in the wrong module and not under task. It's working now. Thanks!
Reply all
Reply to author
Forward
0 new messages