如何使用 Ansible 重新加载 Firewalld 服务?

Ali*_*Ali 6 daemon centos ansible firewalld

我使用 ansible 在 centos 7 中向 firewalld 添加了一些规则。但我必须重新加载 firewalld 守护进程,这样服务才能正常工作。有什么想法吗?

这是我的ansible代码:

- name: Add port to firewalld
  firewalld:
    port: "{{ item }}"
    permanent: yes
    state: enabled
  when: ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux'
  loop:
    - 8080/tcp
    - 8000/tcp
    - 8090/tcp
    - 8040/tcp
Run Code Online (Sandbox Code Playgroud)

San*_*ole 8

首先使用with_items以下端口列表:

- name: Add port to firewalld
  firewalld:
    port: "{{ item }}"
    permanent: yes
    state: enabled
  when: ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux'
  loop:
    - 8080/tcp
    - 8000/tcp
    - 8090/tcp
    - 8040/tcp
Run Code Online (Sandbox Code Playgroud)

如果端口不固定,您还可以使用以下代码输入端口并将其用作变量:

- hosts: localhost
  gather_facts: no
  vars_prompt:
    - name: ports
      prompt: "Enter port(s) number"
      private: no
  tasks:
    - name: add port
      firewalld:
            service: "{{ item }}"
            permanent: yes
            immediate: yes
            state: enabled
      with_items: "{{ ports.split(',') }}"
Run Code Online (Sandbox Code Playgroud)

关于重新加载firewalld,这里提到我们不能使用状态参数重新加载firewalld 所以使用systemd模块如下:

- name: reload service firewalld
  systemd:
    name: firewalld
    state: reloaded
Run Code Online (Sandbox Code Playgroud)


小智 5

firewalld 模块具有立即选项,它在 firewall-cmd cli 工具中执行相同的重新加载。

- name: Add port to firewalld
  firewalld:
    port: "{{ item }}"
    permanent: yes
    state: enabled
    immediate: true
Run Code Online (Sandbox Code Playgroud)