Ansible 在多个条件下运行playbook

Ansible 在多个条件下运行playbook,ansible,Ansible,我已经写了一个剧本,如果任务成功,它会运行处理程序。现在我想使用一些类型条件,如果上面的任务失败,那么运行不同的处理程序。就像简单的IF-else语句一样 当前剧本 tasks: - name: checking file format command: named-checkzone example.com /var/named/example.com notify: service handlers: - name: "ser

我已经写了一个剧本,如果任务成功,它会运行处理程序。现在我想使用一些类型条件,如果上面的任务失败,那么运行不同的处理程序。就像简单的IF-else语句一样

当前剧本

  tasks:  
    - name: checking file format
      command: named-checkzone example.com /var/named/example.com
      notify: service


  handlers:
    - name: "service reload"
      command: rndc reload example.com
      listen: "service"
现在,如果主任务失败,我想在配置文件中省略文件名

Q:“1)如果任务成功,则运行处理程序。2)如果任务失败,则运行另一个处理程序。”

答:简单的方法是在任务更改时通知处理程序。当任务失败时,状态为failed not Change,并且不会通知处理程序

在这种情况下,您不关心命令是成功还是失败。应始终通知处理人员。这可以通过显式组合
忽略错误、失败时和更改时来实现

通知两个处理程序
服务成功
服务失败
。处理程序中的条件将决定运行哪个处理程序。比如剧本

shell>cat playbook.yml
-主机:本地主机
任务:
-命令:“{{cmd}}”
寄存器:命名的\u checkzone\u结果
忽略错误:true
当:false时失败
更改时间:true
通知:
-服务成功
-服务失败
处理程序:
-名称:服务成功
调试:
msg:服务成功
时间:命名为\u checkzone\u result.rc==0
-名称:服务失败
调试:
消息:服务失败
当:命名为_checkzone_result.rc==1
如果命令成功,则给出(节略)

shell>ansible playbook playbook.yml-e“cmd=true”
任务[命令]****
已更改:[localhost]
正在运行处理程序[服务成功]****
确定:[本地主机]=>
msg:服务成功
正在运行处理程序[服务失败]****
正在跳过:[localhost]
如果命令失败,则给出(节略)

shell>ansible playbook playbook.yml-e“cmd=false”
任务[命令]****
已更改:[localhost]
正在运行处理程序[服务成功]****
正在跳过:[localhost]
正在运行处理程序[服务失败]****
确定:[本地主机]=>
消息:服务失败
Q:“1)如果任务成功,则运行处理程序。2)如果任务失败,则运行另一个处理程序。”

答:简单的方法是在任务更改时通知处理程序。当任务失败时,状态为failed not Change,并且不会通知处理程序

在这种情况下,您不关心命令是成功还是失败。应始终通知处理人员。这可以通过显式组合
忽略错误、失败时和更改时来实现

通知两个处理程序
服务成功
服务失败
。处理程序中的条件将决定运行哪个处理程序。比如剧本

shell>cat playbook.yml
-主机:本地主机
任务:
-命令:“{{cmd}}”
寄存器:命名的\u checkzone\u结果
忽略错误:true
当:false时失败
更改时间:true
通知:
-服务成功
-服务失败
处理程序:
-名称:服务成功
调试:
msg:服务成功
时间:命名为\u checkzone\u result.rc==0
-名称:服务失败
调试:
消息:服务失败
当:命名为_checkzone_result.rc==1
如果命令成功,则给出(节略)

shell>ansible playbook playbook.yml-e“cmd=true”
任务[命令]****
已更改:[localhost]
正在运行处理程序[服务成功]****
确定:[本地主机]=>
msg:服务成功
正在运行处理程序[服务失败]****
正在跳过:[localhost]
如果命令失败,则给出(节略)

shell>ansible playbook playbook.yml-e“cmd=false”
任务[命令]****
已更改:[localhost]
正在运行处理程序[服务成功]****
正在跳过:[localhost]
正在运行处理程序[服务失败]****
确定:[本地主机]=>
消息:服务失败