class CORL::Util::Puppet::Resource

Public Class Methods

new(group, info, title, properties = {}) click to toggle source
Calls superclass method
   # File lib/core/util/puppet/resource.rb
12 def initialize(group, info, title, properties = {})
13   super({
14     :group => group,
15     :title => string(title),
16     :info  => symbol_map(hash(info)),
17     :ready => false
18   }, {}, true, true, false)
19 
20   import(properties)
21 end
render(resource_info, options = {}) click to toggle source
    # File lib/core/util/puppet/resource.rb
125 def self.render(resource_info, options = {})
126   resource = string_map(resource_info)
127   config   = Config.ensure(options)
128 
129   resource.keys.each do |name|
130     if match = name.to_s.match(/^(.+)_template$/)
131       target = match.captures[0]
132 
133       config.set(:normalize_template, config.get("normalize_#{target}", true))
134       config.set(:interpolate_template, config.get("interpolate_#{target}", true))
135 
136       input_data       = resource[target]
137       plugin           = CORL.template(config.import({ :new => true }), resource[name])
138       resource[target] = plugin.render(input_data)
139       CORL.remove_plugin(plugin)
140 
141       if config.get(:debug, false)
142         CORL.ui.info("\n", { :prefix => false })
143         CORL.ui_group("#{resource[name]} template", :cyan) do |ui|
144           ui.info("-----------------------------------------------------")
145 
146           source_dump  = Console.blue(Data.to_json(input_data, true))
147           value_render = Console.green(resource[target])
148 
149           ui.info("Data:\n#{source_dump}")
150           ui.info("Rendered:\n#{value_render}")
151           ui.info("\n", { :prefix => false })
152         end
153       end
154       resource.delete(name)
155     end
156   end
157   return resource
158 end

Public Instance Methods

defaults(defaults, options = {}) click to toggle source
Calls superclass method
   # File lib/core/util/puppet/resource.rb
62 def defaults(defaults, options = {})
63   super(defaults, options)
64 
65   _set(:ready, false)
66   return self
67 end
ensure_ready(options = {}) click to toggle source
   # File lib/core/util/puppet/resource.rb
81 def ensure_ready(options = {})
82   unless ready
83     process(options)
84   end
85 end
group() click to toggle source
   # File lib/core/util/puppet/resource.rb
26 def group
27   return _get(:group)
28 end
import(properties, options = {}) click to toggle source
Calls superclass method
   # File lib/core/util/puppet/resource.rb
71 def import(properties, options = {})
72   super(properties, options)
73 
74   _set(:ready, false)
75   return self
76 end
info(default = {}) click to toggle source
   # File lib/core/util/puppet/resource.rb
32 def info(default = {})
33   return hash(_get(:info, default))
34 end
info=(info) click to toggle source
   # File lib/core/util/puppet/resource.rb
38 def info=info
39   _set(:info, hash(info))
40 end
process(options = {}) click to toggle source
   # File lib/core/util/puppet/resource.rb
89 def process(options = {})
90   config = Config.ensure(options)
91 
92   tag(config[:tag])
93   render(config)
94   translate(config)
95 
96   _set(:ready, true) # Ready for resource creation
97   return self
98 end
ready(default = false) click to toggle source
   # File lib/core/util/puppet/resource.rb
56 def ready(default = false)
57   return test(_get(:ready, default))
58 end
render(options = {}) click to toggle source
    # File lib/core/util/puppet/resource.rb
162 def render(options = {})
163   resource = self.class.render(export, options)
164   clear
165   import(Config.ensure(resource).export, options)
166   return self
167 end
tag(tags, append = true) click to toggle source
    # File lib/core/util/puppet/resource.rb
102 def tag(tags, append = true)
103   unless Data.empty?(tags)
104     if tags.is_a?(String)
105       tags = tags.to_s.split(/\s*,\s*/)
106     else
107       tags = tags.flatten
108     end
109     resource_tags = get(:tag)
110 
111     if ! resource_tags || ! append
112       set(:tag, tags)
113     else
114       tags.each do |tag|
115         resource_tags << tag unless resource_tags.include?(tag)
116       end
117       set(:tag, resource_tags)
118     end
119   end
120   return self
121 end
title(default = '') click to toggle source
   # File lib/core/util/puppet/resource.rb
44 def title(default = '')
45   return string(_get(:title, default))
46 end
title=(info) click to toggle source
   # File lib/core/util/puppet/resource.rb
50 def title=info
51   _set(:title, string(info))
52 end
translate(options = {}) click to toggle source
    # File lib/core/util/puppet/resource.rb
171 def translate(options = {})
172   config = Config.ensure(options)
173 
174   set(:before, translate_resource_refs(get(:before), config)) if get(:before)
175   set(:notify, translate_resource_refs(get(:notify), config)) if get(:notify)
176   set(:require, translate_resource_refs(get(:require), config)) if get(:require)
177   set(:subscribe, translate_resource_refs(get(:subscribe), config)) if get(:subscribe)
178 
179   return self
180 end

Protected Instance Methods

translate_resource_refs(resource_refs, options = {}) click to toggle source
    # File lib/core/util/puppet/resource.rb
185 def translate_resource_refs(resource_refs, options = {})
186   return :undef if Data.undef?(resource_refs)
187 
188   config         = Config.ensure(options)
189   resource_names = config.get(:resource_names, {})
190   title_prefix   = config.get(:title_prefix, '')
191 
192   title_pattern  = config.get(:title_pattern, '^\s*([^\[\]]+)\s*$')
193   title_group    = config.get(:title_var_group, 1)
194   title_flags    = config.get(:title_flags, '')
195   title_regexp   = Regexp.new(title_pattern, title_flags.split(''))
196 
197   allow_single   = config.get(:allow_single_return, true)
198 
199   type_name      = info[:name].sub(/^\@?\@/, '')
200   values         = []
201 
202   composite_resources = group.composite_resources
203 
204   case resource_refs
205   when String
206     if resource_refs.empty?
207       return :undef
208     else
209       resource_refs = resource_refs.split(/\s*,\s*/)
210     end
211 
212   when ::Puppet::Resource
213     resource_refs = [ resource_refs ]
214   end
215 
216   resource_refs.collect! do |value|
217     if value.is_a?(::Puppet::Resource) || ! value.to_s.match(title_regexp)
218       value.to_s
219 
220     elsif resource_names.has_key?(value.to_sym)
221       if ! title_prefix.empty?
222         "#{title_prefix}_#{value}"
223       else
224         value.to_s
225       end
226 
227     elsif composite_resources.has_key?(value.to_sym) && ! composite_resources[value.to_sym].empty?
228       results = []
229       composite_resources[value.to_sym].each do |resource_name|
230         unless title_prefix.empty?
231           resource_name = "#{title_prefix}_#{resource_name}"
232         end
233         results << resource_name
234       end
235       results
236 
237     else
238       nil
239     end
240   end
241 
242   resource_refs.flatten.each do |ref|
243     unless ref.nil?
244       unless ref.is_a?(::Puppet::Resource)
245         ref = ref.match(title_regexp) ? ::Puppet::Resource.new(type_name, ref) : ::Puppet::Resource.new(ref)
246       end
247       values << ref unless ref.nil?
248     end
249   end
250 
251   return values[0] if allow_single && values.length == 1
252   return values
253 end