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