2016-09-22 116 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