2016-09-22 89 views
1

我需要编写一个Chef CookBook,根据系统中安装的Python版本安装一些软件包。检查Chef CookBook的Python版本并根据结果安装软件包

是否有可能有以下逻辑厨师配方:

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 

预先感谢您!

回答

1

简短的回答是肯定的。

您应该使用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 

要停止厨师奔跑,您需要使用raise作者:the documentation

+0

我可以检查Python3的版本吗?我已经在我的系统Python2和Python3上安装了,但'node ['languages']'只显示了Python2。 – lmtx

+0

@lmtx嗯,厨师不是魔术。按照你最初的想法,它会在后面运行'python -V'。如果你的路径目标是python2,你会得到python2版本。您可以将ohai插件扩展到自定义插件来添加python3条目。但是,如果没有pyenv的版本选择它们,听起来很可能会在脚下射击自己。总而言之,这听起来像一个XY问题,试图找到一些困难的地方,正确的路径将确保目标应用程序具有所需的软件包。 – Tensibai

1

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

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

相应的代码是here

生成的代码可能如下所示:

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

关于'raise',@Tensibai是对的:-) – StephenKing

相关问题