| 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