如何在Chef中获取RedHat已安装RPM版本以配置目录权限?
如何在Chef Recipe中不使用rpm命令获取已安装RPM版本并定位配置路径
我们需要获取已安装RPM的版本,以便通过Chef Recipe对软件内特定子文件夹和文件设置合适的用户权限及修改内容。
外部供应商提供的软件包含带版本号的子文件夹,例如:
v22.2.0.11
当供应商发布新版本时,我们会在本地Yum仓库添加对应版本的RPM,现有Chef Recipe使用标准package资源更新软件。但Cookbook无法提前知晓新版本信息,且RPM更新时,若旧版本目录(如v22.2.0.11)存在新增内容(如日志文件)则不会被删除,导致出现多个版本目录,示例如下:
ls -rlt total 0 drwxr-x---. 2 user_adm esmgroup 6 Apr 12 13:53 v22.2.0.11 drwxr-x---. 2 user_adm esmgroup 6 Apr 12 13:53 v23.4.101.345 -rw-r-----. 1 user_adm esmgroup 0 Apr 12 13:54 server.jar -rw-r-----. 1 user_adm esmgroup 0 Apr 12 13:54 server_start.sh
注:上述文件为示例虚构内容。
执行rpm -qa可看到类似如下内容:
my-software-23.4.101.345-1.noarch (or equivalent)
原本可通过cut命令提取版本号,例如rpm -qa | grep <rpm name> | cut -d'-' -f3,但内部自动化代码校验流程禁止使用rpm命令,因此需通过Chef实现该功能。
当前被限制的代码如下:
execute 'Create Version File' do command "rpm -qa | grep #{rpm_name} | cut -d'-' -f3 > /tmp/ver_data" creates '/tmp/ver_data' end installed_version = if !node['server']['use_latest_rpm'] && !node['server']['version'].nil? node['server']['version'].split('-').first else `cat '/tmp/ver_data' | tr -d '\\n'` end # add the "v" part for folder name info ver_dir = "v#{installed_version}" config_dir = "#{server_base_dir}/#{ver_dir}/conf" config_xml = "#{config_dir}/config.xml"
需要解决的问题:在无法使用rpm -q命令的情况下,识别未来新增RPM对应的config_dir和config_xml路径。
内容的提问来源于stack exchange,提问作者Geoff Harrison
相关产品推荐
相关产品推荐

