Class: Hieracles::Node
Instance Attribute Summary collapse
Instance Method Summary
collapse
#ask_about, #parse, #setio
Methods included from Utils
#deep_sort, #local_merge!, #max_key_length, #sym_keys, #to_deep_hash, #to_shallow_hash
Constructor Details
#initialize(fqdn, options) ⇒ Node
Returns a new instance of Node.
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/hieracles/node.rb', line 13
def initialize(fqdn, options)
@fqdn = fqdn
Config.load(options)
@hiera = Hieracles::Hiera.new
@hiera_params = { fqdn: @fqdn }.
merge(get_hiera_params(@fqdn)).
merge(Config.)
@facts = deep_sort(@hiera_params.
merge(Config.scope).
merge(puppet_facts))
end
|
Instance Attribute Details
#facts ⇒ Object
Returns the value of attribute facts.
11
12
13
|
# File 'lib/hieracles/node.rb', line 11
def facts
@facts
end
|
#hiera ⇒ Object
Returns the value of attribute hiera.
11
12
13
|
# File 'lib/hieracles/node.rb', line 11
def hiera
@hiera
end
|
#hiera_params ⇒ Object
Returns the value of attribute hiera_params.
11
12
13
|
# File 'lib/hieracles/node.rb', line 11
def hiera_params
@hiera_params
end
|
#notifications ⇒ Object
Returns the value of attribute notifications.
11
12
13
|
# File 'lib/hieracles/node.rb', line 11
def notifications
@notifications
end
|
Instance Method Details
#_get_info ⇒ Object
100
101
102
103
104
105
106
|
# File 'lib/hieracles/node.rb', line 100
def _get_info
= {}
if Config.usedb
= puppetdb_info
end
@hiera_params.merge
end
|
#_get_modules ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/hieracles/node.rb', line 80
def _get_modules
modules = {}
classfiles.each do |c|
if File.exist?(c)
f = File.open(c, "r")
f.each_line do |line|
modules = add_modules(line, modules)
end
f.close
else
raise "Class file #{c} not found."
end
end
modules
end
|
#add_modules(line, modules) ⇒ Object
118
119
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/hieracles/node.rb', line 118
def add_modules(line, modules)
if /^\s*include\s*([-_:a-zA-Z0-9]*)\s*/.match(line)
mod = $1
mainmod = mod[/^[^:]*/]
if Dir.exists? modulepath(mainmod)
modules[mod] = File.join(Config.modulepath, mainmod)
else
modules[mod] = nil
end
end
modules
end
|
#classfiles ⇒ Object
108
109
110
111
112
|
# File 'lib/hieracles/node.rb', line 108
def classfiles
@hiera_params[:classes].map do |cl|
format(Config.classpath, cl)
end
end
|
#error(message) ⇒ Object
186
187
188
189
190
191
192
|
# File 'lib/hieracles/node.rb', line 186
def error(message)
if @notifications
@notifications << Notification.new('node', message, 'error')
else
@notifications = [ Notification.new('node', message, 'error') ]
end
end
|
#files(without_common = true) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/hieracles/node.rb', line 34
def files(without_common = true)
@__files ||= @hiera.hierarchy.reduce([]) do |a, f|
file = parse("#{f}.yaml", @facts, Config.interactive)
if file &&
File.exist?(File.join(@hiera.datapath, file)) &&
(!without_common ||
!file[/common/])
a << File.join(@hiera.datadir, file)
end
a
end
end
|
#get_hiera_params(fqdn) ⇒ Object
25
26
27
28
29
30
31
32
|
# File 'lib/hieracles/node.rb', line 25
def get_hiera_params(fqdn)
@__hiera_params ||= if File.exist?(File.join(Config.encpath, "#{fqdn}.yaml"))
load = YAML.load_file(File.join(Config.encpath, "#{fqdn}.yaml"))
sym_keys(load['parameters']).merge({ classes: load['classes']})
else
raise "Node not found"
end
end
|
#info ⇒ Object
96
97
98
|
# File 'lib/hieracles/node.rb', line 96
def info
@_info ||= _get_info
end
|
#merge_trees(left, right) ⇒ Object
154
155
156
157
158
159
160
161
162
163
|
# File 'lib/hieracles/node.rb', line 154
def merge_trees(left, right)
case @hiera.merge_behavior
when :deeper
left.deep_merge!(right)
when :deep
left.deep_merge(right)
else
local_merge!(left, right)
end
end
|
#merge_value(previous, value) ⇒ Object
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
# File 'lib/hieracles/node.rb', line 165
def merge_value(previous, value)
if value.is_a? Array
if previous == []
deep_sort(value)
else
left = previous.last[:merged]
case @hiera.merge_behavior
when :deeper
deep_sort(left | value)
when :deep
deep_sort(left | value)
else
deep_sort(value)
end
end
else
value
end
end
|
#modulepath(path) ⇒ Object
114
115
116
|
# File 'lib/hieracles/node.rb', line 114
def modulepath(path)
File.join(Config.modulepath, path)
end
|
#modules ⇒ Object
76
77
78
|
# File 'lib/hieracles/node.rb', line 76
def modules
@_modules ||= _get_modules
end
|
#params(without_common = true) ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/hieracles/node.rb', line 51
def params(without_common = true)
params = {}
files(without_common).reverse.each do |f|
data = YAML.load_file(File.join(Config.basepath, f))
if data
s = to_shallow_hash(data)
s.each do |k,v|
params[k] ||= []
params[k] << { value: v, file: f, merged: merge_value(params[k], v) }
end
end
end
params.sort
end
|
#params_tree(without_common = true) ⇒ Object
67
68
69
70
71
72
73
74
|
# File 'lib/hieracles/node.rb', line 67
def params_tree(without_common = true)
params = {}
paths(without_common).reverse.each do |f|
data = YAML.load_file(f) || {}
merge_trees params, data
end
deep_sort(params)
end
|
#paths(without_common = true) ⇒ Object
47
48
49
|
# File 'lib/hieracles/node.rb', line 47
def paths(without_common = true)
files(without_common).map { |p| File.join(Config.basepath, p) }
end
|
#puppet_facts ⇒ Object
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
# File 'lib/hieracles/node.rb', line 135
def puppet_facts
if Config.usedb
resp = request_db.node_facts(@fqdn)
@notifications = resp.notifications
if resp.total_records > 0
resp.data
else
error "not found in puppetdb."
{}
end
else
{}
end
end
|
#puppetdb_info ⇒ Object
131
132
133
|
# File 'lib/hieracles/node.rb', line 131
def puppetdb_info
request_db.node_info(@fqdn).data
end
|
#request_db ⇒ Object
150
151
152
|
# File 'lib/hieracles/node.rb', line 150
def request_db
@_request ||= Hieracles::Puppetdb::Request.new Config.puppetdb
end
|