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_post_operations
41: 
42:       @appliance_config
43:     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_post_operations
41: 
42:       @appliance_config
43:     end

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 208
208:     def merge_field(field, force = false)
209:       @appliance_configs.each do |appliance_config|
210:         value = eval("appliance_config.#{field}")
211:         next if value.nil? and !force
212:         yield value
213:       end
214:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 208
208:     def merge_field(field, force = false)
209:       @appliance_configs.each do |appliance_config|
210:         value = eval("appliance_config.#{field}")
211:         next if value.nil? and !force
212:         yield value
213:       end
214:     end

[Source]

    # 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

[Source]

    # 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

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 139
139:     def merge_memory
140:       merge_field('hardware.memory') { |memory| @appliance_config.hardware.memory = memory if memory > @appliance_config.hardware.memory }
141:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 139
139:     def merge_memory
140:       merge_field('hardware.memory') { |memory| @appliance_config.hardware.memory = memory if memory > @appliance_config.hardware.memory }
141:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 183
183:     def merge_packages
184:       @appliance_config.packages.clear
185: 
186:       @appliance_configs.each do |appliance_config|
187:         appliance_config.packages.each do |package|
188:           @appliance_config.packages << package
189:         end
190:       end
191:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 183
183:     def merge_packages
184:       @appliance_config.packages.clear
185: 
186:       @appliance_configs.each do |appliance_config|
187:         appliance_config.packages.each do |package|
188:           @appliance_config.packages << package
189:         end
190:       end
191:     end

This will merge partitions from multiple appliances.

[Source]

     # 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'] = @appliance_config.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'] = @appliance_config.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:       # https://bugzilla.redhat.com/show_bug.cgi?id=466275
134:       partitions['/boot'] = {'type' => 'ext3', 'size' => 0.1} if partitions['/boot'].nil? and (@appliance_config.os.name == 'centos' or @appliance_config.os.name == 'rhel') and @appliance_config.os.version == '5'
135: 
136:       @appliance_config.hardware.partitions = partitions
137:     end

This will merge partitions from multiple appliances.

[Source]

     # 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'] = @appliance_config.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'] = @appliance_config.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:       # https://bugzilla.redhat.com/show_bug.cgi?id=466275
134:       partitions['/boot'] = {'type' => 'ext3', 'size' => 0.1} if partitions['/boot'].nil? and (@appliance_config.os.name == 'centos' or @appliance_config.os.name == 'rhel') and @appliance_config.os.version == '5'
135: 
136:       @appliance_config.hardware.partitions = partitions
137:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 193
193:     def merge_post_operations
194:       @appliance_config.post.each_value { |cmds| cmds.clear }
195: 
196:       included = []
197: 
198:       @appliance_configs.each do |appliance_config|
199:         next if included.include?(appliance_config)
200:         appliance_config.post.each do |platform, cmds|
201:           @appliance_config.post[platform] = [] if @appliance_config.post[platform].nil?
202:           cmds.each { |cmd| @appliance_config.post[platform] << substitute_vars(cmd) }
203:         end
204:         included << appliance_config
205:       end
206:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 193
193:     def merge_post_operations
194:       @appliance_config.post.each_value { |cmds| cmds.clear }
195: 
196:       included = []
197: 
198:       @appliance_configs.each do |appliance_config|
199:         next if included.include?(appliance_config)
200:         appliance_config.post.each do |platform, cmds|
201:           @appliance_config.post[platform] = [] if @appliance_config.post[platform].nil?
202:           cmds.each { |cmd| @appliance_config.post[platform] << substitute_vars(cmd) }
203:         end
204:         included << appliance_config
205:       end
206:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 160
160:     def merge_repos
161:       @appliance_config.repos.clear
162: 
163:       @appliance_configs.each do |appliance_config|
164:         for repo in appliance_config.repos
165:           repo['name'] = substitute_vars(repo['name'])
166:           ['baseurl', 'mirrorlist'].each do |type|
167:             repo[type] = substitute_vars(repo[type]) unless repo[type].nil?
168:           end
169: 
170:           @appliance_config.repos << repo
171:         end
172:       end
173:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 160
160:     def merge_repos
161:       @appliance_config.repos.clear
162: 
163:       @appliance_configs.each do |appliance_config|
164:         for repo in appliance_config.repos
165:           repo['name'] = substitute_vars(repo['name'])
166:           ['baseurl', 'mirrorlist'].each do |type|
167:             repo[type] = substitute_vars(repo[type]) unless repo[type].nil?
168:           end
169: 
170:           @appliance_config.repos << repo
171:         end
172:       end
173:     end

[Source]

    # 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

[Source]

    # 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

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 152
152:     def prepare_appliances
153:       @appliance_config.appliances.clear
154: 
155:       @appliance_configs.each do |appliance_config|
156:         @appliance_config.appliances << appliance_config.name unless appliance_config.name == @appliance_config.name
157:       end
158:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 152
152:     def prepare_appliances
153:       @appliance_config.appliances.clear
154: 
155:       @appliance_configs.each do |appliance_config|
156:         @appliance_config.appliances << appliance_config.name unless appliance_config.name == @appliance_config.name
157:       end
158:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 143
143:     def prepare_os
144:       merge_field('os.name') { |name| @appliance_config.os.name = name.to_s }
145:       merge_field('os.version') { |version| @appliance_config.os.version = version.to_s }
146:       merge_field('os.password') { |password| @appliance_config.os.password = password.to_s }
147:       merge_field('os.pae') { |pae| @appliance_config.os.pae = false unless pae }
148: 
149:       @appliance_config.os.password = 'boxgrinder' if @appliance_config.os.password.nil?
150:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 143
143:     def prepare_os
144:       merge_field('os.name') { |name| @appliance_config.os.name = name.to_s }
145:       merge_field('os.version') { |version| @appliance_config.os.version = version.to_s }
146:       merge_field('os.password') { |password| @appliance_config.os.password = password.to_s }
147:       merge_field('os.pae') { |pae| @appliance_config.os.pae = false unless pae }
148: 
149:       @appliance_config.os.password = 'boxgrinder' if @appliance_config.os.password.nil?
150:     end

[Source]

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

[Source]

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

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 175
175:     def substitute_vars(str)
176:       return if str.nil?
177:       @appliance_config.variables.keys.each do |var|
178:         str = str.gsub("##{var}#", @appliance_config.variables[var])
179:       end
180:       str
181:     end

[Source]

     # File lib/boxgrinder-core/helpers/appliance-config-helper.rb, line 175
175:     def substitute_vars(str)
176:       return if str.nil?
177:       @appliance_config.variables.keys.each do |var|
178:         str = str.gsub("##{var}#", @appliance_config.variables[var])
179:       end
180:       str
181:     end

[Validate]