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系统下载依赖包,再离线安装:
- 下载包到本地目录:
yum install --downloadonly --downloaddir=/tmp/firewalld-packages firewalld - 将包传输到离线机器,执行本地安装:
rpm -ivh /tmp/firewalld-packages/*.rpm
完成后再执行防火墙角色,不会触发安装请求。
为什么覆盖__firewall_packages_base无效
角色的安装任务逻辑不仅依赖包列表变量,还会根据firewall_backend的检测结果判断是否需要安装firewalld。单纯清空包列表只会让包管理器尝试安装空集合,但仍会触发repo元数据刷新,导致无网络环境下报错。
内容的提问来源于stack exchange,提问作者Etienne
相关产品推荐
相关产品推荐

