Class: Chef::Topo::TopoV1Converter
Overview
Convert V1 topology JSON to V2
Constant Summary
collapse
- PRIORITIES =
%w(default force_default normal override force_override)
Instance Attribute Summary
Attributes inherited from Converter
#input
Instance Method Summary
collapse
Methods inherited from Converter
convert, converter, #initialize, load_converter, register_converter
Instance Method Details
#cleanup_output ⇒ Object
117
118
119
120
|
# File 'lib/chef/topo/converter/topo_v1.rb', line 117
def cleanup_output
@output.delete('cookbook_attributes')
@output
end
|
#convert(data = nil) ⇒ Object
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/chef/topo/converter/topo_v1.rb', line 33
def convert(data = nil)
@input = data if data
@output = @input.dup
determine_strategy
@output['nodes'] = []
@input['nodes'].each do |n|
@output['nodes'] << convert_node(n)
end
cleanup_output
end
|
#convert_node(n) ⇒ Object
44
45
46
47
48
49
|
# File 'lib/chef/topo/converter/topo_v1.rb', line 44
def convert_node(n)
combined = merge_cookbook_attrs(n)
type = node_type(n)
combined['node_type'] ||= type if type
combined
end
|
#determine_strategy ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/chef/topo/converter/topo_v1.rb', line 51
def determine_strategy
@output['strategy'] = 'direct_to_node'
cookbooks = @input['cookbook_attributes']
return unless cookbooks && cookbooks.length > 0
cookbooks.each do |cb|
cond = cb['conditional'] || []
next unless !cond.empty? || PRIORITIES.any? { |k| cb.key?(k) }
via_cookbook_strategy(cb)
break
end
end
|
#merge_cookbook_attrs(node) ⇒ Object
Combine cookbook attributes into node
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/chef/topo/converter/topo_v1.rb', line 82
def merge_cookbook_attrs(node)
cb_attr_array = @input['cookbook_attributes']
combined = node.dup
return combined unless cb_attr_array
cb_attr_array.each do |cb_attrs|
merge_copy(combined, cb_attrs)
cond = cb_attrs['conditional']
next unless cond
merge_copy_cond_attrs(combined, cond)
end
combined
end
|
#merge_copy(dest, source) ⇒ Object
73
74
75
76
77
78
79
|
# File 'lib/chef/topo/converter/topo_v1.rb', line 73
def merge_copy(dest, source)
PRIORITIES.each do |p|
if source.key?(p)
dest[p] = Chef::Mixin::DeepMerge.merge(dest[p], source[p])
end
end
end
|
#merge_copy_cond_attrs(combined, cond) ⇒ Object
101
102
103
104
105
106
107
108
109
|
# File 'lib/chef/topo/converter/topo_v1.rb', line 101
def merge_copy_cond_attrs(combined, cond)
topo = (combined['normal'] || {})['topo'] || {}
cond.each do |cond_attrs|
if topo[cond_attrs['qualifier']] == cond_attrs['value']
merge_copy(combined, cond_attrs)
end
end
combined
end
|
#node_type(node) ⇒ Object
111
112
113
114
115
|
# File 'lib/chef/topo/converter/topo_v1.rb', line 111
def node_type(node)
return node['node_type'] if node['node_type']
return nil unless node['normal'] && node['normal']['topo']
node['normal']['topo']['node_type']
end
|
#via_cookbook_strategy(cb) ⇒ Object
64
65
66
67
68
69
70
|
# File 'lib/chef/topo/converter/topo_v1.rb', line 64
def via_cookbook_strategy(cb)
@output['strategy'] = 'via_cookbook'
@output['strategy_data'] = {
'cookbook' => cb['cookbook'] || @output['name'],
'filename' => cb['filename'] || 'attributes'
}
end
|