当我运行它时,它说成功,但默认界面仍然设置为公共区域。什么给?
- firewalld:
zone: public
interface: "{{ ansible_default_ipv4.interface }}"
permanent: true
immediate: true
state: disabled
- firewalld:
zone: trusted
interface: "{{ ansible_default_ipv4.interface }}"
permanent: true
immediate: true
state: enabled
继 hilly 的答案之后,为了避免 Ansible 在默认区域已设置为您正在设置的区域时报告更改:
- name: Set default zone to 'public'
ansible.builtin.command: firewall-cmd --set-default-zone=public
register: default_zone_set
changed_when:
- '"ZONE_ALREADY_SET" not in default_zone_set.stderr'
我认为firewalld
模块不支持这样设置默认区域。文档说zone
是:
要向 [规则] 添加/删除 [规则] 的防火墙区域
也:
区域事务(创建、删除)可以通过仅使用区域和状态参数"存在"或"不存在"来执行。
我认为这意味着您可以创建/删除区域并在其中添加/删除规则,但不能将区域设置为默认值。这与我看到的使用与 OP 类似的配置的行为一致。
我现在使用command
模块在 Ansible 配置中设置默认区域,例如
- name: Set dmz as default policy
command: firewall-cmd --set-default-zone=dmz
运行此命令后,您是否重新加载了 Firewalld 以获取效果? 我从任务中看到的只是您禁用并启用它。您还可以添加处理程序以在完成 https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#handlers-running-operations-on-change 后重新启动服务。您还应该尝试使用 -vvv 运行以查看输出,并查看它是否达到您的预期。