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.
