Подтвердить что ты не робот

Прервать выполнение оставшейся задачи, если определенное условие не выполнено

Я хочу прервать выполнение оставшейся задачи, если определенное условие не выполнено. и отобразить правильное сообщение об ошибке.

Итак, вместо пропуска оставшейся задачи я хочу показать сообщение об ошибке и прекратить выполнение доступной пьесы.

Предположим, что я выполняю команду

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

Моя playbook выглядит так: -

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 - undefined, то прервать все выполнение и показать сообщения об ошибках.

Есть ли эффективный способ сделать это. Пожалуйста, предложите мне.

4b9b3361

Ответ 1

Вы можете использовать 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

Ответ 3

Ansible >= 2.0 имеет функцию которая позволяет логически группировать задачи. Это позволяет применить к группе задач команду.

Основное различие между этим и модулем 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"