0

在这里,我试图打印 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"]}

我应该如何修改代码以便我只获得状态?

4

2 回答 2

0

我更喜欢failed_when:用来控制你的输出 rc。Ansible 文档中的更多信息。但你也可以使用ìgnore_errors: true

检查Firewall-cmd 文档中的错误代码以查看哪些代码添加到您的剧本中。

在您的情况下可能会做得很好:

  - name: Check status of firewall
    command: firewall-cmd --state
    register: status
    failed_when:
      - status.rc != 0 
      - status.rc != 252

即使您可以更进一步并使用它failed_when: false来避免命令失败。

于 2018-09-16T17:10:05.130 回答
0

Baptiste Mille-Mathias 建议的 ignore_errors 将允许您继续,但随后您想“调试”{{ status.stderr }},因为 stdout 将为空。

于 2018-09-16T17:27:41.537 回答