class Chef::Provider::Package::EasyInstall

Public Instance Methods

candidate_version() click to toggle source
# File lib/chef/provider/package/easy_install.rb, line 108
def candidate_version
   return @candidate_version if @candidate_version

   # do a dry run to get the latest version
   result = shell_out!("#{easy_install_binary_path} -n #{@new_resource.package_name}", :returns=>[0,1])
   @candidate_version = result.stdout[/(.*)Best match: (.*) (.*)$/, 3]
   @candidate_version
end
easy_install_binary_path() click to toggle source
# File lib/chef/provider/package/easy_install.rb, line 54
def easy_install_binary_path
  path = @new_resource.easy_install_binary
  path ? path : 'easy_install'
end
install_check(name) click to toggle source
# File lib/chef/provider/package/easy_install.rb, line 32
def install_check(name)
  check = false

  begin
    # first check to see if we can import it
    output = shell_out!("#{python_binary_path} -c \"import #{name}\"", :returns=>[0,1]).stderr
    if output.include? "ImportError"
      # then check to see if its on the path
      output = shell_out!("#{python_binary_path} -c \"import sys; print sys.path\"", :returns=>[0,1]).stdout
      if output.downcase.include? "#{name.downcase}"
        check = true
      end
    else
      check = true
    end
  rescue
    # it's probably not installed
  end

  check
end
install_package(name, version) click to toggle source
# File lib/chef/provider/package/easy_install.rb, line 117
def install_package(name, version)
  run_command(:command => "#{easy_install_binary_path}#{expand_options(@new_resource.options)} \"#{name}==#{version}\"")
end
load_current_resource() click to toggle source
# File lib/chef/provider/package/easy_install.rb, line 69
def load_current_resource
  @current_resource = Chef::Resource::Package.new(@new_resource.name)
  @current_resource.package_name(@new_resource.package_name)
  @current_resource.version(nil)

  # get the currently installed version if installed
  package_version = nil
  if install_check(module_name)
    begin
      output = shell_out!("#{python_binary_path} -c \"import #{module_name}; print #{module_name}.__version__\"").stdout
      package_version = output.strip
    rescue
      output = shell_out!("#{python_binary_path} -c \"import sys; print sys.path\"", :returns=>[0,1]).stdout

      output_array = output.gsub(/[\[\]]/,'').split(/\s*,\s*/)
      package_path = ""

      output_array.each do |entry|
        if entry.downcase.include?(@new_resource.package_name)
          package_path = entry
        end
      end

      package_path[/\S\S(.*)\/(.*)-(.*)-py(.*).egg\S/]
      package_version = $3
    end
  end

  if package_version == @new_resource.version
    Chef::Log.debug("#{@new_resource} at version #{@new_resource.version}")
    @current_resource.version(@new_resource.version)
  else
    Chef::Log.debug("#{@new_resource} at version #{package_version}")
    @current_resource.version(package_version)
  end

  @current_resource
end
module_name() click to toggle source
# File lib/chef/provider/package/easy_install.rb, line 64
def module_name
  m = @new_resource.module_name
  m ? m : @new_resource.name
end
purge_package(name, version) click to toggle source
# File lib/chef/provider/package/easy_install.rb, line 129
def purge_package(name, version)
  remove_package(name, version)
end
python_binary_path() click to toggle source
# File lib/chef/provider/package/easy_install.rb, line 59
def python_binary_path
  path = @new_resource.python_binary
  path ? path : 'python'
end
remove_package(name, version) click to toggle source
# File lib/chef/provider/package/easy_install.rb, line 125
def remove_package(name, version)
  run_command(:command => "#{easy_install_binary_path }#{expand_options(@new_resource.options)} -m #{name}")
end
upgrade_package(name, version) click to toggle source
# File lib/chef/provider/package/easy_install.rb, line 121
def upgrade_package(name, version)
  install_package(name, version)
end