【问题标题】:Abort execution of remaining task if certain condition is failed如果某些条件失败,则中止执行剩余任务
【发布时间】:2014-03-31 10:12:36
【问题描述】:

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

因此,我不想跳过剩余的任务,而是想显示错误消息并停止执行 ansible playbook。

假设我在命令下运行

$ ansible-playbook playbook.yml -e "param1=value1 param2=value"

我的剧本是这样的:-

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.

正如我在上次任务评论中提到的那样。我正在执行 10 多个基于 validParams 和 param1 不同值的任务。我在这里需要什么 如果validParams 未定义,则中止所有执行并显示错误消息。

有没有什么有效的方法来做到这一点。请给我建议。

【问题讨论】:

    标签: ansible ansible-playbook


    【解决方案1】:

    你可以使用

    它会伴随这样的事情

            #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
    

    【讨论】:

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

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

    所以

    元:end_play

    以非失败状态停止剧本

    【讨论】:

    • 注意,这将停止所有主机的执行:“end_play(在 Ansible 2.2 中添加)导致播放结束而不会失败主机。请注意,这会影响所有主机。”跨度>
    • @reto 我想你的意思是说end_host,它是在 Ansible 2.8 中添加的。它会导致播放仅针对当前主机而结束,并且不会失败。文档:docs.ansible.com/ansible/latest/collections/ansible/builtin/…
    • 感谢您的提示,@sudosoul ====> 啊,从 ansible 2.8 开始,有一个新选项 end_host这似乎可以满足我们的需求”
    【解决方案3】:

    Ansible >= 2.0 有一个block feature,允许您对任务进行逻辑分组。这允许您将 when 应用于一组任务。

    this 与 fail 或 assert 模块之间的主要区别在于任务没有被标记为失败;它只是被跳过了。这是否更好取决于您的用例。例如,我有一些写入日志的任务,稍后会解析失败;如果只记录“真实”的失败条件,这样做会更容易。

    示例代码:

    - 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 2011-09-17
      • 2015-02-03
      • 1970-01-01
      • 2020-03-23
      • 2022-01-13
      • 2012-07-12
      相关资源
      最近更新 更多