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 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

[Source]

    # 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

Public Instance methods

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Validate]