Class: Chef::Provider::Package::EasyInstall

Inherits:
Chef::Provider::Package show all
Defined in:
lib/chef/provider/package/easy_install.rb

Instance Attribute Summary

Attributes inherited from Chef::Provider

#current_resource, #new_resource, #node

Instance Method Summary collapse

Methods inherited from Chef::Provider::Package

#action_install, #action_purge, #action_remove, #action_upgrade, #expand_options, #get_preseed_file, #initialize, #preseed_package, #should_remove_package

Methods included from Mixin::Command

handle_command_failures, not_if, only_if, output_of_command, popen4, run_command, run_command_with_systems_locale

Methods inherited from Chef::Provider

#action_nothing, build_from_file, #initialize

Methods included from Mixin::ConvertToClassName

#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string

Methods included from Mixin::RecipeDefinitionDSLCore

#method_missing

Methods included from Mixin::Language

#data_bag, #data_bag_item, #platform?, #search, #value_for_platform

Constructor Details

This class inherits a constructor from Chef::Provider::Package

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Chef::Mixin::RecipeDefinitionDSLCore

Instance Method Details

#candidate_versionObject



72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/chef/provider/package/easy_install.rb', line 72

def candidate_version
   return @candidate_version if @candidate_version

   # do a dry run to get the latest version
   command = "#{easy_install_binary_path} -n #{@new_resource.package_name}"
   pid, stdin, stdout, stderr = popen4(command)
   dry_run_output = ""
   stdout.each do |line|
     dry_run_output << line
   end
   dry_run_output[/(.*)Best match: (.*) (.*)\n/]
   @candidate_version = $3
   @candidate_version
end

#easy_install_binary_pathObject



40
41
42
43
# File 'lib/chef/provider/package/easy_install.rb', line 40

def easy_install_binary_path
  path = @new_resource.easy_install_binary
  path ? path : 'easy_install'
end

#install_check(name) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/chef/provider/package/easy_install.rb', line 27

def install_check(name)
  command = "python -c \"import sys; print sys.path\""
  check = false
  status = popen4(command) do |pid, stdin, stdout, stderr|
    stdout.each do |line|
      if line.include? "#{name}"
        check = true
      end
    end
  end
  check
end

#install_package(name, version) ⇒ Object



87
88
89
# File 'lib/chef/provider/package/easy_install.rb', line 87

def install_package(name, version)
  run_command(:command => "#{easy_install_binary_path} \"#{name}==#{version}\"")
end

#load_current_resourceObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/chef/provider/package/easy_install.rb', line 45

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
  if install_check(@new_resource.package_name)
    command = "python -c \"import #{@new_resource.package_name}; print #{@new_resource.package_name}.__path__\""
    pid, stdin, stdout, stderr = popen4(command)
    install_location = stdout.readline
    install_location[/\S\S(.*)\/(.*)-(.*)-py(.*).egg\S/]
    package_version = $3
  else
    package_version = nil
  end

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

  @current_resource
end

#purge_package(name, version) ⇒ Object



99
100
101
# File 'lib/chef/provider/package/easy_install.rb', line 99

def purge_package(name, version)
  remove_package(name, version)
end

#remove_package(name, version) ⇒ Object



95
96
97
# File 'lib/chef/provider/package/easy_install.rb', line 95

def remove_package(name, version)
  run_command(:command => "#{easy_install_binary_path} -m #{name}")
end

#upgrade_package(name, version) ⇒ Object



91
92
93
# File 'lib/chef/provider/package/easy_install.rb', line 91

def upgrade_package(name, version)
  install_package(name, version)
end