module CORL::Mixin::Lookup
Public Instance Methods
config_initialized?()
click to toggle source
# File lib/core/mixin/lookup.rb 168 def config_initialized? 169 ready = false 170 if hiera 171 if CORL.admin? 172 if network_path = fact(:corl_network) 173 ready = File.directory?(File.join(network_path, 'config')) 174 end 175 else 176 ready = hiera_override_dir && File.directory?(hiera_override_dir) 177 end 178 end 179 ready 180 end
create_facts(data, reset = false)
click to toggle source
# File lib/core/mixin/lookup.rb 29 def create_facts(data, reset = false) 30 facts(reset, false) 31 32 data = hash(data) 33 data.each do |name, value| 34 fact_var[name.to_sym] = value 35 end 36 create_facts_post(fact_var.clone, data.keys) 37 end
create_facts_post(data, names)
click to toggle source
# File lib/core/mixin/lookup.rb 39 def create_facts_post(data, names) 40 data 41 end
debug_lookup(config, property, value, label)
click to toggle source
# File lib/core/mixin/lookup.rb 363 def debug_lookup(config, property, value, label) 364 if config.get(:debug, false) 365 CORL.ui_group(Util::Console.cyan(property.to_s)) do |ui| 366 dump = Util::Console.green(Util::Data.to_json(value, true)) 367 368 if dump.match(/\n+/) 369 ui.info("#{label}:\n#{dump}") 370 else 371 ui.info("#{label}: #{dump}") 372 end 373 end 374 end 375 end
delete_facts(names, reset = false)
click to toggle source
# File lib/core/mixin/lookup.rb 45 def delete_facts(names, reset = false) 46 facts(reset, false) 47 48 names = [ names ] unless names.is_a?(Array) 49 data = {} 50 51 names.each do |name| 52 name = name.to_sym 53 data[name] = fact_var.delete(name) 54 end 55 delete_facts_post(fact_var.clone, data) 56 end
delete_facts_post(data, old_data)
click to toggle source
# File lib/core/mixin/lookup.rb 58 def delete_facts_post(data, old_data) 59 data 60 end
fact(name, reset = false)
click to toggle source
# File lib/core/mixin/lookup.rb 64 def fact(name, reset = false) 65 facts(reset, false) 66 fact_var[name.to_sym] 67 end
fact_var()
click to toggle source
# File lib/core/mixin/lookup.rb 11 def fact_var 12 @@facts 13 end
fact_var=(facts)
click to toggle source
# File lib/core/mixin/lookup.rb 15 def fact_var=facts 16 @@facts = facts 17 end
facts(reset = false, clone = true)
click to toggle source
# File lib/core/mixin/lookup.rb 21 def facts(reset = false, clone = true) # Override if needed. (See node plugin) 22 self.fact_var = CORL.facts if reset || fact_var.nil? 23 return fact_var.clone if clone 24 fact_var 25 end
hiera(reset = false)
click to toggle source
# File lib/core/mixin/lookup.rb 160 def hiera(reset = false) 161 self.hiera_var = Hiera.new(:config => hiera_configuration(facts(reset))) if reset || hiera_var.nil? 162 hiera_var 163 end
hiera_configuration(local_facts = {})
click to toggle source
# File lib/core/mixin/lookup.rb 96 def hiera_configuration(local_facts = {}) 97 Kernel.load File.join(File.dirname(__FILE__), '..', 'mod', 'hiera_backend.rb') 98 99 backends = CORL.value(:hiera_backends, [ "json", "yaml" ]) 100 config_file = CORL.value(:hiera_config_file, File.join(Hiera::Util.config_dir, 'hiera.yaml')) 101 config = {} 102 103 if CORL.admin? && config_file && File.exist?(config_file) 104 config = Hiera::Config.load(config_file) 105 end 106 107 # Need some way to tell if we have installed our own Hiera configuration. 108 # TODO: Figure something else out. This is bad. 109 config = {} if config[:merge_behavior] == :native 110 111 config[:logger] = :corl 112 113 unless config[:merge_behavior] 114 config[:merge_behavior] = "deeper" 115 end 116 117 unless config[:backends] 118 config[:backends] = backends 119 end 120 121 if override_dir = hiera_override_dir 122 backends.each do |backend| 123 if config[:backends].include?(backend) 124 backend = backend.to_sym 125 config[backend] = {} unless config[backend] 126 config[backend][:datadir] = override_dir 127 end 128 end 129 end 130 131 hiera_config = CORL.config(:hiera, config) 132 loaded_facts = Util::Data.prefix(hiera_lookup_prefix, local_facts, '') 133 134 if hiera_config[:hierarchy] 135 hiera_config[:hierarchy].delete('common') 136 end 137 138 unless loaded_facts.empty? 139 hiera_config[:hierarchy].collect! do |search| 140 Hiera::Interpolate.interpolate(search, loaded_facts, {}) 141 end 142 end 143 144 unless hiera_config[:hierarchy] 145 hiera_config[:hierarchy] = [ 'common' ] 146 end 147 unless hiera_config[:hierarchy].include?('common') 148 hiera_config[:hierarchy] << 'common' 149 end 150 151 hiera_config[:hierarchy].each_with_index do |path, index| 152 hiera_config[:hierarchy][index] = path.gsub('//', '/') 153 end 154 155 hiera_config.export 156 end
hiera_lookup_prefix()
click to toggle source
# File lib/core/mixin/lookup.rb 90 def hiera_lookup_prefix 91 '::' 92 end
hiera_override_dir()
click to toggle source
# File lib/core/mixin/lookup.rb 84 def hiera_override_dir 85 nil # Override if needed. (See network and node plugins) 86 end
hiera_var()
click to toggle source
# File lib/core/mixin/lookup.rb 74 def hiera_var 75 @@hiera 76 end
hiera_var=(hiera)
click to toggle source
# File lib/core/mixin/lookup.rb 78 def hiera_var=hiera 79 @@hiera = hiera 80 end
lookup(properties, default = nil, options = {})
click to toggle source
# File lib/core/mixin/lookup.rb 262 def lookup(properties, default = nil, options = {}) 263 lookup_base(properties, default, options) 264 end
lookup_array(properties, default = [], options = {})
click to toggle source
# File lib/core/mixin/lookup.rb 268 def lookup_array(properties, default = [], options = {}) 269 config = Config.ensure(options).defaults({ :basic => false }) 270 value, property = lookup(properties, nil, config.import({ :return_property => true, :context => :array })) 271 272 if Util::Data.undef?(value) 273 value = default 274 debug_lookup(config, property, value, "Array default value") 275 276 elsif ! Util::Data.empty?(default) 277 if config.get(:merge, false) 278 value = Util::Data.merge([default, value], config) 279 debug_lookup(config, property, value, "Merged array value with default") 280 end 281 end 282 283 unless value.is_a?(Array) 284 value = ( Util::Data.empty?(value) ? [] : [ value ] ) 285 end 286 287 value = Util::Data.value(value, config.get(:undefined_value, :undefined)) 288 debug_lookup(config, property, value, "Final array value") 289 290 Config.set_property(property, value) 291 CORL.ui.info("\n", { :prefix => false }) if config.get(:debug, false) 292 value 293 end
lookup_base(properties, default = nil, options = {})
click to toggle source
# File lib/core/mixin/lookup.rb 184 def lookup_base(properties, default = nil, options = {}) 185 config = Config.new(Config.ensure(options).export) 186 value = nil 187 188 node = config.delete(:node, nil) 189 190 provisioner = config.get(:provisioner, nil) 191 192 hiera_scope = config.get(:hiera_scope, {}) 193 override = config.get(:override, nil) 194 context = config.get(:context, :priority) 195 debug = config.get(:debug, false) 196 197 return_property = config.get(:return_property, false) 198 199 return node.lookup(properties, default, config) if node 200 201 unless properties.is_a?(Array) 202 properties = [ properties ].flatten 203 end 204 205 first_property = nil 206 properties.each do |property| 207 property = property.to_sym 208 first_property = property unless first_property 209 210 if debug 211 CORL.ui.info("\n", { :prefix => false }) 212 CORL.ui_group(Util::Console.purple(property)) do |ui| 213 ui.info("-----------------------------------------------------") 214 end 215 end 216 217 # Try to load facts first (these can not be overridden) 218 value = fact(property) 219 debug_lookup(config, property, value, "Fact lookup") 220 221 unless value 222 if config_initialized? 223 # Try to find in Hiera data store 224 unless hiera_scope.respond_to?('[]') 225 hiera_scope = Hiera::Scope.new(hiera_scope) 226 end 227 228 hiera_scope = string_map(hiera_scope) if hiera_scope.is_a?(Hash) 229 value = hiera.lookup(property.to_s, nil, hiera_scope, override, context.to_sym) 230 231 debug_lookup(config, property, value, "Hiera lookup") 232 end 233 234 if provisioner && value.nil? 235 # Search the provisioner scope (only admins can provision a machine) 236 value = CORL.provisioner({ :name => :lookup }, provisioner).lookup(property, default, config) 237 debug_lookup(config, property, value, "Provisioner lookup") 238 end 239 end 240 end 241 if value.nil? # Resort to default 242 value = default 243 debug_lookup(config, first_property, value, "Default value") 244 end 245 value = Util::Data.value(value, config.get(:undefined_value, :undefined)) 246 247 if Config.get_property(first_property).nil? || value 248 Config.set_property(first_property, value) 249 end 250 251 debug_lookup(config, first_property, value, 'Internalized value') 252 253 if return_property 254 return value, first_property 255 end 256 CORL.ui.info("\n", { :prefix => false }) if debug 257 value 258 end
lookup_hash(properties, default = {}, options = {})
click to toggle source
# File lib/core/mixin/lookup.rb 297 def lookup_hash(properties, default = {}, options = {}) 298 config = Config.ensure(options).defaults({ :basic => false }) 299 value, property = lookup(properties, nil, config.import({ :return_property => true, :context => :hash })) 300 301 if Util::Data.undef?(value) 302 value = default 303 debug_lookup(config, property, value, "Hash default value") 304 305 elsif ! Util::Data.empty?(default) 306 if config.get(:merge, false) 307 value = Util::Data.merge([default, value], config) 308 debug_lookup(config, property, value, "Merged hash value with default") 309 end 310 end 311 312 unless value.is_a?(Hash) 313 value = ( Util::Data.empty?(value) ? {} : { :value => value } ) 314 end 315 316 value = Util::Data.value(value, config.get(:undefined_value, :undefined)) 317 debug_lookup(config, property, value, "Final hash value") 318 319 Config.set_property(property, value) 320 CORL.ui.info("\n", { :prefix => false }) if config.get(:debug, false) 321 value 322 end
normalize(data, override = nil, options = {})
click to toggle source
# File lib/core/mixin/lookup.rb 326 def normalize(data, override = nil, options = {}) 327 config = Config.ensure(options).import({ :context => :hash }).defaults({ :basic => false }) 328 results = {} 329 330 unless Util::Data.undef?(override) 331 case data 332 when String, Symbol 333 data = [ data, override ] if data != override 334 when Array 335 data << override unless data.include?(override) 336 when Hash 337 data = [ data, override ] 338 end 339 end 340 341 case data 342 when String, Symbol 343 results = lookup(data.to_s, {}, config) 344 345 when Array 346 data.each do |item| 347 if item.is_a?(String) || item.is_a?(Symbol) 348 item = lookup(item.to_s, {}, config) 349 end 350 unless Util::Data.undef?(item) 351 results = Util::Data.merge([ results, item ], config) 352 end 353 end 354 355 when Hash 356 results = data 357 end 358 results 359 end