首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果某些条件失败,则中止剩余任务的执行

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

Stack Overflow用户
提问于 2014-03-31 18:12:36
回答 3查看 79.3K关注 0票数 47

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

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

假设我在下面的命令下运行

代码语言:javascript
复制
$ ansible-playbook playbook.yml -e "param1=value1 param2=value"

我的剧本是这样的:

playbook.yml:-

代码语言:javascript
复制
---
    - 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多个基于validParamsparam1不同值的任务。如果validParams未定义,则中止所有执行并显示错误消息。

有没有什么有效的方法来做到这一点。请推荐我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-31 19:50:16

您可以使用

它会伴随着类似这样的东西。

代码语言:javascript
复制
        #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
票数 67
EN

Stack Overflow用户

发布于 2017-11-06 23:50:53

因此,在Ansible 2.2+中有一个元模块:http://docs.ansible.com/ansible/latest/meta_module.html

所以

元数据: end_play

以非失败状态停止剧本

票数 26
EN

Stack Overflow用户

发布于 2017-10-03 21:13:51

Ansible >= 2.0有一个block feature,它允许你对任务进行逻辑分组。这使您可以将时间应用于一组任务。

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

示例代码:

代码语言:javascript
复制
- 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"
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22758925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档