Class: Sprinkle::Package::Package

Inherits:
Object
  • Object
show all
Includes:
ArbitraryOptions
Defined in:
lib/sprinkle/package.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ArbitraryOptions

included, #method_missing_with_arbitrary_options

Constructor Details

#initialize(name, metadata = {}, &block) ⇒ Package

Returns a new instance of Package.



112
113
114
115
116
117
118
119
120
121
# File 'lib/sprinkle/package.rb', line 112

def initialize(name,  = {}, &block)
  raise 'No package name supplied' unless name

  @name = name
  @provides = [:provides]
  @dependencies = []
  @recommends = []
  @verifications = []
  self.instance_eval &block
end

Instance Attribute Details

#dependenciesObject

Returns the value of attribute dependencies.



110
111
112
# File 'lib/sprinkle/package.rb', line 110

def dependencies
  @dependencies
end

#installerObject

Returns the value of attribute installer.



110
111
112
# File 'lib/sprinkle/package.rb', line 110

def installer
  @installer
end

#nameObject

Returns the value of attribute name.



110
111
112
# File 'lib/sprinkle/package.rb', line 110

def name
  @name
end

#providesObject

Returns the value of attribute provides.



110
111
112
# File 'lib/sprinkle/package.rb', line 110

def provides
  @provides
end

#recommends(*packages) ⇒ Object

Returns the value of attribute recommends.



110
111
112
# File 'lib/sprinkle/package.rb', line 110

def recommends
  @recommends
end

#verificationsObject

Returns the value of attribute verifications.



110
111
112
# File 'lib/sprinkle/package.rb', line 110

def verifications
  @verifications
end

Instance Method Details

#apt(*names, &block) ⇒ Object



123
124
125
# File 'lib/sprinkle/package.rb', line 123

def apt(*names, &block)
  @installer = Sprinkle::Installers::Apt.new(self, *names, &block)
end

#gem(name, options = {}, &block) ⇒ Object



131
132
133
134
# File 'lib/sprinkle/package.rb', line 131

def gem(name, options = {}, &block)
  @recommends << :rubygems
  @installer = Sprinkle::Installers::Gem.new(self, name, options, &block)
end

#process(deployment, roles) ⇒ Object



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/sprinkle/package.rb', line 145

def process(deployment, roles)
  return if meta_package?
  
  # Run a pre-test to see if the software is already installed. If so,
  # we can skip it, unless we have the force option turned on!
  unless @verifications.empty? || Sprinkle::OPTIONS[:force]
    begin
      process_verifications(deployment, roles, true)
      
      logger.info "--> #{self.name} already installed for roles: #{roles}"
      return
    rescue Sprinkle::VerificationFailed => e
      # Continue
    end
  end

  @installer.defaults(deployment)
  @installer.process(roles)
  
  process_verifications(deployment, roles)
end

#process_verifications(deployment, roles, pre = false) ⇒ Object



167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/sprinkle/package.rb', line 167

def process_verifications(deployment, roles, pre = false)
  if pre
    logger.info "--> Checking if #{self.name} is already installed for roles: #{roles}"
  else
    logger.info "--> Verifying #{self.name} was properly installed for roles: #{roles}"
  end
  
  @verifications.each do |v|
    v.defaults(deployment)
    v.process(roles)
  end
end

#requires(*packages) ⇒ Object



180
181
182
183
# File 'lib/sprinkle/package.rb', line 180

def requires(*packages)
  @dependencies << packages
  @dependencies.flatten!
end

#rpm(*names, &block) ⇒ Object



127
128
129
# File 'lib/sprinkle/package.rb', line 127

def rpm(*names, &block)
  @installer = Sprinkle::Installers::Rpm.new(self, *names, &block)
end

#source(source, options = {}, &block) ⇒ Object



136
137
138
139
# File 'lib/sprinkle/package.rb', line 136

def source(source, options = {}, &block)
  @recommends << :build_essential # Ubuntu/Debian
  @installer = Sprinkle::Installers::Source.new(self, source, options, &block)
end

#to_sObject



210
# File 'lib/sprinkle/package.rb', line 210

def to_s; @name; end

#tree(depth = 1, &block) ⇒ Object



190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# File 'lib/sprinkle/package.rb', line 190

def tree(depth = 1, &block)
  packages = []

  @recommends.each do |dep|
    package = PACKAGES[dep]
    next unless package # skip missing recommended packages as they can be optional
    block.call(self, package, depth) if block
    packages << package.tree(depth + 1, &block)
  end

  @dependencies.each do |dep|
    package = PACKAGES[dep]
    raise "Package definition not found for key: #{dep}" unless package
    block.call(self, package, depth) if block
    packages << package.tree(depth + 1, &block)
  end

  packages << self
end

#verify(description = '', &block) ⇒ Object



141
142
143
# File 'lib/sprinkle/package.rb', line 141

def verify(description = '', &block)
  @verifications << Sprinkle::Verify.new(self, description, &block)
end