从Chef CookBook检查Python的版本并根据结果

时间:2016-09-22 15:06:59

标签: ruby chef

我需要编写一个Chef CookBook,它将根据系统中安装的Python版本安装一些软件包。

是否可以在Chef配方中使用以下逻辑:

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

提前谢谢!

2 个答案:

答案 0 :(得分:2)

简短回答是的。

您应该使用shell_out!('python -V').stdout().chomp()代替反对。

但是信息已存在于节点自动属性中,因此您无需拨打python -V

ohai languages返回:

{
  "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

要停止厨师运行,您需要the documentation

使用raise

答案 1 :(得分:1)

Ohai已经为你提供了python版本的自动属性。您可以按如下方式访问它:

node['languages']['python']['version']

相应的代码为here

结果代码可能如下所示:

if node['languages']['python']['version'].to_f < 3
  package "package_a"
else
  package "package_b"
end