在这里,我正在尝试打印firewall-cmd --state命令的状态,但是引发了致命错误。
name: Check firewall status
hosts: st
tasks:
- name: Check status of firewall
command: firewall-cmd --state
register: status
- name: Print version
debug:
msg: "Status = {{ status.stdout }}"
远程主机中的状态“未运行”。但是没有得到结果。
我得到以下输出
fatal: [borexample.com]: FAILED! => {"changed": true, "cmd": ["firewall-cmd", "--state"], "delta": "0:00:00.189023", "end": "2018-09-16 11:40:17.319482", "msg": "non-zero return code", "rc": 252, "start": "2018-09-16 11:40:17.130459", "stderr": "", "stderr_lines": [], "stdout": "\u001b[91mnot running\u001b[00m", "stdout_lines": ["\u001b[91mnot running\u001b[00m"]}
我应该如何修改代码,以便仅获得状态?
答案 0 :(得分:0)
我更喜欢使用failed_when:
来控制您的输出rc。有关更多信息,请访问Ansible Documentation。但是您也可以使用ìgnore_errors: true
检查Firewall-cmd Documentation中的错误代码,以查看将哪些代码添加到您的剧本中。
在您的情况下可能会做得很好:
- name: Check status of firewall
command: firewall-cmd --state
register: status
failed_when:
- status.rc != 0
- status.rc != 252
即使您可以走得更远,并使用failed_when: false
来避免命令失败。
答案 1 :(得分:0)
巴蒂斯特·米勒·马蒂亚斯(Baptiste Mille-Mathias)建议的ignore_errors可以让您继续,但随后您想“调试” {{status.stderr}},因为在这种情况下,标准输出将为空。