pythonchef-infraengineyard

How would you install a python module with chef?


We're using EngineYard which has Python installed by default. But when we enabled SSL we received the following error message from our logentries chef recipe.

"WARNING: The "ssl" module is not present. Using unreliable workaround, host identity cannot be verified. Please install "ssl" module or newer version of Python (2.6) if possible."

I'm looking for a way to install the SSL module with chef recipe but I simply don't have enough experience. Could someone point me in the right direction?

Resources: Logentries chef recipe: https://github.com/logentries/le_chef

Logentries EY docs: https://logentries.com/doc/engineyard/

SSL Module: http://pypi.python.org/pypi/ssl/


Solution

  • I just wrote a recipe for this, and now am able to run the latest Logentries client on EngineYard. Here you go:

    file_dir = "/mnt/src/python-ssl"
    file_name = "ssl-1.15.tar.gz"
    file_path = File.join(file_dir,file_name)
    uncompressed_file_dir = File.join(file_dir, file_name.split(".tar.gz").first)
    
    directory file_dir do
      owner "deploy"
      group "deploy"
      mode "0755"
      recursive true
      action :create
    end
    
    remote_file file_path do
      source "http://pypi.python.org/packages/source/s/ssl/ssl-1.15.tar.gz"
      mode "0644"
      not_if { File.exists?(file_path) }
    end
    
    execute "gunzip ssl" do
      command "gunzip -c #{file_name} | tar xf -"
      cwd file_dir
      not_if { File.exists?(uncompressed_file_dir) }
    end
    
    installed_file_path = File.join(uncompressed_file_dir, "installed")
    
    execute "install python ssl module" do
      command "python setup.py install"
      cwd uncompressed_file_dir
      not_if { File.exists?(installed_file_path) }
    end
    
    execute "touch #{installed_file_path}" do
      action :run
    end