我正在使用Ansible来配置Firewald.

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         # <--------------

但我得到了一个合理的错误:

验证必须包含%S:防火墙-命令--判断-配置

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

我向--check-config咨询了the docs以找到一种方法来指定配置文件的路径,但什么也找不到.

我可以跑sudo firewall-cmd --check-config分,但我希望有一种原生可行的方法.

推荐答案

the repo的细节来看,这看起来不可能用安可普干净利落地做.因此,这里有一个解决方法:

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

Linux相关问答推荐

shell中两个日期的天数差异

C++调试器如何知道如何在源代码和可执行文件之间映射行?

AWK:按第一列匹配两个文件不起作用

在具有不同文件类型的文件夹中编辑多个 xml 文件 - 使用预定顺序

bind(): "无法分配请求的地址"

Rust unix 进程

为什么我的 Docker 进程不断在我的 Raspberry Pi 上重新启动?

我想使用排序命令对第 5 列进行日期排序.但问题是格式不一致,有什么方法可以做到吗?

如何彻底剥离可执行文件

永久反转补丁文件

判断条件是否为假

通过 Linux FrameBuffer 将像素绘制到屏幕上

如何在不重新打印的情况下更新终端中的打印消息

我可以在 Ubuntu 上使用 Homebrew 吗?

/dev/random 非常慢?

如何安排 tcpdump 在特定时间段内运行?

readelf vs. objdump:为什么都需要

如何使用cp从不同目录复制多个文件?

使用 WGET 运行 cronjob PHP

如何限制我网站的 API 用户?