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