Class BoxGrinder::Appliance
In: lib/boxgrinder-build/appliance.rb
lib/boxgrinder-build/appliance.rb
Parent: Object

Methods

Public Class methods

[Source]

    # 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

[Source]

    # 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

Public Instance methods

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Validate]