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 resource的environment
属性是提供现有的环境变量来执行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
我将从 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 resource的environment
属性是提供现有的环境变量来执行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