Class: Ironfan::Dsl::Component
Instance Attribute Summary
#underlay
Class Method Summary
collapse
Instance Method Summary
collapse
#to_node
#_skip_fields, #skip_fields, #to_manifest
#deep_resolve, #merge_resolve, #merge_values, #read_resolved_attribute, #read_set_attribute, #read_set_or_underlay_attribute, #read_underlay_attribute, #resolve, #resolve!, #resolve_value
#_cookbook_reqs, #children, #cookbook_req, #cookbook_reqs, #join_req
Methods inherited from Builder
ui, #ui
Constructor Details
#initialize(attrs, &blk) ⇒ Component
Returns a new instance of Component.
13
14
15
16
17
18
|
# File 'lib/ironfan/dsl/component.rb', line 13
def initialize(attrs, &blk)
attrs.merge!(facet_name: (attrs[:owner].name unless attrs[:owner].nil? or not attrs[:owner].is_a?(Facet)),
cluster_name: (attrs[:owner].cluster_name unless attrs[:owner].nil?),
realm_name: (attrs[:owner].realm_name unless attrs[:owner].nil?))
super attrs, &blk
end
|
Class Method Details
.announce_name ⇒ Object
41
42
43
|
# File 'lib/ironfan/dsl/component.rb', line 41
def self.announce_name
plugin_name
end
|
.from_node(node = NilCheckDelegate.new(nil)) ⇒ Object
35
36
37
38
39
|
# File 'lib/ironfan/dsl/component.rb', line 35
def self.from_node(node = NilCheckDelegate.new(nil))
cluster_name = node['cluster_name'].to_s
realm_name = node['realm_name'].to_s
super(node).tap{ |x| x.receive!(cluster_name: cluster_name, realm_name: realm_name) }
end
|
.plugin_hook(owner, attrs, plugin_name, full_name, &blk) ⇒ Object
20
21
22
23
|
# File 'lib/ironfan/dsl/component.rb', line 20
def self.plugin_hook owner, attrs, plugin_name, full_name, &blk
(this = new(attrs.merge(owner: owner, name: full_name), &blk))._project(owner)
this
end
|
.to_node ⇒ Object
29
30
31
32
33
|
# File 'lib/ironfan/dsl/component.rb', line 29
def self.to_node
super.tap do |node|
node.set['cluster_name'] = cluster_name
end
end
|
Instance Method Details
#_project(compute) ⇒ Object
49
50
51
52
|
# File 'lib/ironfan/dsl/component.rb', line 49
def _project(compute)
compute.component name, self
project(compute)
end
|
#announce(component_name) ⇒ Object
62
63
64
65
66
|
# File 'lib/ironfan/dsl/component.rb', line 62
def announce(component_name)
Chef::Log.debug("announced #{announce_name} for #{cluster_name}")
realm_announcements[[realm_name, component_name]] = [cluster_name, facet_name]
realm_subscriptions(component_name).each{|blk| blk.call(cluster_name, facet_name)}
end
|
#announce_name ⇒ Object
45
46
47
|
# File 'lib/ironfan/dsl/component.rb', line 45
def announce_name
self.class.announce_name
end
|
#announce_to(node) ⇒ Object
25
26
27
|
# File 'lib/ironfan/dsl/component.rb', line 25
def announce_to node
node.set['components']["#{cluster_name}-#{name}"]['name'] = name
end
|
#discover(component_name, &blk) ⇒ Object
68
69
70
71
72
73
74
75
|
# File 'lib/ironfan/dsl/component.rb', line 68
def discover(component_name, &blk)
if already_announced = realm_announcements[[realm_name, component_name]]
yield *already_announced
else
Chef::Log.debug("#{cluster_name}: no one announced #{announce_name}. subscribing")
realm_subscriptions(component_name) << blk
end
end
|
#realm_announcements ⇒ Object
54
55
56
|
# File 'lib/ironfan/dsl/component.rb', line 54
def realm_announcements
(@@realm_announcements ||= {})
end
|
#realm_subscriptions(component_name) ⇒ Object
58
59
60
|
# File 'lib/ironfan/dsl/component.rb', line 58
def realm_subscriptions component_name
(@@realm_subscriptions ||= {})[component_name] ||= []
end
|