使用
我需要写一个Chef CookBook,它会根据系统中安装的Python版本安装一些包。
是否可能在Chef recipe中有以下逻辑:
python_version = `python -V` # check python version
if python_version == '2.6.6'
package 'package_a' # install package_a using Chef package resource
elsif python_version == '3.3.5'
package 'package_b' # install package_b using Chef package resource
else
break # stop execution of cookbook
end
提前感谢!
简短的回答是。
你应该用shell_out!('python -V').stdout().chomp()
代替反号。
但是信息已经存在于节点自动属性中,所以您不必调用python -V
:
ohai languages
return:
{
"python": {
"version": "2.7.3",
"builddate": "Jun 22 2015, 19:33:41"
},
"perl": {
"version": "5.14.2",
"archname": "x86_64-linux-gnu-thread-multi"
},
"c": {
"gcc": {
"version": "4.6.3",
"description": "gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) "
}
}
}
所以你应该能够在你的食谱中写:
python_version = node['languages']['python']['version']
if python_version == '2.6.6'
package 'package_a' # install package_a using Chef package resource
elsif python_version == '3.3.5'
package 'package_b' # install package_b using Chef package resource
else
raise # stop execution of cookbook
end
要停止chef运行,需要通过文档
raise
Ohai已经为python版本提供了一个自动属性。您可以这样访问它:
node['languages']['python']['version']
对应的代码在这里。
结果代码如下所示:
if node['languages']['python']['version'].to_f < 3
package "package_a"
else
package "package_b"
end