Thank you for your answer.  So basically I need to run 2 tasks *BUT*

If I have a list of folders that needs to be created and i will use 
with_items  - As I know, the first task will run on all folders and the MSG 
task will only verify the register of the last folder. 

Basically what I'm askingת is there a way to run 2 tasks (one by one) on 
the same item and not running each task in parallel for all items  


On Friday, March 6, 2020 at 8:55:34 AM UTC+2, Vladimir Botka wrote:
>
> On Thu, 5 Mar 2020 22:09:49 -0800 (PST) 
> דודו דודו <[email protected] <javascript:>> wrote: 
>
> > I have a task that create a folder on HDFS storage. 
> > If the folder exists I wish to show a message 
> > 
> > - hosts: gw 
> >   become: true 
> >   become_user: hdfs 
> >   tasks: 
> >    - name: create folder in HDFS 
> >      shell: hadoop dfs -mkdir /tmp/dudu 
> >      ignore_errors: yes 
> >      register: result 
> >      when: result is failed 
> >      fail: 
> >        msg: folder exists 
>
> It's not possible to use two modules (shell and fail) in one task. There 
> are 
> couple of scenarios how to handle this case. 
>
> 1) Show a message and fail (fatal) 
>
>    tasks: 
>     - name: create folder in HDFS 
>       command: hadoop dfs -mkdir /tmp/dudu 
>       ignore_errors: yes 
>       register: result 
>     - fail: 
>         msg: folder exists 
>       when: result is failed 
>
> 2) Show a message and continue 
>
>    tasks: 
>     - name: create folder in HDFS 
>       command: hadoop dfs -mkdir /tmp/dudu 
>       ignore_errors: yes 
>       register: result 
>     - debug: 
>         msg: folder exists 
>       when: result is failed 
>
> 3) Execute the command if the folder does not exist else skip the command, 
>    show a message and continue. Optionally change "debug" to "fail". 
>
>    tasks: 
>     - name: create folder in HDFS 
>       command: 
>         cmd: hadoop dfs -mkdir /tmp/dudu 
>         creates: /tmp/dudu 
>       ignore_errors: yes 
>       register: result 
>     - debug: 
>         msg: "{{ result.stdout }}" 
>       when: not result.changed 
>
> Next options would be to use "block". See "Error Handling In Playbooks" 
>
> https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#error-handling-in-playbooks
>  
>
> As a sidenote, quoting from "shell – Execute shell commands on targets" 
> https://docs.ansible.com/ansible/latest/modules/shell_module.html#notes 
>
>   "If you want to execute a command securely and predictably, it may be 
>   better to use the command module instead. Best practices when writing 
>   playbooks will follow the trend of using command unless the shell module 
> is 
>   explicitly required..." 
>
> quoting from "command – Execute commands on targets" 
> https://docs.ansible.com/ansible/latest/modules/command_module.html#notes 
>
>   "If you want to run a command through the shell (say you are using <, >, 
> |, 
>   etc), you actually want the shell module instead. Parsing shell 
>   metacharacters can lead to unexpected commands being executed if quoting 
> is 
>   not done correctly so it is more secure to use the command module when 
>   possible." 
> -- 
>
> HTH, 
>
>         -vlado 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/7ded6e47-12f5-48fd-826f-63f7bd882a12%40googlegroups.com.

Reply via email to