我有以下玩法:
- 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。