【问题标题】:Specify a different Python version for my virtualenv using chef Python cookbook使用 chef Python cookbook 为我的 virtualenv 指定不同的 Python 版本
【发布时间】:2013-03-26 03:37:15
【问题描述】:

我正在尝试使用 Chef 在 ubuntu 11.10 VM 内使用 opscode Python cookbook 的节点上安装 virtualenv。特别是,我正在使用 application 食谱为 Django 和 Gunicorn 执行此操作。

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

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

【问题讨论】:

    标签: python virtualenv chef-infra


    【解决方案1】:

    这是我为使解释器成为 application::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"
    

    【讨论】:

      【解决方案2】:

      我很确定您不能在不实际更改资源的情况下更改资源的默认值。可能不是你想要的答案。您可能需要在使用资源的任何位置指定覆盖值。

      【讨论】:

        【解决方案3】:

        您可能需要将完整路径传递给 python 解释器:

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

        【讨论】:

          猜你喜欢
          • 2010-12-04
          • 2014-12-04
          • 2012-08-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多