Chef - 将 env 变量与使用 bash 资源创建的包资源一起使用

Chef - use env variable with package resource what created with bash resource

我将从 git 提交更改的项目并基于此安装包。 这是我的代码

bash 'get_project' do
  code <<-EOH
  filelist=$(git diff-tree --no-commit-id --name-only -r )
  for file in ${filelist[@]}; do
    project=$(echo $file | cut -d "/" -f1)
    projectList+=($project)
  done
  for changedProject in $(echo "${projectList[@]}" | sort | uniq); do
    INSTALLABLE_RPM=application-$changedProject
  done
  EOH
  environment 'INSTALLABLE_RPM' => '$INSTALLABLE_RPM'
end

zypper_package ENV['INSTALLABLE_RPM']

我的想法是用 bash 生成 INSTALLABLE_RPM 变量并用 zypper 安装包。不幸的是它不起作用。 zypper_package 资源无法识别。

我运行没主意:-(

bash resourceenvironment属性是提供现有的环境变量来执行bash命令(s ).

(These variables must exist for a command to be run successfully.)

在此处指定环境变量不会在 shell 中设置它们。此外,在 code 块中,您将无法访问 Ruby 的 ENV 哈希。

可能没有直接的方法来做到这一点。其中一个选项是将这个包(列表?)写入一个文件。然后我们可以将文件内容读入变量,并与zypper_package资源一起使用。

示例:

既然你在Shell中使用了for循环,我相信你得到了一个包列表,所以我正在考虑pkg_list作为数组。我已将 compile_time 设置为 true,因为 bash 资源下面的变量赋值将 only 运行 在编译期间。

bash 'get_project' do
  code <<-EOH
  # your code as-it-is
  for changedProject in $(echo "${projectList[@]}" | sort | uniq); do
    echo "application-$changedProject" >> /tmp/rpm_packages
  done
  EOH
  compile_time true
end

pkg_list = File.read('/tmp/rpm_packages').split

zypper_package pkg_list

# remove the file for good measure :)
file '/tmp/rpm_packages' do
  action :delete
end