class CORL::Plugin::Provisioner

Public Class Methods

build_info(namespace, plugin_type, data) click to toggle source
Calls superclass method
    # File lib/core/plugin/provisioner.rb
273 def self.build_info(namespace, plugin_type, data)
274   data = data.split(/\s*,\s*/) if data.is_a?(String)
275   super(namespace, plugin_type, data)
276 end
translate(data) click to toggle source
Calls superclass method
    # File lib/core/plugin/provisioner.rb
280 def self.translate(data)
281   options = super(data)
282 
283   case data
284   when String
285     options = { :profiles => array(data) }
286   when Hash
287     options = data
288   end
289 
290   if options.has_key?(:profiles)
291     if matches = translate_reference(options[:profiles])
292       options[:provider] = matches[:provider]
293       options[:profiles] = matches[:profiles]
294 
295       logger.debug("Translating provisioner options: #{options.inspect}")
296     end
297   end
298   options
299 end
translate_reference(reference) click to toggle source
    # File lib/core/plugin/provisioner.rb
303 def self.translate_reference(reference)
304   # ex: puppetnode:::profile::something,profile::somethingelse
305   if reference && reference.match(/^\s*([a-zA-Z0-9_-]+):::([^\s]+)\s*$/)
306     provider = $1
307     profiles = $2
308 
309     logger.debug("Translating provisioner reference: #{provider} #{profiles}")
310 
311     info = {
312       :provider => provider,
313       :profiles => profiles.split(/\s*,\s*/)
314     }
315 
316     logger.debug("Project reference info: #{info.inspect}")
317     return info
318   end
319   nil
320 end

Public Instance Methods

build(node, options = {}) click to toggle source
    # File lib/core/plugin/provisioner.rb
177 def build(node, options = {})
178   config        = Config.ensure(options)
179   environment   = Util::Data.ensure_value(config[:environment], node.lookup(:corl_environment))
180   provider_info = network.build.config.get_hash([ :provisioners, plugin_provider ])
181   combined_info = Config.new({}, {}, true, false)
182 
183   provider_info.each do |package, info|
184     package_info = Config.new(info, {}, true, false)
185     profiles     = {}
186 
187     hash(package_info[:profiles]).each do |name, profile_info|
188       profiles[profile_id(package, name)] = profile_info
189     end
190 
191     package_info[:profiles] = profiles
192     combined_info.import(package_info)
193   end
194 
195   FileUtils.mkdir_p(build_directory)
196 
197   status  = parallel(:build_provider, provider_info, environment, combined_info, config)
198   success = status.values.include?(false) ? false : true
199 
200   if success
201     # Save the updates in the local project cache
202     set_cache_setting(:build_dependencies, network.build.dependencies.export)
203     set_cache_setting(:build_locations, network.build.locations.export)
204     set_cache_setting(:build_info, provider_info)
205     set_cache_setting(:build_profiles, find_profiles(node))
206   end
207   success
208 end
build_dependencies(node, reset = false) click to toggle source
    # File lib/core/plugin/provisioner.rb
138 def build_dependencies(node, reset = false)
139   dependencies = cache_setting(:build_dependencies, {}, :hash)
140   build(node) if reset || dependencies.empty?
141   symbol_map(cache_setting(:build_dependencies, {}, :hash))
142 end
build_directory() click to toggle source
   # File lib/core/plugin/provisioner.rb
43 def build_directory
44   File.join(network.build_directory, 'provisioners', plugin_provider.to_s)
45 end
build_info(node, reset = false) click to toggle source
    # File lib/core/plugin/provisioner.rb
154 def build_info(node, reset = false)
155   info = cache_setting(:build_info, {}, :hash)
156   build(node) if reset || info.empty?
157   symbol_map(cache_setting(:build_info, {}, :hash))
158 end
build_locations(node, reset = false) click to toggle source
    # File lib/core/plugin/provisioner.rb
146 def build_locations(node, reset = false)
147   locations = cache_setting(:build_locations, {}, :hash)
148   build(node) if reset || locations.empty?
149   symbol_map(cache_setting(:build_locations, {}, :hash))
150 end
build_profile(name, info, package, environment, profiles, options = {}) { |process_environment(info, environment), options| ... } click to toggle source
    # File lib/core/plugin/provisioner.rb
218 def build_profile(name, info, package, environment, profiles, options = {})
219   parents = []
220   config  = Config.new(info, {}, true, false)
221   success = true
222 
223   while config.has_key?(:extend) do
224     array(config.delete(:extend)).each do |parent|
225       parent      = profile_id(package, parent) unless parent.match('::')
226       parent_base = parent.sub(/::[^:]+$/, '')
227       parents << parent
228 
229       if profiles[parent.to_sym].has_key?(:extend)
230         extends = []
231         array(profiles[parent.to_sym][:extend]).each do |extend|
232           if extend.include?('::')
233             extends << extend
234           else
235             extends << "#{parent_base}::#{extend}"
236           end
237         end
238         profiles[parent.to_sym][:extend] = extends
239       end
240       config.defaults(profiles[parent.to_sym])
241     end
242   end
243 
244   build_config.set_dependency(:profile, profile_id(package, name), parents)
245 
246   success = yield(process_environment(info, environment), options) if block_given?
247   success
248 end
build_profiles(node, reset = false) click to toggle source
    # File lib/core/plugin/provisioner.rb
162 def build_profiles(node, reset = false)
163   profiles = cache_setting(:build_profiles, [], :array)
164   build(node) if reset || profiles.empty?
165   cache_setting(:build_profiles, [], :array)
166 end
build_provider(package, info, environment, combined_info, options = {}) click to toggle source
    # File lib/core/plugin/provisioner.rb
212 def build_provider(package, info, environment, combined_info, options = {})
213   profiles = hash(info[:profiles])
214   status   = parallel(:build_profile, profiles, id(package), environment, hash(combined_info[:profiles]), options)
215   status.values.include?(false) ? false : true
216 end
directory() click to toggle source
   # File lib/core/plugin/provisioner.rb
37 def directory
38   File.join(network.directory, myself[:directory])
39 end
directory=(directory) click to toggle source
   # File lib/core/plugin/provisioner.rb
33 def directory=directory
34   myself[:directory] = directory
35 end
gateway(index = :first, reset = false) click to toggle source
   # File lib/core/plugin/provisioner.rb
53 def gateway(index = :first, reset = false)
54   gateway = myself[:gateway]
55 
56   unless gateway
57     gateways = package_gateways(reset)
58 
59     unless gateways.empty?
60       if index == :first || index == 0
61         gateway  = gateways[0]
62       elsif index == :last
63         gateway = gateways.pop
64       elsif index.integer?
65         gateway  = gateways[index]
66       end
67     end
68   end
69   gateway
70 end
gateway=(gateway) click to toggle source
   # File lib/core/plugin/provisioner.rb
49 def gateway=gateway
50   myself[:gateway] = gateway
51 end
initialized?(options = {}) click to toggle source
   # File lib/core/plugin/provisioner.rb
23 def initialized?(options = {})
24 end
lookup(property, default = nil, options = {}) click to toggle source
    # File lib/core/plugin/provisioner.rb
252 def lookup(property, default = nil, options = {})
253   # Implement in providers
254   nil
255 end
normalize(reload) { || ... } click to toggle source
Calls superclass method
   # File lib/core/plugin/provisioner.rb
14 def normalize(reload)
15   super
16   build_config.register(:dependency, :dependencies) if build_config
17   yield if block_given?
18 end
package_gateways(node, reset = false) click to toggle source
   # File lib/core/plugin/provisioner.rb
72 def package_gateways(node, reset = false)
73   gateways = []
74   build_info(node, reset).each do |package_name, package_info|
75     gateways << File.join('packages', id(package_name).to_s, package_info[:gateway]) if package_info.has_key?(:gateway)
76   end
77   gateways
78 end
profile_dependencies(node, profiles) click to toggle source
    # File lib/core/plugin/provisioner.rb
114 def profile_dependencies(node, profiles)
115   dependencies  = build_dependencies(node)[:profile]
116   profile_index = {}
117 
118   search_profiles = lambda do |profile|
119     profile = profile.to_sym
120 
121     if dependencies.has_key?(profile)
122       dependencies[profile].each do |parent_profile|
123         search_profiles.call(parent_profile)
124       end
125     end
126     profile_index[profile] = true
127   end
128 
129   profiles.each do |profile|
130     search_profiles.call(profile)
131   end
132 
133   profile_index.keys
134 end
profile_id(package, profile) click to toggle source
    # File lib/core/plugin/provisioner.rb
330 def profile_id(package, profile)
331   concatenate([ package, 'profile', profile ], false)
332 end
provision(node, profiles, options = {}) { |profiles, config| ... } click to toggle source
    # File lib/core/plugin/provisioner.rb
259 def provision(node, profiles, options = {})
260   config   = Config.ensure(options)
261   profiles = profile_dependencies(node, profiles)
262   success  = true
263 
264   success = yield(profiles, config) if block_given?
265 
266   Config.save_properties(Config.get_options(:corl_log))
267   success
268 end
register(options = {}) click to toggle source
    # File lib/core/plugin/provisioner.rb
171 def register(options = {})
172   # Implement in providers
173 end
supported_profiles(node, profile_names = nil) click to toggle source
    # File lib/core/plugin/provisioner.rb
 95 def supported_profiles(node, profile_names = nil)
 96   found    = []
 97   profiles = build_profiles(node)
 98 
 99   if profile_names.nil?
100     found = profiles
101   else
102     profile_names.each do |name|
103       name = name.to_s
104       if profiles.include?(name)
105         found << name
106       end
107     end
108   end
109   found.empty? ? false : found
110 end
translate_reference(reference) click to toggle source
    # File lib/core/plugin/provisioner.rb
324 def translate_reference(reference)
325   self.class.translate_reference(reference)
326 end

Protected Instance Methods

find_profiles(node, reset = false) click to toggle source
   # File lib/core/plugin/provisioner.rb
82 def find_profiles(node, reset = false)
83   allowed_profiles = []
84   build_info(node, reset).each do |package_name, package_info|
85     hash(package_info[:profiles]).each do |profile_name, profile_info|
86       allowed_profiles << resource([ package_name, 'profile', profile_name ])
87     end
88   end
89   allowed_profiles
90 end