如果ansible中的rc==0,则运行处理程序播放并退出播放

如果ansible中的rc==0,则运行处理程序播放并退出播放,ansible,Ansible,嗨,有没有一种方法可以运行处理程序播放,然后在rc==0时退出播放。它只能使用failed_when退出播放,如果rc!=0我无法让notify:Service Guard执行。使用了其他方法,如创建2个play notify和exit no luck - name: Exit SG server from play command: /usr/local/cmcluster/bin/cmversion register: sg_check notify: Service Guard

嗨,有没有一种方法可以运行处理程序播放,然后在rc==0时退出播放。它只能使用failed_when退出播放,如果rc!=0我无法让notify:Service Guard执行。使用了其他方法,如创建2个play notify和exit no luck

- name: Exit SG server from play
  command: /usr/local/cmcluster/bin/cmversion
  register: sg_check
  notify: Service Guard
  failed_when: sg_check.rc == 0
这是我尝试过的新代码

- name: Check if Service Gurad then exit
  command: /usr/local/cmcluster/bin/cmversion
  register: sg_check
  notify: Service Guard
  changed_when: sg_check.rc == 0
  ignore_errors: true
- meta: end_play
  when: sg_check.rc == 0
但我明白了:

错误!条件检查“sg_check.rc==0”失败。错误为:计算条件时出错(sg\u check.rc==0):“sg\u check”未定义

错误似乎出现在“/home/ansible/linuxpatchingv2/roles/applyPatch/tasks/main.yml”中:第9行第3列,但可能是 根据确切的语法问题,在文件中的其他位置

令人不快的一行似乎是:

忽略错误:true

  • 梅塔:结束比赛 ^这里
Q:“运行处理程序播放,如果rc==0,则退出播放”

答:这不可能在一个任务中完成,因为一个任务不能同时被
更改
失败
。这两项行动必须分开。例如,在下面的剧本中,命令将成功,通知处理程序,并结束剧本

shell>cat pb.yml
-主机:本地主机
收集事实:错误
任务:
-命令:“{cmd | default('/bin/true')}”
寄存器:sg_check
通知:服务警卫
更改时:sg_check.rc==0
忽略错误:true
-梅塔:结束比赛
时间:sg_check.rc==0
-调试:
msg:继续吗
处理程序:
-姓名:保安
调试:
消息:通知服务守卫
给出(节略)

shell>ansible剧本pb.yml
...
正在运行的处理程序[服务守卫]****
确定:[本地主机]=>
消息:通知服务守卫
重演****
localhost:确定=2更改=1不可访问=0失败=0跳过=0获救=0忽略=0
如果命令失败,相同的剧本将继续。比如说

shell>ansible playbook pb.yml-e“cmd=/bin/false”
播放[本地主机]****
任务[命令]****
致命:[localhost]:失败!=>更改=错误
命令:
-/bin/false
增量:“0:00:00.003035”
完:2020-08-2409:33:22.039762
msg:非零返回码
rc:1
开始:“2020-08-2409:33:22.036727”
stderr:'
标准线路:
标准输出:“”
标准输出线:
…忽略
任务[调试]****
确定:[本地主机]=>
msg:继续吗
重演****
localhost:ok=2已更改=0不可访问=0失败=0跳过=0已获救=0已忽略=1

我无法重现“错误”。如果我将其放在角色任务中会有区别吗?我想这就是为什么你不能重现错误,因为我的错误在角色中?