使用 Ansible 和系统事实配置防火墙



我有以下玩法:

- command: "hostname -I"
  register: IP_ADRESSS
  changed_when: False
- firewalld:
    interface: eth0
    state: enabled
    permanent: yes
    zone: public
    source: {{ IP_ADDRESS.stdout }}
  notify: "RESTART FIREWALL"

剧作结果如下:

fatal: [test-server]: FAILED! => {
     "changed": false,
     "invocation": {
         "module_args": {
         "immediate": false,
         "interface": "eth0",
         "masquerade": null,
         "offline": null,
         "permanent": true,
         "port": null,
         "rich_rule": null,
         "service": null,
         "source": "10.0.0.5 "
         "state": "enabled"
         "timeout": 0,
         "zone": "public"
         }
     },
  "msg": "ERROR: Exception caught: org.fedoraproject.FirewallD1.Exception: INVALID_ADDR: 10.0.0.5  Permanent operation"
}

当"源"的值来自"IP_ADDRESS.stdout"的值时,会发生错误。 IP_ADDRESS.stdout 的结果在 IP 地址的末尾增加了一个空格,它会导致失败。当我"硬编码"IP地址时,它可以工作。

任何人都可以指导我如何更正标准输出吗?

谢谢

您可以应用修剪过滤器:

source: "{{ IP_ADDRESS.stdout | trim }}"

使用主机名 -I 可能会导致另一个问题,因为它返回服务器上的每个 IP。另一种选择是使用事实ansible_default_ipv4.address,这将只返回一个 IP。

相关内容

  • 没有找到相关文章

最新更新