如果某些条件失败,则中止执行剩余任务

Roo*_*dra 35 ansible ansible-playbook

如果某些条件失败,我想中止剩余任务的执行.并显示正确的错误消息.

因此,我没有跳过剩余的任务,而是希望显示错误消息并停止执行ansible playbook.

让我们说我在命令之下运行

$ ansible-playbook playbook.yml -e "param1=value1 param2=value"
Run Code Online (Sandbox Code Playgroud)

我的剧本看起来像这样: -

playbook.yml: -

---
    - hosts: local
      user: roop
      gather_facts: no

      vars: {param1: "", param2: ""}

      tasks:

        #check whether param1 defined
        - name: 'Check for valid param1'
          shell: echo {{ param1 }}
          register: isValidParam1
          when: param1 !=""

        #check if param1 is null or invalid  
        - name: 'check if param1 is null or invalid' 
          debug: msg="Please enter correct param1"
          when: param1 == ""

        #check whether param2 defined
        - name: 'Check for valid param2'
          shell: echo {{ param2 }}
          register: isValidParam2
          when: param2 != ""

        #check if param2 is null or invalid  
        - name: 'check if param2 is null or invalid' 
          debug: msg="Please enter correct param2"
          when: param2 == ""  


        #check params is valid and defined
        - name: 'Check for valid params'
          shell: echo "param1={{ param1 }} param2={{ param2 }}
          register: validParams
          when: isValidParam1 is defined and isValidParam2 is defined

        #check if params are invalid then abort below all tasks.  
        - name: 'check if validParams is null or invalid' 
          debug: msg="Please enter correct Params"
          when: validParams is not defined    


         # based on validParams, and different value of param1 more than 
          10 task executing.
Run Code Online (Sandbox Code Playgroud)

正如我在上一篇评论中提到的那样.我基础上执行超过10个任务validParamsparam1不同的价值.这里我需要的validParams是if undefined然后中止所有执行并显示错误消息.

有没有有效的方法来做到这一点.请建议我.

Dom*_*tro 54

你可以使用assert http://docs.ansible.com/assert_module.html或者失败http://docs.ansible.com/fail_module.html

它将伴随着这样的事情

        #check if params are invalid then abort below all tasks.  
        - name: 'check parm is null or invalid' 
          fail: msg="Please enter correct Params"
          when: "param1 is not defined or param2 is not defined " ## whatever condition you want
Run Code Online (Sandbox Code Playgroud)

  • @EddieC.特别提到的问题是:"......我想显示错误信息并停止执行ansible playbook." (5认同)
  • 我不认为这可能是一个解决方案,因为它将任务标记为失败,而我们真正想要的只是跳过。 (2认同)

Flo*_*aun 19

所以在Ansible 2.2+中有元模块:http://docs.ansible.com/ansible/latest/meta_module.html

所以

meta:end_play

以非失败状态停止剧本

  • @reto我认为你的意思是说`end_host`,它是在Ansible 2.8中添加的。它会导致当前主机的游戏结束,并且不会失败。文档:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/meta_module.html (2认同)

hil*_*lsy 6

Ansible> = 2.0具有块功能,允许您对任务进行逻辑分组.这允许您将when应用于一组任务.

它与failassert模块之间的主要区别在于任务未标记为失败; 它只是跳过了.这是否更好取决于您的使用案例.例如,我有一些任务写入日志,后来解析失败; 如果仅记录"真实"故障条件,则更容易执行此操作.

示例代码:

- block:

    # task 1

    # task 2

    # task 3

  when: "param1 is defined or param2 is defined"

# otherwise output a message
- block:

    debug: msg="Missing params"

  when: "param1 is not defined or param2 is not defined"
Run Code Online (Sandbox Code Playgroud)