| 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 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_files
41: merge_post_operations
42:
43: @appliance_config
44: 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_files
41: merge_post_operations
42:
43: @appliance_config
44: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 99
99: def merge_cpus
100: merge_field('hardware.cpus') { |cpus| @appliance_config.hardware.cpus = cpus if cpus > @appliance_config.hardware.cpus }
101: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 99
99: def merge_cpus
100: merge_field('hardware.cpus') { |cpus| @appliance_config.hardware.cpus = cpus if cpus > @appliance_config.hardware.cpus }
101: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 46
46: def merge_default_repos
47: @appliance_config.default_repos = true
48:
49: @appliance_configs.each do |appliance_config|
50: if appliance_config.default_repos == false
51: @appliance_config.default_repos = false
52: break
53: end
54: end
55: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 46
46: def merge_default_repos
47: @appliance_config.default_repos = true
48:
49: @appliance_configs.each do |appliance_config|
50: if appliance_config.default_repos == false
51: @appliance_config.default_repos = false
52: break
53: end
54: end
55: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 226
226: def merge_field(field, force = false)
227: @appliance_configs.each do |appliance_config|
228: value = eval("appliance_config.#{field}")
229: next if value.nil? and !force
230: yield value
231: end
232: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 226
226: def merge_field(field, force = false)
227: @appliance_configs.each do |appliance_config|
228: value = eval("appliance_config.#{field}")
229: next if value.nil? and !force
230: yield value
231: end
232: end
issues.jboss.org/browse/BGBUILD-276
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 196
196: def merge_files
197: @appliance_config.files.each_value { |dirs| dirs.clear }
198:
199: included = []
200:
201: @appliance_configs.each do |appliance_config|
202: next if included.include?(appliance_config)
203: appliance_config.files.each do |dir, files|
204: @appliance_config.files[dir] = [] if @appliance_config.files[dir].nil?
205: files.each { |f| @appliance_config.files[dir] << substitute_vars(f) }
206: end
207: included << appliance_config
208: end
209: end
issues.jboss.org/browse/BGBUILD-276
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 196
196: def merge_files
197: @appliance_config.files.each_value { |dirs| dirs.clear }
198:
199: included = []
200:
201: @appliance_configs.each do |appliance_config|
202: next if included.include?(appliance_config)
203: appliance_config.files.each do |dir, files|
204: @appliance_config.files[dir] = [] if @appliance_config.files[dir].nil?
205: files.each { |f| @appliance_config.files[dir] << substitute_vars(f) }
206: end
207: included << appliance_config
208: end
209: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 93
93: def merge_hardware
94: merge_cpus
95: merge_partitions
96: merge_memory
97: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 93
93: def merge_hardware
94: merge_cpus
95: merge_partitions
96: merge_memory
97: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 140
140: def merge_memory
141: merge_field('hardware.memory') { |memory| @appliance_config.hardware.memory = memory if memory > @appliance_config.hardware.memory }
142: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 140
140: def merge_memory
141: merge_field('hardware.memory') { |memory| @appliance_config.hardware.memory = memory if memory > @appliance_config.hardware.memory }
142: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 184
184: def merge_packages
185: @appliance_config.packages.clear
186:
187: @appliance_configs.each do |appliance_config|
188: appliance_config.packages.each do |package|
189: @appliance_config.packages << package
190: end
191: end
192: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 184
184: def merge_packages
185: @appliance_config.packages.clear
186:
187: @appliance_configs.each do |appliance_config|
188: appliance_config.packages.each do |package|
189: @appliance_config.packages << package
190: end
191: end
192: end
This will merge partitions from multiple appliances.
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 104
104: def merge_partitions
105: partitions = {}
106:
107: merge_field('hardware.partitions') do |parts|
108: parts.each do |root, partition|
109: if partitions.keys.include?(root)
110: partitions[root]['size'] = partition['size'] if partitions[root]['size'] < partition['size']
111:
112: unless partition['type'].nil?
113: partitions[root].delete('options') if partitions[root]['type'] != partition['type']
114: partitions[root]['type'] = partition['type']
115: else
116: partitions[root]['type'] = @appliance_config.default_filesystem_type
117: end
118: else
119: partitions[root] = {}
120: partitions[root]['size'] = partition['size']
121:
122: unless partition['type'].nil?
123: partitions[root]['type'] = partition['type']
124: else
125: partitions[root]['type'] = @appliance_config.default_filesystem_type
126: end
127: end
128:
129: partitions[root]['passphrase'] = partition['passphrase'] unless partition['passphrase'].nil?
130: partitions[root]['options'] = partition['options'] unless partition['options'].nil?
131: end
132: end
133:
134: # https://bugzilla.redhat.com/show_bug.cgi?id=466275
135: partitions['/boot'] = {'type' => 'ext3', 'size' => 0.1} if partitions['/boot'].nil? and (@appliance_config.os.name == 'sl' or @appliance_config.os.name == 'centos' or @appliance_config.os.name == 'rhel') and @appliance_config.os.version == '5'
136:
137: @appliance_config.hardware.partitions = partitions
138: end
This will merge partitions from multiple appliances.
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 104
104: def merge_partitions
105: partitions = {}
106:
107: merge_field('hardware.partitions') do |parts|
108: parts.each do |root, partition|
109: if partitions.keys.include?(root)
110: partitions[root]['size'] = partition['size'] if partitions[root]['size'] < partition['size']
111:
112: unless partition['type'].nil?
113: partitions[root].delete('options') if partitions[root]['type'] != partition['type']
114: partitions[root]['type'] = partition['type']
115: else
116: partitions[root]['type'] = @appliance_config.default_filesystem_type
117: end
118: else
119: partitions[root] = {}
120: partitions[root]['size'] = partition['size']
121:
122: unless partition['type'].nil?
123: partitions[root]['type'] = partition['type']
124: else
125: partitions[root]['type'] = @appliance_config.default_filesystem_type
126: end
127: end
128:
129: partitions[root]['passphrase'] = partition['passphrase'] unless partition['passphrase'].nil?
130: partitions[root]['options'] = partition['options'] unless partition['options'].nil?
131: end
132: end
133:
134: # https://bugzilla.redhat.com/show_bug.cgi?id=466275
135: partitions['/boot'] = {'type' => 'ext3', 'size' => 0.1} if partitions['/boot'].nil? and (@appliance_config.os.name == 'sl' or @appliance_config.os.name == 'centos' or @appliance_config.os.name == 'rhel') and @appliance_config.os.version == '5'
136:
137: @appliance_config.hardware.partitions = partitions
138: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 211
211: def merge_post_operations
212: @appliance_config.post.each_value { |cmds| cmds.clear }
213:
214: included = []
215:
216: @appliance_configs.each do |appliance_config|
217: next if included.include?(appliance_config)
218: appliance_config.post.each do |platform, cmds|
219: @appliance_config.post[platform] = [] if @appliance_config.post[platform].nil?
220: cmds.each { |cmd| @appliance_config.post[platform] << substitute_vars(cmd) }
221: end
222: included << appliance_config
223: end
224: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 211
211: def merge_post_operations
212: @appliance_config.post.each_value { |cmds| cmds.clear }
213:
214: included = []
215:
216: @appliance_configs.each do |appliance_config|
217: next if included.include?(appliance_config)
218: appliance_config.post.each do |platform, cmds|
219: @appliance_config.post[platform] = [] if @appliance_config.post[platform].nil?
220: cmds.each { |cmd| @appliance_config.post[platform] << substitute_vars(cmd) }
221: end
222: included << appliance_config
223: end
224: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 161
161: def merge_repos
162: @appliance_config.repos.clear
163:
164: @appliance_configs.each do |appliance_config|
165: for repo in appliance_config.repos
166: repo['name'] = substitute_vars(repo['name'])
167: ['baseurl', 'mirrorlist'].each do |type|
168: repo[type] = substitute_vars(repo[type]) unless repo[type].nil?
169: end
170:
171: @appliance_config.repos << repo
172: end
173: end
174: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 161
161: def merge_repos
162: @appliance_config.repos.clear
163:
164: @appliance_configs.each do |appliance_config|
165: for repo in appliance_config.repos
166: repo['name'] = substitute_vars(repo['name'])
167: ['baseurl', 'mirrorlist'].each do |type|
168: repo[type] = substitute_vars(repo[type]) unless repo[type].nil?
169: end
170:
171: @appliance_config.repos << repo
172: end
173: end
174: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 57
57: def merge_variables
58: @appliance_config.variables = {} if @appliance_config.variables.nil?
59: @appliance_configs.each do |appliance_config|
60: appliance_config.variables.each do |var, val|
61: @appliance_config.variables[var] = val
62: end
63: end
64:
65: @appliance_config.variables["OS_NAME"] = @appliance_config.os.name
66: @appliance_config.variables["OS_VERSION"] = @appliance_config.os.version
67: @appliance_config.variables["ARCH"] = @appliance_config.hardware.arch
68: @appliance_config.variables["BASE_ARCH"] = @appliance_config.hardware.base_arch
69:
70: resolve
71: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 57
57: def merge_variables
58: @appliance_config.variables = {} if @appliance_config.variables.nil?
59: @appliance_configs.each do |appliance_config|
60: appliance_config.variables.each do |var, val|
61: @appliance_config.variables[var] = val
62: end
63: end
64:
65: @appliance_config.variables["OS_NAME"] = @appliance_config.os.name
66: @appliance_config.variables["OS_VERSION"] = @appliance_config.os.version
67: @appliance_config.variables["ARCH"] = @appliance_config.hardware.arch
68: @appliance_config.variables["BASE_ARCH"] = @appliance_config.hardware.base_arch
69:
70: resolve
71: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 153
153: def prepare_appliances
154: @appliance_config.appliances.clear
155:
156: @appliance_configs.each do |appliance_config|
157: @appliance_config.appliances << appliance_config.name unless appliance_config.name == @appliance_config.name
158: end
159: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 153
153: def prepare_appliances
154: @appliance_config.appliances.clear
155:
156: @appliance_configs.each do |appliance_config|
157: @appliance_config.appliances << appliance_config.name unless appliance_config.name == @appliance_config.name
158: end
159: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 144
144: def prepare_os
145: merge_field('os.name') { |name| @appliance_config.os.name = name.to_s }
146: merge_field('os.version') { |version| @appliance_config.os.version = version.to_s }
147: merge_field('os.password') { |password| @appliance_config.os.password = password.to_s }
148: merge_field('os.pae') { |pae| @appliance_config.os.pae = false unless pae }
149:
150: @appliance_config.os.password = 'boxgrinder' if @appliance_config.os.password.nil?
151: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 144
144: def prepare_os
145: merge_field('os.name') { |name| @appliance_config.os.name = name.to_s }
146: merge_field('os.version') { |version| @appliance_config.os.version = version.to_s }
147: merge_field('os.password') { |password| @appliance_config.os.password = password.to_s }
148: merge_field('os.pae') { |pae| @appliance_config.os.pae = false unless pae }
149:
150: @appliance_config.os.password = 'boxgrinder' if @appliance_config.os.password.nil?
151: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 73
73: def resolve(resolve_stack = nil, resolved_set = Set.new())
74: if resolve_stack.nil?
75: @appliance_config.variables.keys.each { |var| resolve([var], resolved_set) }
76: else
77: var = resolve_stack.last
78: refs = @appliance_config.variables.keys.delete_if { |k|
79: @appliance_config.variables[k].nil? ||
80: @appliance_config.variables[k].index("##{k}#").nil? ||
81: resolve_stack.index(k).nil?
82: }
83: refs.each do |ref|
84: resolve(Array.new(resolve_stack).push(ref), resolved_set) unless resolved_set.include?(ref)
85: while @appliance_config.variables[var].include? "##{ref}#" do
86: @appliance_config.variables[var].gsub!("##{ref}#", @appliance_config.variables[ref])
87: end
88: end
89: resolved_set << var
90: end
91: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 73
73: def resolve(resolve_stack = nil, resolved_set = Set.new())
74: if resolve_stack.nil?
75: @appliance_config.variables.keys.each { |var| resolve([var], resolved_set) }
76: else
77: var = resolve_stack.last
78: refs = @appliance_config.variables.keys.delete_if { |k|
79: @appliance_config.variables[k].nil? ||
80: @appliance_config.variables[k].index("##{k}#").nil? ||
81: resolve_stack.index(k).nil?
82: }
83: refs.each do |ref|
84: resolve(Array.new(resolve_stack).push(ref), resolved_set) unless resolved_set.include?(ref)
85: while @appliance_config.variables[var].include? "##{ref}#" do
86: @appliance_config.variables[var].gsub!("##{ref}#", @appliance_config.variables[ref])
87: end
88: end
89: resolved_set << var
90: end
91: end
# File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 176
176: def substitute_vars(str)
177: return if str.nil?
178: @appliance_config.variables.keys.each do |var|
179: str = str.gsub("##{var}#", @appliance_config.variables[var])
180: end
181: str
182: end