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