Class: Chef::Provider::Package
- Inherits:
-
Chef::Provider
show all
- Includes:
- Mixin::Command
- Defined in:
- lib/chef/provider/package.rb,
lib/chef/provider/package/apt.rb,
lib/chef/provider/package/rpm.rb,
lib/chef/provider/package/yum.rb,
lib/chef/provider/package/dpkg.rb,
lib/chef/provider/package/pacman.rb,
lib/chef/provider/package/zypper.rb,
lib/chef/provider/package/freebsd.rb,
lib/chef/provider/package/portage.rb,
lib/chef/provider/package/solaris.rb,
lib/chef/provider/package/macports.rb,
lib/chef/provider/package/rubygems.rb,
lib/chef/provider/package/easy_install.rb
Direct Known Subclasses
Apt, EasyInstall, Freebsd, Macports, Pacman, Portage, Rpm, Rubygems, Solaris, Yum, Zypper
Defined Under Namespace
Classes: Apt, Dpkg, EasyInstall, Freebsd, Macports, Pacman, Portage, Rpm, Rubygems, Solaris, Yum, Zypper
Instance Attribute Summary collapse
#current_resource, #new_resource, #run_context
Instance Method Summary
collapse
#chdir_or_tmpdir, #handle_command_failures, #output_of_command, #run_command, #run_command_with_systems_locale
#popen4
#popen4
#action_nothing, build_from_file, #cookbook_name, #load_current_resource, #node, #resource_collection
#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #snake_case_basename
#method_missing
#data_bag, #data_bag_item, #platform?, #search, #value_for_platform
Constructor Details
#initialize(new_resource, run_context) ⇒ Package
Returns a new instance of Package.
33
34
35
36
|
# File 'lib/chef/provider/package.rb', line 33
def initialize(new_resource, run_context)
super
@candidate_version = nil
end
|
Instance Attribute Details
#candidate_version ⇒ Object
Returns the value of attribute candidate_version.
31
32
33
|
# File 'lib/chef/provider/package.rb', line 31
def candidate_version
@candidate_version
end
|
Instance Method Details
#action_install ⇒ Object
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/chef/provider/package.rb', line 38
def action_install
if @new_resource.version != nil && @new_resource.version != @current_resource.version
install_version = @new_resource.version
elsif @current_resource.version == nil
install_version = candidate_version
else
Chef::Log.debug("#{@new_resource} is already installed - nothing to do")
return
end
unless install_version
raise(Chef::Exceptions::Package, "No version specified, and no candidate version available for #{@new_resource.package_name}")
end
if @new_resource.response_file
preseed_package(@new_resource.package_name, install_version)
end
status = install_package(@new_resource.package_name, install_version)
if status
@new_resource.updated_by_last_action(true)
end
Chef::Log.info("#{@new_resource} installed version #{install_version}")
end
|
#action_purge ⇒ Object
102
103
104
105
106
107
108
|
# File 'lib/chef/provider/package.rb', line 102
def action_purge
if removing_package?
purge_package(@current_resource.package_name, @new_resource.version)
@new_resource.updated_by_last_action(true)
Chef::Log.info("#{@new_resource} purged")
end
end
|
#action_reconfig ⇒ Object
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
# File 'lib/chef/provider/package.rb', line 110
def action_reconfig
if @current_resource.version == nil then
Chef::Log.debug("#{@new_resource} is NOT installed - nothing to do")
return
end
unless @new_resource.response_file then
Chef::Log.debug("#{@new_resource} no response_file provided - nothing to do")
return
end
status = preseed_package(@new_resource.package_name, @current_resource.version)
unless status then
Chef::Log.debug("#{@new_resource} preseeding has not changed - nothing to do")
return
end
status = reconfig_package(@new_resource.package_name, @current_resource.version)
@new_resource.updated_by_last_action(true) if status
Chef::Log.info("#{@new_resource} reconfigured")
end
|
#action_remove ⇒ Object
80
81
82
83
84
85
86
87
88
|
# File 'lib/chef/provider/package.rb', line 80
def action_remove
if removing_package?
remove_package(@current_resource.package_name, @new_resource.version)
@new_resource.updated_by_last_action(true)
Chef::Log.info("#{@new_resource} removed")
else
Chef::Log.debug("#{@new_resource} package does not exist - nothing to do")
end
end
|
#action_upgrade ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/chef/provider/package.rb', line 67
def action_upgrade
if @current_resource.version != candidate_version
orig_version = @current_resource.version || "uninstalled"
status = upgrade_package(@new_resource.package_name, candidate_version)
if status
@new_resource.updated_by_last_action(true)
end
Chef::Log.info("#{@new_resource} upgraded from #{orig_version} to #{candidate_version}")
else
Chef::Log.debug("#{@new_resource} is at the latest version - nothing to do")
end
end
|
#expand_options(options) ⇒ Object
194
195
196
|
# File 'lib/chef/provider/package.rb', line 194
def expand_options(options)
options ? " #{options}" : ""
end
|
#get_preseed_file(name, version) ⇒ Object
156
157
158
159
160
161
162
163
164
165
166
|
# File 'lib/chef/provider/package.rb', line 156
def get_preseed_file(name, version)
resource = preseed_resource(name, version)
resource.run_action('create')
Chef::Log.debug("#{@new_resource} fetched preseed file to #{resource.path}")
if resource.updated_by_last_action?
resource.path
else
false
end
end
|
#install_package(name, version) ⇒ Object
132
133
134
|
# File 'lib/chef/provider/package.rb', line 132
def install_package(name, version)
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :install"
end
|
#preseed_package(name, version) ⇒ Object
148
149
150
|
# File 'lib/chef/provider/package.rb', line 148
def preseed_package(name, version)
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support pre-seeding package install/upgrade instructions - don't ask it to!"
end
|
#preseed_resource(name, version) ⇒ Object
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
# File 'lib/chef/provider/package.rb', line 168
def preseed_resource(name, version)
file_cache_dir = Chef::FileCache.create_cache_path("preseed/#{@new_resource.cookbook_name}")
cache_seed_to = "#{file_cache_dir}/#{name}-#{version}.seed"
Chef::Log.debug("#{@new_resource} fetching preseed file to #{cache_seed_to}")
begin
remote_file = Chef::Resource::Template.new(cache_seed_to, run_context)
remote_file.cookbook_name = @new_resource.cookbook_name
remote_file.source(@new_resource.response_file)
remote_file.backup(false)
provider = Chef::Platform.provider_for_resource(remote_file)
provider.template_location
rescue
Chef::Log.debug("#{@new_resource} fetching preseed file via Template resource failed, fallback to CookbookFile resource")
remote_file = Chef::Resource::CookbookFile.new(cache_seed_to, run_context)
remote_file.cookbook_name = @new_resource.cookbook_name
remote_file.source(@new_resource.response_file)
remote_file.backup(false)
end
remote_file
end
|
#purge_package(name, version) ⇒ Object
144
145
146
|
# File 'lib/chef/provider/package.rb', line 144
def purge_package(name, version)
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :purge"
end
|
#reconfig_package(name, version) ⇒ Object
152
153
154
|
# File 'lib/chef/provider/package.rb', line 152
def reconfig_package(name, version)
raise( Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :reconfig" )
end
|
#remove_package(name, version) ⇒ Object
140
141
142
|
# File 'lib/chef/provider/package.rb', line 140
def remove_package(name, version)
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :remove"
end
|
#removing_package? ⇒ Boolean
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/chef/provider/package.rb', line 90
def removing_package?
if @current_resource.version.nil?
false elsif @new_resource.version.nil?
true elsif @new_resource.version == @current_resource.version
true else
false end
end
|
#upgrade_package(name, version) ⇒ Object
136
137
138
|
# File 'lib/chef/provider/package.rb', line 136
def upgrade_package(name, version)
raise Chef::Exceptions::UnsupportedAction, "#{self.to_s} does not support :upgrade"
end
|