| 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