Question

I'm trying to use Chef to install a virtualenv on a node using the opscode Python cookbook, inside an ubuntu 11.10 VM. In particular, I'm using the application recipes to do this for Django and Gunicorn.

The default setting for the python_virtual resource is python2.6. I'm trying to specify python2.7 by overriding the default attributes in my roles file, like this:

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

However, this isn't working:

[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

What's the proper syntax for overriding the default value here?

Was it helpful?

Solution

Here's what I did to make the interpreter a parameter from the application::django provider

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"

OTHER TIPS

I'm pretty sure that you can't change the default value for a resource without actually changing the resource. Probably not the answer you wanted. You will likely need to specify your override value where ever you use the resource.

You might need to pass the full path to the python interpreter:

:interpreter => "/usr/bin/python2.7"
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top