Salt pkg.installed未正确检测Solr版本安装问题咨询
Salt软件包安装状态检测机制及你的Solr问题分析
先给你拆解下Salt是怎么检测RHEL/CentOS系统上的软件包安装状态的,再结合你的问题说明原因:
一、Salt pkg.installed的状态检测逻辑(YUM/DNF系统)
Salt的pkg模块在处理yum系统时,会通过以下步骤验证包的安装状态:
- 精确查询已安装包的完整标识:它会调用底层的
rpm或yum命令,获取已安装包的epoch号、版本号、发行版本、架构等完整信息,比如你手动执行yum看到的1:solr-5.5.5.x86_64,其中1:就是epoch号——这个是很多人容易忽略的关键细节。 - 严格匹配目标版本参数:当你在状态里指定
version: 5.5.5时,Salt会把这个字符串和系统中已安装包的完整标识做精确对比。如果两者不一致(比如你漏了epoch号),Salt就会判定该版本未安装,触发安装操作。 - 验证安装结果:安装操作调用yum执行后,yum发现该版本已经存在,返回“已安装”的结果,但Salt会把这个当成安装失败(因为它预期的是“从无到有”安装指定版本,而yum没有执行实际的安装动作),所以最终状态返回
False。
二、针对你的Solr问题的解决办法
你遇到的问题核心就是版本字符串不匹配——Salt状态里的5.5.5没有包含epoch号1:,导致它和系统中已安装的1:solr-5.5.5.x86_64不匹配。解决方法有两种:
- 指定完整的版本标识:修改你的Salt状态,把版本写成带epoch的形式:
solr_install: pkg.installed: - name: solr - fromrepo: {{ repo }} - version: 1:5.5.5 - 先查询完整版本再配置:如果不确定epoch号,可以先在minion上执行Salt命令查询已安装的完整版本:
把返回的完整版本字符串直接填到状态的salt '你的minionID' pkg.version solrversion字段里即可。
补充说明
Salt的pkg模块在检测时,本质是用类似rpm -q --queryformat "%{EPOCH}:%{VERSION}-%{RELEASE}.%{ARCH}\n" solr的命令获取包的精确标识,再和你指定的版本做全字符匹配。只要有任何细节(比如epoch、release号)不一致,就会判定为未安装状态,这也是为了保证状态的精确性——毕竟不同epoch的同名包可能是完全不同的版本分支。
内容的提问来源于stack exchange,提问作者Rebeca Maia
相关产品推荐
相关产品推荐

