使用 ansible 验证 firewalld 配置

Validate firewalld config with ansible

提问人:lonix 提问时间:5/20/2023 更新时间:5/22/2023 访问量:111

问:

我正在使用 ansible 配置 firewalld。

lineinfile 模块有一个参数,我想用它来验证我的配置。validate

我试过了这个:

- name: config firewalld
  become: true
  ansible.builtin.lineinfile:
    path: /etc/firewalld/firewalld.conf
    regexp: "^#?FirewallBackend"
    line: "FirewallBackend=iptables"
    state: present
    validate: firewall-cmd --check-config         # <--------------

但是我收到一个 ansible 错误:

validate 必须包含 %s:firewall-cmd --check-config

这是因为它需要文件 () 的路径。%s

我查阅了文档以找到指定配置文件路径的方法,但找不到任何东西。--check-config

有没有办法做到这一点?我可以运行一个原始的,但我希望有一种原生的 ansible 方法可以做到这一点。sudo firewall-cmd --check-config

Linux Ansible 防火墙

评论

1赞 lonix 5/21/2023
我怀疑这是不可能的,所以我向存储库添加了一个功能请求。如果您也想要此功能,请投赞成票。
2赞 Zeitounator 5/21/2023
还可以将方案应用于更复杂的验证

答:

0赞 lonix 5/22/2023 #1

存储库的详细信息来看,这似乎不可能用 ansible 干净地完成。因此,这里有一个解决方法:

- name: modify config
  become: true
    # ...
  register: result1

- name: modify config
  become: true
    # ...
  register: result2

- name: modify config
  become: true
    # ...
  register: result3

- name: validate config
  become: true
  command: firewall-cmd --check-config              
  when: result1 is changed or result2 is changed or result3 is changed
  notify: "reload firewalld"