You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible Rhel-system-roles-firewalld始终尝试安装firewalld求助

解决无网络环境下RHEL防火墙角色强制安装firewalld的问题

核心问题

使用rhel-system-roles-1.23.0-2.21.el8.noarch中的redhat.rhel_system_roles.firewall角色时,即使尝试覆盖__firewall_packages_base变量,角色仍会触发firewalld安装流程,在无网络环境下因无法获取repo元数据失败。

可行解决方案

1. 指定已存在的防火墙后端

如果系统已部署其他防火墙(如iptables),直接通过firewall_backend变量指定后端类型,角色会跳过firewalld的安装逻辑:

- name: Include firewall role
  include_role:
    name: redhat.rhel_system_roles.firewall
  vars:
    firewall_backend: iptables
    firewall:
      - service: ssh
        state: enabled

2. 禁用角色的包安装任务

角色内部通过__firewall_install_packages变量控制是否执行包安装步骤,直接将其设为false可彻底跳过安装流程(前提是系统已预安装firewalld):

- name: Include firewall role
  include_role:
    name: redhat.rhel_system_roles.firewall
  vars:
    __firewall_install_packages: false
    firewall:
      - service: ssh
        state: enabled

3. 离线预安装firewalld包

若必须使用firewalld后端,先在有网络的同版本RHEL系统下载依赖包,再离线安装:

  1. 下载包到本地目录:
    yum install --downloadonly --downloaddir=/tmp/firewalld-packages firewalld
    
  2. 将包传输到离线机器,执行本地安装:
    rpm -ivh /tmp/firewalld-packages/*.rpm
    

完成后再执行防火墙角色,不会触发安装请求。

为什么覆盖__firewall_packages_base无效

角色的安装任务逻辑不仅依赖包列表变量,还会根据firewall_backend的检测结果判断是否需要安装firewalld。单纯清空包列表只会让包管理器尝试安装空集合,但仍会触发repo元数据刷新,导致无网络环境下报错。

内容的提问来源于stack exchange,提问作者Etienne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:07:32