Class | BoxGrinder::Appliance |
In: |
lib/boxgrinder-build/appliance.rb
lib/boxgrinder-build/appliance.rb |
Parent: | Object |
# File lib/boxgrinder-build/appliance.rb, line 32 32: def initialize(appliance_definition, config = Config.new, options = {}) 33: @appliance_definition = appliance_definition 34: @config = config 35: @log = options[:log] || LogHelper.new(:level => @config.log_level) 36: end
# File lib/boxgrinder-build/appliance.rb, line 32 32: def initialize(appliance_definition, config = Config.new, options = {}) 33: @appliance_definition = appliance_definition 34: @config = config 35: @log = options[:log] || LogHelper.new(:level => @config.log_level) 36: end
# File lib/boxgrinder-build/appliance.rb, line 85 85: def create 86: @log.debug "Launching new BoxGrinder build..." 87: @log.trace "Used configuration: #{@config.to_yaml.gsub(/(\S*(key|account|cert|username|host)\S*).*:(.*)/, '\1' + ": <REDACTED>")}" 88: 89: PluginHelper.new(@config, :log => @log).load_plugins 90: read_definition 91: validate_definition 92: remove_old_builds if @config.force 93: execute_plugin_chain 94: end
# File lib/boxgrinder-build/appliance.rb, line 85 85: def create 86: @log.debug "Launching new BoxGrinder build..." 87: @log.trace "Used configuration: #{@config.to_yaml.gsub(/(\S*(key|account|cert|username|host)\S*).*:(.*)/, '\1' + ": <REDACTED>")}" 88: 89: PluginHelper.new(@config, :log => @log).load_plugins 90: read_definition 91: validate_definition 92: remove_old_builds if @config.force 93: execute_plugin_chain 94: end
# File lib/boxgrinder-build/appliance.rb, line 137 137: def execute_delivery_plugin(previous_plugin_output) 138: if @config.delivery == :none or @config.delivery.to_s.empty? == nil 139: @log.debug "No delivery method selected, skipping delivering." 140: return 141: end 142: 143: raise "No delivery plugins installed. Install one or more delivery plugin. See http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#Delivery_plugins for more info" if PluginManager.instance.plugins[:delivery].empty? 144: 145: delivery_plugin, delivery_plugin_info = PluginManager.instance.initialize_plugin(:delivery, @config.delivery) 146: delivery_plugin.init(@config, @appliance_config, :log => @log, :plugin_info => delivery_plugin_info, :previous_plugin_info => previous_plugin_output[:plugin_info], :previous_deliverables => previous_plugin_output[:deliverables]) 147: delivery_plugin.run(@config.delivery) 148: end
# File lib/boxgrinder-build/appliance.rb, line 137 137: def execute_delivery_plugin(previous_plugin_output) 138: if @config.delivery == :none or @config.delivery.to_s.empty? == nil 139: @log.debug "No delivery method selected, skipping delivering." 140: return 141: end 142: 143: raise "No delivery plugins installed. Install one or more delivery plugin. See http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#Delivery_plugins for more info" if PluginManager.instance.plugins[:delivery].empty? 144: 145: delivery_plugin, delivery_plugin_info = PluginManager.instance.initialize_plugin(:delivery, @config.delivery) 146: delivery_plugin.init(@config, @appliance_config, :log => @log, :plugin_info => delivery_plugin_info, :previous_plugin_info => previous_plugin_output[:plugin_info], :previous_deliverables => previous_plugin_output[:deliverables]) 147: delivery_plugin.run(@config.delivery) 148: end
# File lib/boxgrinder-build/appliance.rb, line 96 96: def execute_os_plugin 97: raise "No operating system plugins installed. Install one or more operating system plugin. See http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#Operating_system_plugins for more info." if PluginManager.instance.plugins[:os].empty? 98: 99: os_plugin, os_plugin_info = PluginManager.instance.initialize_plugin(:os, @appliance_config.os.name.to_sym) 100: os_plugin.init(@config, @appliance_config, :log => @log, :plugin_info => os_plugin_info) 101: 102: if os_plugin.deliverables_exists? 103: @log.info "Deliverables for #{os_plugin_info[:name]} operating system plugin exists, skipping." 104: return {:deliverables => os_plugin.deliverables} 105: end 106: 107: @log.debug "Executing operating system plugin for #{@appliance_config.os.name}..." 108: os_plugin.run(@appliance_definition) 109: @log.debug "Operating system plugin executed." 110: 111: {:deliverables => os_plugin.deliverables, :plugin_info => os_plugin_info} 112: end
# File lib/boxgrinder-build/appliance.rb, line 96 96: def execute_os_plugin 97: raise "No operating system plugins installed. Install one or more operating system plugin. See http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#Operating_system_plugins for more info." if PluginManager.instance.plugins[:os].empty? 98: 99: os_plugin, os_plugin_info = PluginManager.instance.initialize_plugin(:os, @appliance_config.os.name.to_sym) 100: os_plugin.init(@config, @appliance_config, :log => @log, :plugin_info => os_plugin_info) 101: 102: if os_plugin.deliverables_exists? 103: @log.info "Deliverables for #{os_plugin_info[:name]} operating system plugin exists, skipping." 104: return {:deliverables => os_plugin.deliverables} 105: end 106: 107: @log.debug "Executing operating system plugin for #{@appliance_config.os.name}..." 108: os_plugin.run(@appliance_definition) 109: @log.debug "Operating system plugin executed." 110: 111: {:deliverables => os_plugin.deliverables, :plugin_info => os_plugin_info} 112: end
# File lib/boxgrinder-build/appliance.rb, line 114 114: def execute_platform_plugin(previous_plugin_output) 115: if @config.platform == :none or @config.platform.to_s.empty? == nil 116: @log.debug "No platform selected, skipping platform conversion." 117: return previous_plugin_output 118: end 119: 120: raise "No platform plugins installed. Install one or more platform plugin. See http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#Platform_plugins for more info." if PluginManager.instance.plugins[:platform].empty? 121: 122: platform_plugin, platform_plugin_info = PluginManager.instance.initialize_plugin(:platform, @config.platform) 123: platform_plugin.init(@config, @appliance_config, :log => @log, :plugin_info => platform_plugin_info, :previous_plugin_info => previous_plugin_output[:plugin_info], :previous_deliverables => previous_plugin_output[:deliverables]) 124: 125: if platform_plugin.deliverables_exists? 126: @log.info "Deliverables for #{platform_plugin_info[:name]} platform plugin exists, skipping." 127: return {:deliverables => platform_plugin.deliverables, :plugin_info => platform_plugin_info} 128: end 129: 130: @log.debug "Executing platform plugin for #{@config.platform}..." 131: platform_plugin.run 132: @log.debug "Platform plugin executed." 133: 134: {:deliverables => platform_plugin.deliverables, :plugin_info => platform_plugin_info} 135: end
# File lib/boxgrinder-build/appliance.rb, line 114 114: def execute_platform_plugin(previous_plugin_output) 115: if @config.platform == :none or @config.platform.to_s.empty? == nil 116: @log.debug "No platform selected, skipping platform conversion." 117: return previous_plugin_output 118: end 119: 120: raise "No platform plugins installed. Install one or more platform plugin. See http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#Platform_plugins for more info." if PluginManager.instance.plugins[:platform].empty? 121: 122: platform_plugin, platform_plugin_info = PluginManager.instance.initialize_plugin(:platform, @config.platform) 123: platform_plugin.init(@config, @appliance_config, :log => @log, :plugin_info => platform_plugin_info, :previous_plugin_info => previous_plugin_output[:plugin_info], :previous_deliverables => previous_plugin_output[:deliverables]) 124: 125: if platform_plugin.deliverables_exists? 126: @log.info "Deliverables for #{platform_plugin_info[:name]} platform plugin exists, skipping." 127: return {:deliverables => platform_plugin.deliverables, :plugin_info => platform_plugin_info} 128: end 129: 130: @log.debug "Executing platform plugin for #{@config.platform}..." 131: platform_plugin.run 132: @log.debug "Platform plugin executed." 133: 134: {:deliverables => platform_plugin.deliverables, :plugin_info => platform_plugin_info} 135: end
# File lib/boxgrinder-build/appliance.rb, line 79 79: def execute_plugin_chain 80: @log.info "Building '#{@appliance_config.name}' appliance for #{@appliance_config.hardware.arch} architecture." 81: 82: execute_delivery_plugin(execute_platform_plugin(execute_os_plugin)) 83: end
# File lib/boxgrinder-build/appliance.rb, line 79 79: def execute_plugin_chain 80: @log.info "Building '#{@appliance_config.name}' appliance for #{@appliance_config.hardware.arch} architecture." 81: 82: execute_delivery_plugin(execute_platform_plugin(execute_os_plugin)) 83: end
# File lib/boxgrinder-build/appliance.rb, line 38 38: def read_definition 39: begin 40: # first try to read as appliance definition file 41: appliance_helper = ApplianceDefinitionHelper.new(:log => @log) 42: appliance_helper.read_definitions(@appliance_definition) 43: 44: appliance_configs = appliance_helper.appliance_configs 45: appliance_config = appliance_configs.first 46: rescue 47: # then try to read OS plugin specific format 48: PluginManager.instance.plugins[:os].each_value do |info| 49: plugin = info[:class].new 50: appliance_config = plugin.read_file(@appliance_definition) if plugin.respond_to?(:read_file) 51: break unless appliance_config.nil? 52: end 53: appliance_configs = [appliance_config] 54: end 55: 56: raise "Couldn't read appliance definition file: #{File.basename(@appliance_definition)}" if appliance_config.nil? 57: 58: appliance_config_helper = ApplianceConfigHelper.new(appliance_configs) 59: @appliance_config = appliance_config_helper.merge(appliance_config.clone.init_arch).initialize_paths 60: end
# File lib/boxgrinder-build/appliance.rb, line 38 38: def read_definition 39: begin 40: # first try to read as appliance definition file 41: appliance_helper = ApplianceDefinitionHelper.new(:log => @log) 42: appliance_helper.read_definitions(@appliance_definition) 43: 44: appliance_configs = appliance_helper.appliance_configs 45: appliance_config = appliance_configs.first 46: rescue 47: # then try to read OS plugin specific format 48: PluginManager.instance.plugins[:os].each_value do |info| 49: plugin = info[:class].new 50: appliance_config = plugin.read_file(@appliance_definition) if plugin.respond_to?(:read_file) 51: break unless appliance_config.nil? 52: end 53: appliance_configs = [appliance_config] 54: end 55: 56: raise "Couldn't read appliance definition file: #{File.basename(@appliance_definition)}" if appliance_config.nil? 57: 58: appliance_config_helper = ApplianceConfigHelper.new(appliance_configs) 59: @appliance_config = appliance_config_helper.merge(appliance_config.clone.init_arch).initialize_paths 60: end
# File lib/boxgrinder-build/appliance.rb, line 73 73: def remove_old_builds 74: @log.info "Removing previous builds for #{@appliance_config.name} appliance..." 75: FileUtils.rm_rf(@appliance_config.path.build) 76: @log.debug "Previous builds removed." 77: end
# File lib/boxgrinder-build/appliance.rb, line 73 73: def remove_old_builds 74: @log.info "Removing previous builds for #{@appliance_config.name} appliance..." 75: FileUtils.rm_rf(@appliance_config.path.build) 76: @log.debug "Previous builds removed." 77: end
# File lib/boxgrinder-build/appliance.rb, line 62 62: def validate_definition 63: ApplianceConfigValidator.new(@appliance_config).validate 64: 65: raise "No operating system plugins installed. Install one or more operating system plugin. See http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#Operating_system_plugins for more info." if PluginManager.instance.plugins[:os].empty? 66: 67: os_plugin = PluginManager.instance.plugins[:os][@appliance_config.os.name.to_sym] 68: 69: raise "Not supported operating system selected: #{@appliance_config.os.name}. Make sure you have installed right operating system plugin, see http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#Operating_system_plugins. Supported OSes are: #{PluginManager.instance.plugins[:os].keys.join(", ")}" if os_plugin.nil? 70: raise "Not supported operating system version selected: #{@appliance_config.os.version}. Supported versions are: #{os_plugin[:versions].join(", ")}" unless @appliance_config.os.version.nil? or os_plugin[:versions].include?(@appliance_config.os.version) 71: end
# File lib/boxgrinder-build/appliance.rb, line 62 62: def validate_definition 63: ApplianceConfigValidator.new(@appliance_config).validate 64: 65: raise "No operating system plugins installed. Install one or more operating system plugin. See http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#Operating_system_plugins for more info." if PluginManager.instance.plugins[:os].empty? 66: 67: os_plugin = PluginManager.instance.plugins[:os][@appliance_config.os.name.to_sym] 68: 69: raise "Not supported operating system selected: #{@appliance_config.os.name}. Make sure you have installed right operating system plugin, see http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#Operating_system_plugins. Supported OSes are: #{PluginManager.instance.plugins[:os].keys.join(", ")}" if os_plugin.nil? 70: raise "Not supported operating system version selected: #{@appliance_config.os.version}. Supported versions are: #{os_plugin[:versions].join(", ")}" unless @appliance_config.os.version.nil? or os_plugin[:versions].include?(@appliance_config.os.version) 71: end