How do I exit Ansible play without error on a condition

前端 未结 6 1649
我在风中等你
我在风中等你 2021-01-31 02:02

I want to exit without an error (I know about assert and fail modules) when I meet a certain condition. The following code exits but with a failure:

  tasks:

           


        
6条回答
  •  粉色の甜心
    2021-01-31 02:22

    In Ansible 2.2, you can use end_play with the meta module:

    - meta: end_play
    

    You can also specify when for conditionally ending the play:

    - meta: end_play
      when: upgrading.stdout == "no"
    

    Note, though, that the task is not listed in the output of ansible-playbook, regardless of whether or not the play actually ends. Also, the task is not counted in the recap. So, you could do something like:

    - block:
        - name: "end play if nothing to upgrade"
          debug:
            msg: "nothing to upgrade, ending play"
    
        - meta: end_play
      when: upgrading.stdout == "no"
    

    which will announce the end of the play right before ending it, only when the condition is met. If the condition is not met, you'll see the task named end play if nothing to upgrade appropriately skipped, which would provide more info to the user as to why the play is, or is not, ending.

    Of course, this will only end the current play and not all remaining plays in the playbook.


    UPDATE June 20 2019:

    As reto mentions in comments, end_play ends the play for all hosts. In Ansible 2.8, end_host was added to meta:

    end_host (added in Ansible 2.8) is a per-host variation of end_play. Causes the play to end for the current host without failing it.

提交回复
热议问题