Class BoxGrinder::ApplianceConfigHelper
In: lib/boxgrinder-core/helpers/appliance-config-helper.rb
lib/boxgrinder-core/helpers/appliance-config-helper.rb
Parent: Object

Methods

Public Class methods

[Source]

    # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 25
25:     def initialize(appliance_configs)
26:       @appliance_configs = appliance_configs.reverse
27:     end

[Source]

    # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 25
25:     def initialize(appliance_configs)
26:       @appliance_configs = appliance_configs.reverse
27:     end

Public Instance methods

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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
BGBUILD-276
Import files into appliance via appliance definition file (Files section)

issues.jboss.org/browse/BGBUILD-276

[Source]

     # 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
BGBUILD-276
Import files into appliance via appliance definition file (Files section)

issues.jboss.org/browse/BGBUILD-276

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[Validate]