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

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

Constant Summary

Constants included from Mixin::ShellOut

Mixin::ShellOut::DEPRECATED_OPTIONS

Instance Attribute Summary

Attributes inherited from Chef::Provider

#action, #cookbook_name, #current_resource, #new_resource, #recipe_name, #run_context

Instance Method Summary collapse

Methods inherited from Chef::Provider::Package

#action_install, #action_purge, #action_reconfig, #action_remove, #action_upgrade, #as_array, #check_resource_semantics!, #define_resource_requirements, #expand_options, #get_preseed_file, #have_any_matching_version?, #initialize, #multipackage_api_adapter, #preseed_package, #preseed_resource, #reconfig_package, #removing_package?, #target_version_already_installed?, #version_requirement_satisfied?, #whyrun_supported?

Methods included from Mixin::SubclassDirective

#subclass_directive

Methods included from Mixin::ShellOut

#run_command_compatible_options, #shell_out, #shell_out!, #shell_out_with_systems_locale, #shell_out_with_systems_locale!

Methods included from Mixin::Command

#chdir_or_tmpdir, #handle_command_failures, #output_of_command, #run_command, #run_command_and_return_stdout_stderr, #run_command_with_systems_locale

Methods included from Mixin::Command::Windows

#popen4

Methods included from Mixin::Command::Unix

#popen4

Methods inherited from Chef::Provider

#action_nothing, #check_resource_semantics!, #cleanup_after_converge, #converge_by, #converge_if_changed, #define_resource_requirements, #events, include_resource_dsl, include_resource_dsl_module, #initialize, #node, #process_resource_requirements, provides, provides?, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, supports?, use_inline_resources, #whyrun_mode?, #whyrun_supported?

Methods included from Mixin::Provides

#provided_as, #provides, #provides?

Methods included from Mixin::DescendantsTracker

#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited

Methods included from DeprecatedLWRPClass

#const_missing, #deprecated_constants, #register_deprecated_lwrp_class

Methods included from Mixin::LazyModuleInclude

#descendants, #include, #included

Methods included from Mixin::NotifyingBlock

#notifying_block, #subcontext_block

Methods included from DSL::DeclareResource

#build_resource, #declare_resource, #delete_resource, #delete_resource!, #edit_resource, #edit_resource!, #find_resource, #find_resource!, #with_run_context

Methods included from Mixin::PowershellOut

#powershell_out, #powershell_out!

Methods included from Mixin::WindowsArchitectureHelper

#assert_valid_windows_architecture!, #disable_wow64_file_redirection, #forced_32bit_override_required?, #is_i386_process_on_x86_64_windows?, #node_supports_windows_architecture?, #node_windows_architecture, #restore_wow64_file_redirection, #valid_windows_architecture?, #with_os_architecture, #wow64_architecture_override_required?, #wow64_directory

Methods included from DSL::PlatformIntrospection

#docker?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family

Constructor Details

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

Instance Method Details

#candidate_versionObject



105
106
107
108
109
110
111
112
# File 'lib/chef/provider/package/easy_install.rb', line 105

def candidate_version
  return @candidate_version if @candidate_version

   # do a dry run to get the latest version
  result = shell_out_with_timeout!("#{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_pathObject



52
53
54
55
# File 'lib/chef/provider/package/easy_install.rb', line 52

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

#install_check(name) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/chef/provider/package/easy_install.rb', line 30

def install_check(name)
  check = false

  begin
    # first check to see if we can import it
    output = shell_out_with_timeout!("#{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_with_timeout!("#{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) ⇒ Object



114
115
116
117
# File 'lib/chef/provider/package/easy_install.rb', line 114

def install_package(name, version)
  Chef.log_deprecation("The easy_install package provider is deprecated and will be removed in Chef 13.")
  run_command(:command => "#{easy_install_binary_path}#{expand_options(@new_resource.options)} \"#{name}==#{version}\"")
end

#load_current_resourceObject



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/chef/provider/package/easy_install.rb', line 67

def load_current_resource
  @current_resource = Chef::Resource::Package.new(@new_resource.name)
  @current_resource.package_name(@new_resource.package_name)

  # get the currently installed version if installed
  package_version = nil
  if install_check(module_name)
    begin
      output = shell_out_with_timeout!("#{python_binary_path} -c \"import #{module_name}; print #{module_name}.__version__\"").stdout
      package_version = output.strip
    rescue
      output = shell_out_with_timeout!("#{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_nameObject



62
63
64
65
# File 'lib/chef/provider/package/easy_install.rb', line 62

def module_name
  m = @new_resource.module_name
  m ? m : @new_resource.name
end

#purge_package(name, version) ⇒ Object



128
129
130
# File 'lib/chef/provider/package/easy_install.rb', line 128

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

#python_binary_pathObject



57
58
59
60
# File 'lib/chef/provider/package/easy_install.rb', line 57

def python_binary_path
  path = @new_resource.python_binary
  path ? path : "python"
end

#remove_package(name, version) ⇒ Object



123
124
125
126
# File 'lib/chef/provider/package/easy_install.rb', line 123

def remove_package(name, version)
  Chef.log_deprecation("The easy_install package provider is deprecated and will be removed in Chef 13.")
  run_command(:command => "#{easy_install_binary_path }#{expand_options(@new_resource.options)} -m #{name}")
end

#upgrade_package(name, version) ⇒ Object



119
120
121
# File 'lib/chef/provider/package/easy_install.rb', line 119

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