Class: Sprinkle::Package::Package
- Inherits:
-
Object
- Object
- Sprinkle::Package::Package
show all
- Includes:
- Rendering
- Defined in:
- lib/sprinkle/package.rb,
lib/sprinkle/installers/install_package.rb
Overview
Defined Under Namespace
Classes: ContextError
Constant Summary
collapse
- @@installer_methods =
[]
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#args ⇒ Object
-
#defaults(s = nil) ⇒ Object
-
#dependencies ⇒ Object
-
#description(s = nil) ⇒ Object
-
#get(x) ⇒ Object
-
#initialize(name, metadata = {}, &block) ⇒ Package
constructor
A new instance of Package.
-
#install_package(*names, &block) ⇒ Object
(also: #install_packages)
-
#installers ⇒ Object
-
#instance(*args) ⇒ Object
-
#optional(*packages) ⇒ Object
-
#opts ⇒ Object
-
#process(deployment, roles) ⇒ Object
-
#process_verifications(deployment, roles, pre = false) ⇒ Object
-
#push_file(file, options = {}, &block) ⇒ Object
-
#recommends(*packages) ⇒ Object
-
#requires(*packages) ⇒ Object
-
#sudo? ⇒ Boolean
-
#to_s ⇒ Object
-
#tree(depth = 1, &block) ⇒ Object
-
#uninstall_package(*names, &block) ⇒ Object
(also: #uninstall_packages)
-
#use_sudo(flag = true) ⇒ Object
-
#verify(description = '', &block) ⇒ Object
-
#version(s = nil) ⇒ Object
-
#with_private_install_queue ⇒ Object
allow an installer to request a private install queue from the package for example to allow pre and post hooks to have their own installers that do not mess with the packages installer list.
Methods included from Rendering
#render, #template, #template_search_path
Constructor Details
#initialize(name, metadata = {}, &block) ⇒ Package
Returns a new instance of Package.
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/sprinkle/package.rb', line 134
def initialize(name, metadata = {}, &block)
raise 'No package name supplied' unless name
@name = name
@metadata = metadata
@provides = metadata[:provides]
@dependencies = []
@recommends = []
@optional = []
@verifications = []
@install_queues ||= [[]]
@block = block
@use_sudo = nil
@version = nil
self.instance_eval(&block)
end
|
Instance Attribute Details
Returns the value of attribute name.
120
121
122
|
# File 'lib/sprinkle/package.rb', line 120
def name
@name
end
|
Returns the value of attribute provides.
120
121
122
|
# File 'lib/sprinkle/package.rb', line 120
def provides
@provides
end
|
#verifications ⇒ Object
Returns the value of attribute verifications.
120
121
122
|
# File 'lib/sprinkle/package.rb', line 120
def verifications
@verifications
end
|
Class Method Details
.add_api(&block) ⇒ Object
127
128
129
130
131
132
|
# File 'lib/sprinkle/package.rb', line 127
def self.add_api(&block)
before = self.instance_methods
self.class_eval(&block)
added = self.instance_methods - before
@@installer_methods += added.map(&:to_sym)
end
|
Instance Method Details
181
182
183
|
# File 'lib/sprinkle/package.rb', line 181
def args
@_args ||= []
end
|
#defaults(s = nil) ⇒ Object
177
178
179
|
# File 'lib/sprinkle/package.rb', line 177
def defaults(s=nil)
s ? @defaults = s : @defaults ||= Hash.new
end
|
#dependencies ⇒ Object
261
262
263
|
# File 'lib/sprinkle/package.rb', line 261
def dependencies
@dependencies.map {|a,b| a }
end
|
#description(s = nil) ⇒ Object
152
153
154
|
# File 'lib/sprinkle/package.rb', line 152
def description(s=nil)
s ? @description = s : @description
end
|
192
193
194
|
# File 'lib/sprinkle/package.rb', line 192
def get(x)
raise ContextError, "Cannot call get inside a package, must be inside an Installer block"
end
|
#install_package(*names, &block) ⇒ Object
Also known as:
install_packages
65
66
67
68
|
# File 'lib/sprinkle/installers/install_package.rb', line 65
def install_package(*names, &block) ActiveSupport::Deprecation.warn("install_package will be removed from sprinkle 0.8, please use yum or smart installers instead.")
@installers << Sprinkle::Installers::InstallPackage.new(self, names, &block)
end
|
#installers ⇒ Object
289
290
291
|
# File 'lib/sprinkle/package.rb', line 289
def installers
@install_queues.last
end
|
#instance(*args) ⇒ Object
160
161
162
163
164
165
166
167
|
# File 'lib/sprinkle/package.rb', line 160
def instance(*args)
p=Package.new(name, @metadata) {}
p.opts = defaults.merge(args.)
p.args = args
p.instance_variable_set("@block", @block)
p.instance_eval(&@block)
p
end
|
#optional(*packages) ⇒ Object
257
258
259
|
# File 'lib/sprinkle/package.rb', line 257
def optional(*packages)
add_dependencies packages, :optional
end
|
185
186
187
|
# File 'lib/sprinkle/package.rb', line 185
def opts
@_opts ||= defaults.clone
end
|
#process(deployment, roles) ⇒ Object
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
# File 'lib/sprinkle/package.rb', line 208
def process(deployment, roles)
output_name
return if meta_package?
unless @verifications.empty? || Sprinkle::OPTIONS[:force]
begin
process_verifications(deployment, roles, true)
logger.info " --> already installed for roles: #{roles}"
return
rescue Sprinkle::VerificationFailed
end
end
installers.each do |installer|
installer.defaults(deployment)
installer.process(roles)
end
process_verifications(deployment, roles)
logger.info " --> INSTALLED for roles: #{roles}"
end
|
#process_verifications(deployment, roles, pre = false) ⇒ Object
234
235
236
237
238
239
240
241
242
243
244
245
246
247
|
# File 'lib/sprinkle/package.rb', line 234
def process_verifications(deployment, roles, pre = false)
return if @verifications.blank?
if pre
logger.debug "--> Checking if #{self.name} is already installed for roles: #{roles}"
else
logger.debug "--> Verifying #{self.name} was properly installed for roles: #{roles}"
end
@verifications.each do |v|
v.defaults(deployment)
v.process(roles, pre)
end
end
|
#push_file(file, options = {}, &block) ⇒ Object
197
198
199
200
201
202
|
# File 'lib/sprinkle/package.rb', line 197
def push_file(file, options ={}, &block)
ActiveSupport::Deprecation.warn("push_file is depreciated and will be removed in v0.9. Use the new `file` installer instead.")
raise "need content" unless options[:content]
runner "#{"sudo " if sudo?}rm -f #{file}"
push_text(options[:content], file, options, &block)
end
|
#recommends(*packages) ⇒ Object
253
254
255
|
# File 'lib/sprinkle/package.rb', line 253
def recommends(*packages)
add_dependencies packages, :recommends
end
|
#requires(*packages) ⇒ Object
249
250
251
|
# File 'lib/sprinkle/package.rb', line 249
def requires(*packages)
add_dependencies packages, :dependencies
end
|
#sudo? ⇒ Boolean
169
170
171
|
# File 'lib/sprinkle/package.rb', line 169
def sudo?
!!@use_sudo
end
|
274
275
276
|
# File 'lib/sprinkle/package.rb', line 274
def to_s
"#{@name} #{@version}".strip
end
|
#tree(depth = 1, &block) ⇒ Object
265
266
267
268
269
270
271
272
|
# File 'lib/sprinkle/package.rb', line 265
def tree(depth = 1, &block)
packages = []
packages << tree_for_packages(@recommends, :depth => depth, &block)
packages << tree_for_packages(@dependencies, :depth => depth, :required => true, &block)
packages << self
packages << tree_for_packages(@optional, :depth => depth, &block)
packages
end
|
#uninstall_package(*names, &block) ⇒ Object
Also known as:
uninstall_packages
70
71
72
73
|
# File 'lib/sprinkle/installers/install_package.rb', line 70
def uninstall_package(*names, &block) ActiveSupport::Deprecation.warn("uninstall_package will be removed from sprinkle 0.8, please use yum or smart installers instead.")
@installers << Sprinkle::Installers::UninstallPackage.new(self, names, &block)
end
|
#use_sudo(flag = true) ⇒ Object
173
174
175
|
# File 'lib/sprinkle/package.rb', line 173
def use_sudo(flag=true)
@use_sudo = flag
end
|
#verify(description = '', &block) ⇒ Object
204
205
206
|
# File 'lib/sprinkle/package.rb', line 204
def verify(description = '', &block)
@verifications << Sprinkle::Verify.new(self, description, &block)
end
|
#version(s = nil) ⇒ Object
156
157
158
|
# File 'lib/sprinkle/package.rb', line 156
def version(s=nil)
s ? @version = s : @version
end
|
#with_private_install_queue ⇒ Object
allow an installer to request a private install queue from the package for example to allow pre and post hooks to have their own installers that do not mess with the packages installer list
returns: the private queue
283
284
285
286
287
|
# File 'lib/sprinkle/package.rb', line 283
def with_private_install_queue()
@install_queues.push []
yield
@install_queues.pop
end
|