使用ansible配置firewalld与系统事实

时间:2018-01-18 17:26:17

标签: ansible firewalld

我有以下游戏:

- 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"
}

当“source”的值来自“IP_ADDRESS.stdout”的值时,会发生错误。 IP_ADDRESS.stdout的结果在ip地址的末尾添加了一个空格,导致失败。当我“硬编码”它的IP地址时它起作用。

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

由于

2 个答案:

答案 0 :(得分:0)

您可以应用trim过滤器:

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

答案 1 :(得分:0)

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