使用Chef Python食谱为我的虚拟环境指定不同的Python版本
我正在尝试使用Chef在一个节点上安装虚拟环境,具体是在一个运行Ubuntu 11.10的虚拟机里,使用的是opscode的Python食谱。我特别使用应用程序的配方来为Django和Gunicorn进行设置。
对于python_virtual这个资源,默认设置是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
那么,正确的语法应该是什么样的呢?
3 个回答
0
你可能需要提供Python解释器的完整路径:
:interpreter => "/usr/bin/python2.7"
1
我很确定,你不能在不改变资源本身的情况下,去修改一个资源的默认值。可能这不是你想要的答案。你可能需要在每次使用这个资源的时候,明确指定你想要的覆盖值。
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"