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