从Chef CookBook检查Python版本并根据结果安装包



我需要写一个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

相关内容

最新更新