2012-01-26 59 views
1

我试图使用Chef在节点上使用opscode Python cookbook在Ubuntu 11.10 VM中安装virtualenv。特别是,我正在使用application食谱为Django和Gunicorn做到这一点。使用大厨Python cookbook为我的virtualenv指定不同的Python版本

python_virtual资源的default setting是python2.6。我想通过我的角色文件覆盖默认的属性来指定python2.7,像这样:

override_attributes(
    :authorization => { 
    :sudo => { 
     :users => ["vagrant"], 
     :passwordless => true 
    } 
    }, 
    :python_virtualenv => { 
    :interpreter => "python2.7" 
    } 
) 

但是,这是行不通的:

[Thu, 26 Jan 2012 17:34:31 -0500] FATAL: Chef::Exceptions::ShellCommandFailed: execute[virtualenv --python=python2.6 /home/deploy/shared/env] (/srv/chef/file_store/cookbooks/python/providers/virtualenv.rb line 28) had an error: Chef::Exceptions::ShellCommandFailed: Expected process to exit with [0], but received '3' 
---- Begin output of virtualenv --python=python2.6 /home/deploy/shared/env ---- 
STDOUT: The executable python2.6 (from --python=python2.6) does not exist 

什么是正确的语法用于覆盖这里的默认值?

回答

1

这里就是我所做的,使解释从应用:: Django的提供商参数

diff --git a/cookbooks/application_python/providers/gunicorn.rb b/cookbooks/application_python/providers/gunicorn.rb 
index 08c5925..210e508 100644 
--- a/cookbooks/application_python/providers/gunicorn.rb 
+++ b/cookbooks/application_python/providers/gunicorn.rb 
@@ -27,6 +27,7 @@ action :before_compile do 
    django_resource = new_resource.application.sub_resources.select{|res| res.type == :django}.first 
    gunicorn_install "gunicorn-#{new_resource.application.name}" do 
    virtualenv django_resource ? django_resource.virtualenv : nil 
+ interpreter django_resource.interpreter 
    end 

    if !new_resource.restart_command 
diff --git a/cookbooks/application_python/resources/django.rb b/cookbooks/application_python/resources/django.rb 
index 6429cee..b4d4b38 100644 
--- a/cookbooks/application_python/resources/django.rb 
+++ b/cookbooks/application_python/resources/django.rb 
@@ -30,7 +30,7 @@ attribute :settings_template, :kind_of => [String, NilClass], :default => nil 
attribute :local_settings_file, :kind_of => String, :default => 'local_settings.py' 
attribute :debug, :kind_of => [TrueClass, FalseClass], :default => false 
attribute :collectstatic, :kind_of => [TrueClass, FalseClass, String], :default => false 

def local_settings_base 
    local_settings_file.split(/[\\\/]/).last 
diff --git a/cookbooks/application_python/resources/gunicorn.rb b/cookbooks/application_python/resources/gunicorn.rb 
index 50d3c2b..f68c868 100644 
--- a/cookbooks/application_python/resources/gunicorn.rb 
+++ b/cookbooks/application_python/resources/gunicorn.rb 
@@ -42,3 +42,4 @@ attribute :logfile, :kind_of => String, :default => '-' 
attribute :loglevel, :kind_of => [String, Symbol], :default => :info 
attribute :proc_name, :kind_of => [String, NilClass], :default => nil 
attribute :command, :kind_of => [String, NilClass], :default => "" 
+attribute :interpreter, :kind_of => String, :default => nil 
diff --git a/cookbooks/gunicorn/providers/install.rb b/cookbooks/gunicorn/providers/install.rb 
index 19266ad..67f526c 100644 
--- a/cookbooks/gunicorn/providers/install.rb 
+++ b/cookbooks/gunicorn/providers/install.rb 
@@ -20,6 +20,7 @@ 

action :install do 
    python_virtualenv new_resource.virtualenv do 
+ interpreter new_resource.interpreter 
    action :create 
    end if new_resource.virtualenv 

diff --git a/cookbooks/gunicorn/resources/install.rb b/cookbooks/gunicorn/resources/install.rb 
index 6c7f8b6..f52fe09 100644 
--- a/cookbooks/gunicorn/resources/install.rb 
+++ b/cookbooks/gunicorn/resources/install.rb 
@@ -21,6 +21,7 @@ 
actions :install 

attribute :virtualenv, :kind_of => String, :default => nil 
+attribute :interpreter, :kind_of => String, :default => nil 

def initialize(*args) 
    super 
diff --git a/cookbooks/webplayer/recipes/default.rb b/cookbooks/webplayer/recipes/default.rb 
index 8c812ce..1981c09 100644 
--- a/cookbooks/webplayer/recipes/default.rb 
+++ b/cookbooks/webplayer/recipes/default.rb 
@@ -22,6 +22,11 @@ file "/etc/chef/deploy" do 
    :create_if_missing 
end 

+directory "/root/.ssh" do 
+ owner "root" 
+ group "root" 
+end 
+ 
file "/root/.ssh/config" do 
    owner "root" 
    group "root" 
0

您可能需要的完整路径传递给Python解释:

:interpreter => "/usr/bin/python2.7" 
1

我敢肯定,你不能没有实际改变资源的资源更改默认值。可能不是你想要的答案。在您使用资源的任何地方,您可能需要指定您的覆盖值。

相关问题