| Class | BoxGrinder::ApplianceConfigHelper |
| In: |
lib/boxgrinder-core/helpers/appliance-config-helper.rb
lib/boxgrinder-core/helpers/appliance-config-helper.rb |
| Parent: | Object |
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 25
25: def initialize(appliance_configs)
26: @appliance_configs = appliance_configs.reverse
27: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 25
25: def initialize(appliance_configs)
26: @appliance_configs = appliance_configs.reverse
27: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 136
136: def default_filesystem_type
137: fs = 'ext4'
138:
139: case @appliance_config.os.name
140: when 'rhel', 'centos'
141: case @appliance_config.os.version
142: when '5'
143: fs = 'ext3'
144: end
145: end
146:
147: fs
148: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 136
136: def default_filesystem_type
137: fs = 'ext4'
138:
139: case @appliance_config.os.name
140: when 'rhel', 'centos'
141: case @appliance_config.os.version
142: when '5'
143: fs = 'ext3'
144: end
145: end
146:
147: fs
148: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 29
29: def merge(appliance_config)
30: @appliance_config = appliance_config
31:
32: prepare_os
33: prepare_appliances
34:
35: merge_variables
36: merge_hardware
37: merge_repos
38: merge_default_repos
39: merge_packages
40: merge_post_operations
41:
42: @appliance_config
43: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 29
29: def merge(appliance_config)
30: @appliance_config = appliance_config
31:
32: prepare_os
33: prepare_appliances
34:
35: merge_variables
36: merge_hardware
37: merge_repos
38: merge_default_repos
39: merge_packages
40: merge_post_operations
41:
42: @appliance_config
43: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 98
98: def merge_cpus
99: merge_field('hardware.cpus') { |cpus| @appliance_config.hardware.cpus = cpus if cpus > @appliance_config.hardware.cpus }
100: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 98
98: def merge_cpus
99: merge_field('hardware.cpus') { |cpus| @appliance_config.hardware.cpus = cpus if cpus > @appliance_config.hardware.cpus }
100: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 45
45: def merge_default_repos
46: @appliance_config.default_repos = true
47:
48: @appliance_configs.each do |appliance_config|
49: if appliance_config.default_repos == false
50: @appliance_config.default_repos = false
51: break
52: end
53: end
54: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 45
45: def merge_default_repos
46: @appliance_config.default_repos = true
47:
48: @appliance_configs.each do |appliance_config|
49: if appliance_config.default_repos == false
50: @appliance_config.default_repos = false
51: break
52: end
53: end
54: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 216
216: def merge_field(field, force = false)
217: @appliance_configs.each do |appliance_config|
218: value = eval("appliance_config.#{field}")
219: next if value.nil? and !force
220: yield value
221: end
222: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 216
216: def merge_field(field, force = false)
217: @appliance_configs.each do |appliance_config|
218: value = eval("appliance_config.#{field}")
219: next if value.nil? and !force
220: yield value
221: end
222: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 92
92: def merge_hardware
93: merge_cpus
94: merge_partitions
95: merge_memory
96: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 92
92: def merge_hardware
93: merge_cpus
94: merge_partitions
95: merge_memory
96: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 150
150: def merge_memory
151: merge_field('hardware.memory') { |memory| @appliance_config.hardware.memory = memory if memory > @appliance_config.hardware.memory }
152: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 150
150: def merge_memory
151: merge_field('hardware.memory') { |memory| @appliance_config.hardware.memory = memory if memory > @appliance_config.hardware.memory }
152: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 191
191: def merge_packages
192: @appliance_config.packages.clear
193:
194: @appliance_configs.each do |appliance_config|
195: appliance_config.packages.each do |package|
196: @appliance_config.packages << package
197: end
198: end
199: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 191
191: def merge_packages
192: @appliance_config.packages.clear
193:
194: @appliance_configs.each do |appliance_config|
195: appliance_config.packages.each do |package|
196: @appliance_config.packages << package
197: end
198: end
199: end
This will merge partitions from multiple appliances.
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 103
103: def merge_partitions
104: partitions = {}
105:
106: merge_field('hardware.partitions') do |parts|
107: parts.each do |root, partition|
108: if partitions.keys.include?(root)
109: partitions[root]['size'] = partition['size'] if partitions[root]['size'] < partition['size']
110:
111: unless partition['type'].nil?
112: partitions[root].delete('options') if partitions[root]['type'] != partition['type']
113: partitions[root]['type'] = partition['type']
114: else
115: partitions[root]['type'] = default_filesystem_type
116: end
117: else
118: partitions[root] = {}
119: partitions[root]['size'] = partition['size']
120:
121: unless partition['type'].nil?
122: partitions[root]['type'] = partition['type']
123: else
124: partitions[root]['type'] = default_filesystem_type
125: end
126: end
127:
128: partitions[root]['passphrase'] = partition['passphrase'] unless partition['passphrase'].nil?
129: partitions[root]['options'] = partition['options'] unless partition['options'].nil?
130: end
131: end
132:
133: @appliance_config.hardware.partitions = partitions
134: end
This will merge partitions from multiple appliances.
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 103
103: def merge_partitions
104: partitions = {}
105:
106: merge_field('hardware.partitions') do |parts|
107: parts.each do |root, partition|
108: if partitions.keys.include?(root)
109: partitions[root]['size'] = partition['size'] if partitions[root]['size'] < partition['size']
110:
111: unless partition['type'].nil?
112: partitions[root].delete('options') if partitions[root]['type'] != partition['type']
113: partitions[root]['type'] = partition['type']
114: else
115: partitions[root]['type'] = default_filesystem_type
116: end
117: else
118: partitions[root] = {}
119: partitions[root]['size'] = partition['size']
120:
121: unless partition['type'].nil?
122: partitions[root]['type'] = partition['type']
123: else
124: partitions[root]['type'] = default_filesystem_type
125: end
126: end
127:
128: partitions[root]['passphrase'] = partition['passphrase'] unless partition['passphrase'].nil?
129: partitions[root]['options'] = partition['options'] unless partition['options'].nil?
130: end
131: end
132:
133: @appliance_config.hardware.partitions = partitions
134: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 201
201: def merge_post_operations
202: @appliance_config.post.each_value { |cmds| cmds.clear }
203:
204: included = []
205:
206: @appliance_configs.each do |appliance_config|
207: next if included.include?(appliance_config)
208: appliance_config.post.each do |platform, cmds|
209: @appliance_config.post[platform] = [] if @appliance_config.post[platform].nil?
210: cmds.each { |cmd| @appliance_config.post[platform] << substitute_vars(cmd) }
211: end
212: included << appliance_config
213: end
214: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 201
201: def merge_post_operations
202: @appliance_config.post.each_value { |cmds| cmds.clear }
203:
204: included = []
205:
206: @appliance_configs.each do |appliance_config|
207: next if included.include?(appliance_config)
208: appliance_config.post.each do |platform, cmds|
209: @appliance_config.post[platform] = [] if @appliance_config.post[platform].nil?
210: cmds.each { |cmd| @appliance_config.post[platform] << substitute_vars(cmd) }
211: end
212: included << appliance_config
213: end
214: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 168
168: def merge_repos
169: @appliance_config.repos.clear
170:
171: @appliance_configs.each do |appliance_config|
172: for repo in appliance_config.repos
173: repo['name'] = substitute_vars(repo['name'])
174: ['baseurl', 'mirrorlist'].each do |type|
175: repo[type] = substitute_vars(repo[type]) unless repo[type].nil?
176: end
177:
178: @appliance_config.repos << repo
179: end
180: end
181: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 168
168: def merge_repos
169: @appliance_config.repos.clear
170:
171: @appliance_configs.each do |appliance_config|
172: for repo in appliance_config.repos
173: repo['name'] = substitute_vars(repo['name'])
174: ['baseurl', 'mirrorlist'].each do |type|
175: repo[type] = substitute_vars(repo[type]) unless repo[type].nil?
176: end
177:
178: @appliance_config.repos << repo
179: end
180: end
181: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 56
56: def merge_variables
57: @appliance_config.variables = {} if @appliance_config.variables.nil?
58: @appliance_configs.each do |appliance_config|
59: appliance_config.variables.each do |var, val|
60: @appliance_config.variables[var] = val
61: end
62: end
63:
64: @appliance_config.variables["OS_NAME"] = @appliance_config.os.name
65: @appliance_config.variables["OS_VERSION"] = @appliance_config.os.version
66: @appliance_config.variables["ARCH"] = @appliance_config.hardware.arch
67: @appliance_config.variables["BASE_ARCH"] = @appliance_config.hardware.base_arch
68:
69: resolve
70: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 56
56: def merge_variables
57: @appliance_config.variables = {} if @appliance_config.variables.nil?
58: @appliance_configs.each do |appliance_config|
59: appliance_config.variables.each do |var, val|
60: @appliance_config.variables[var] = val
61: end
62: end
63:
64: @appliance_config.variables["OS_NAME"] = @appliance_config.os.name
65: @appliance_config.variables["OS_VERSION"] = @appliance_config.os.version
66: @appliance_config.variables["ARCH"] = @appliance_config.hardware.arch
67: @appliance_config.variables["BASE_ARCH"] = @appliance_config.hardware.base_arch
68:
69: resolve
70: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 160
160: def prepare_appliances
161: @appliance_config.appliances.clear
162:
163: @appliance_configs.each do |appliance_config|
164: @appliance_config.appliances << appliance_config.name unless appliance_config.name == @appliance_config.name
165: end
166: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 160
160: def prepare_appliances
161: @appliance_config.appliances.clear
162:
163: @appliance_configs.each do |appliance_config|
164: @appliance_config.appliances << appliance_config.name unless appliance_config.name == @appliance_config.name
165: end
166: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 154
154: def prepare_os
155: merge_field('os.name') { |name| @appliance_config.os.name = name.to_s }
156: merge_field('os.version') { |version| @appliance_config.os.version = version.to_s }
157: merge_field('os.password') { |password| @appliance_config.os.password = password.to_s }
158: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 154
154: def prepare_os
155: merge_field('os.name') { |name| @appliance_config.os.name = name.to_s }
156: merge_field('os.version') { |version| @appliance_config.os.version = version.to_s }
157: merge_field('os.password') { |password| @appliance_config.os.password = password.to_s }
158: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 72
72: def resolve(resolve_stack = nil, resolved_set = Set.new())
73: if resolve_stack.nil?
74: @appliance_config.variables.keys.each { |var| resolve([var], resolved_set) }
75: else
76: var = resolve_stack.last
77: refs = @appliance_config.variables.keys.delete_if { |k|
78: @appliance_config.variables[k].nil? ||
79: @appliance_config.variables[k].index("##{k}#").nil? ||
80: resolve_stack.index(k).nil?
81: }
82: refs.each do |ref|
83: resolve(Arrays.new(resolve_stack).push(ref), resolved_set) unless resolved_set.include?(ref)
84: while @appliance_config.variables[var].include? "##{ref}#" do
85: @appliance_config.variables[var].gsub!("##{ref}#", @appliance_config.variables[ref])
86: end
87: end
88: resolved_set << var
89: end
90: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 72
72: def resolve(resolve_stack = nil, resolved_set = Set.new())
73: if resolve_stack.nil?
74: @appliance_config.variables.keys.each { |var| resolve([var], resolved_set) }
75: else
76: var = resolve_stack.last
77: refs = @appliance_config.variables.keys.delete_if { |k|
78: @appliance_config.variables[k].nil? ||
79: @appliance_config.variables[k].index("##{k}#").nil? ||
80: resolve_stack.index(k).nil?
81: }
82: refs.each do |ref|
83: resolve(Arrays.new(resolve_stack).push(ref), resolved_set) unless resolved_set.include?(ref)
84: while @appliance_config.variables[var].include? "##{ref}#" do
85: @appliance_config.variables[var].gsub!("##{ref}#", @appliance_config.variables[ref])
86: end
87: end
88: resolved_set << var
89: end
90: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 183
183: def substitute_vars(str)
184: return if str.nil?
185: @appliance_config.variables.keys.each do |var|
186: str = str.gsub("##{var}#", @appliance_config.variables[var])
187: end
188: str
189: end