49

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

因此,我不想跳过剩余的任务,而是想显示错误消息并停止执行 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未定义我在这里需要的内容,则中止所有执行并显示错误消息。

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

4

3 回答 3

68

您可以使用

它会伴随着这样的事情

        #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
于 2014-03-31T11:50:16.300 回答
26

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

所以

元:end_play

以非失败状态停止剧本

于 2017-11-06T15:50:52.537 回答
11

Ansible >= 2.0 有一个块功能,允许您对任务进行逻辑分组。这允许您将时间应用于组任务。

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

示例代码:

- 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"
于 2017-10-03T13:13:51.187 回答