| Class | BoxGrinder::BasePlugin |
| In: |
lib/boxgrinder-build/plugins/base-plugin.rb
lib/boxgrinder-build/plugins/base-plugin.rb |
| Parent: | Object |
| deliverables | [R] | |
| deliverables | [R] | |
| plugin_info | [R] | |
| plugin_info | [R] |
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 37
37: def initialize
38: @plugin_config = {}
39:
40: @deliverables = OpenCascade.new
41: @supported_oses = OpenCascade.new
42: @supported_platforms = []
43: @target_deliverables = OpenCascade.new
44: @dir = OpenCascade.new
45: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 37
37: def initialize
38: @plugin_config = {}
39:
40: @deliverables = OpenCascade.new
41: @supported_oses = OpenCascade.new
42: @supported_platforms = []
43: @target_deliverables = OpenCascade.new
44: @dir = OpenCascade.new
45: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 138
138: def current_platform
139: platform = :raw
140:
141: if @previous_plugin_info[:type] == :platform
142: platform = @previous_plugin_info[:name]
143: end unless @previous_plugin_info.nil?
144:
145: platform.to_s
146: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 138
138: def current_platform
139: platform = :raw
140:
141: if @previous_plugin_info[:type] == :platform
142: platform = @previous_plugin_info[:name]
143: end unless @previous_plugin_info.nil?
144:
145: platform.to_s
146: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 201
201: def deliverables
202: @target_deliverables
203: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 201
201: def deliverables
202: @target_deliverables
203: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 184
184: def deliverables_exists?
185: raise "You can only check deliverables after the plugin is initialized, please initialize the plugin using init method." if @initialized.nil?
186:
187: return false if deliverables.empty?
188:
189: exists = true
190:
191: deliverables.each_value do |file|
192: unless File.exists?(file)
193: exists = false
194: break
195: end
196: end
197:
198: exists
199: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 184
184: def deliverables_exists?
185: raise "You can only check deliverables after the plugin is initialized, please initialize the plugin using init method." if @initialized.nil?
186:
187: return false if deliverables.empty?
188:
189: exists = true
190:
191: deliverables.each_value do |file|
192: unless File.exists?(file)
193: exists = false
194: break
195: end
196: end
197:
198: exists
199: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 156
156: def execute(args = nil)
157: raise "You can only execute the plugin after the plugin is initialized, please initialize the plugin using init method." if @initialized.nil?
158: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 156
156: def execute(args = nil)
157: raise "You can only execute the plugin after the plugin is initialized, please initialize the plugin using init method." if @initialized.nil?
158: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 47
47: def init(config, appliance_config, info, options = {})
48: @config = config
49: @appliance_config = appliance_config
50: @options = options
51: @plugin_info = info
52:
53: # Optional options :)
54: @type = options[:type] || @plugin_info[:name]
55: @previous_plugin = options[:previous_plugin]
56: @log = options[:log] || LogHelper.new
57: @exec_helper = options[:exec_helper] || ExecHelper.new(:log => @log)
58: @image_helper = options[:image_helper] || ImageHelper.new(@config, @appliance_config, :log => @log)
59:
60: @dir.base = "#{@appliance_config.path.build}/#{@plugin_info[:name]}-plugin"
61: @dir.tmp = "#{@dir.base}/tmp"
62:
63: if @previous_plugin
64: @previous_deliverables = @previous_plugin.deliverables
65: @previous_plugin_info = @previous_plugin.plugin_info
66: else
67: @previous_deliverables = OpenCascade.new
68: end
69:
70: # TODO get rid of that - we don't have plugin configuration files - everything is now in one place.
71: read_plugin_config
72: merge_plugin_config
73:
74: # Indicate whether deliverables of select plugin should be moved to final destination or not.
75: # TODO Needs some thoughts - if we don't have deliverables that we care about - should they be in @deliverables?
76: @move_deliverables = true
77:
78: # The plugin is initialized now. We can do some fancy stuff with it.
79: @initialized = true
80:
81: self
82: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 47
47: def init(config, appliance_config, info, options = {})
48: @config = config
49: @appliance_config = appliance_config
50: @options = options
51: @plugin_info = info
52:
53: # Optional options :)
54: @type = options[:type] || @plugin_info[:name]
55: @previous_plugin = options[:previous_plugin]
56: @log = options[:log] || LogHelper.new
57: @exec_helper = options[:exec_helper] || ExecHelper.new(:log => @log)
58: @image_helper = options[:image_helper] || ImageHelper.new(@config, @appliance_config, :log => @log)
59:
60: @dir.base = "#{@appliance_config.path.build}/#{@plugin_info[:name]}-plugin"
61: @dir.tmp = "#{@dir.base}/tmp"
62:
63: if @previous_plugin
64: @previous_deliverables = @previous_plugin.deliverables
65: @previous_plugin_info = @previous_plugin.plugin_info
66: else
67: @previous_deliverables = OpenCascade.new
68: end
69:
70: # TODO get rid of that - we don't have plugin configuration files - everything is now in one place.
71: read_plugin_config
72: merge_plugin_config
73:
74: # Indicate whether deliverables of select plugin should be moved to final destination or not.
75: # TODO Needs some thoughts - if we don't have deliverables that we care about - should they be in @deliverables?
76: @move_deliverables = true
77:
78: # The plugin is initialized now. We can do some fancy stuff with it.
79: @initialized = true
80:
81: self
82: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 121
121: def is_supported_os?
122: return true if @supported_oses.empty?
123: return false unless !@supported_oses[@appliance_config.os.name].nil? and @supported_oses[@appliance_config.os.name].include?(@appliance_config.os.version)
124: true
125: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 121
121: def is_supported_os?
122: return true if @supported_oses.empty?
123: return false unless !@supported_oses[@appliance_config.os.name].nil? and @supported_oses[@appliance_config.os.name].include?(@appliance_config.os.version)
124: true
125: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 115
115: def is_supported_platform?
116: return true if @supported_platforms.empty?
117: return false if @previous_plugin_info[:type] == :platform and !@supported_platforms.include?(@previous_plugin_info[:name])
118: true
119: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 115
115: def is_supported_platform?
116: return true if @supported_platforms.empty?
117: return false if @previous_plugin_info[:type] == :platform and !@supported_platforms.include?(@previous_plugin_info[:name])
118: true
119: end
This merges the plugin config with configuration provided in command line
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 216
216: def merge_plugin_config
217: config =
218: case @plugin_info[:type]
219: when :os
220: @config.os_config
221: when :platform
222: @config.platform_config
223: when :delivery
224: @config.delivery_config
225: end
226:
227: @plugin_config.merge!(config)
228: end
This merges the plugin config with configuration provided in command line
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 216
216: def merge_plugin_config
217: config =
218: case @plugin_info[:type]
219: when :os
220: @config.os_config
221: when :platform
222: @config.platform_config
223: when :delivery
224: @config.delivery_config
225: end
226:
227: @plugin_config.merge!(config)
228: end
This reads the plugin config from file
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 210
210: def read_plugin_config
211: return if @config[:plugins].nil? or @config[:plugins][@plugin_info[:name].to_s].nil?
212: @plugin_config = @config[:plugins][@plugin_info[:name].to_s]
213: end
This reads the plugin config from file
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 210
210: def read_plugin_config
211: return if @config[:plugins].nil? or @config[:plugins][@plugin_info[:name].to_s].nil?
212: @plugin_config = @config[:plugins][@plugin_info[:name].to_s]
213: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 93
93: def register_deliverable(deliverable)
94: raise "You can only register deliverables after the plugin is initialized, please initialize the plugin using init method." if @initialized.nil?
95: raise "Please specify deliverables as Hash, not #{deliverable.class}." unless deliverable.is_a?(Hash)
96:
97: deliverable.each do |name, path|
98: @deliverables[name] = "#{@dir.tmp}/#{path}"
99: @target_deliverables[name] = "#{@dir.base}/#{path}"
100: end
101: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 93
93: def register_deliverable(deliverable)
94: raise "You can only register deliverables after the plugin is initialized, please initialize the plugin using init method." if @initialized.nil?
95: raise "Please specify deliverables as Hash, not #{deliverable.class}." unless deliverable.is_a?(Hash)
96:
97: deliverable.each do |name, path|
98: @deliverables[name] = "#{@dir.tmp}/#{path}"
99: @target_deliverables[name] = "#{@dir.base}/#{path}"
100: end
101: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 103
103: def register_supported_os(name, versions)
104: raise "You can register supported operating system only after the plugin is initialized, please initialize the plugin using init method." if @initialized.nil?
105:
106: @supported_oses[name] = OpenCascade.new if @supported_oses[name].nil?
107: @supported_oses[name] = versions
108: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 103
103: def register_supported_os(name, versions)
104: raise "You can register supported operating system only after the plugin is initialized, please initialize the plugin using init method." if @initialized.nil?
105:
106: @supported_oses[name] = OpenCascade.new if @supported_oses[name].nil?
107: @supported_oses[name] = versions
108: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 110
110: def register_supported_platform(name)
111: raise "You can register supported platform only after the plugin is initialized, please initialize the plugin using init method." if @initialized.nil?
112: @supported_platforms << name
113: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 110
110: def register_supported_platform(name)
111: raise "You can register supported platform only after the plugin is initialized, please initialize the plugin using init method." if @initialized.nil?
112: @supported_platforms << name
113: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 160
160: def run(param = nil)
161: unless is_supported_os?
162: raise PluginValidationError, "#{@plugin_info[:full_name]} plugin supports following operating systems: #{supported_oses}. Your appliance contains #{@appliance_config.os.name} #{@appliance_config.os.version} operating system which is not supported by this plugin, sorry."
163: end
164:
165: unless is_supported_platform?
166: raise PluginValidationError, "#{@plugin_info[:full_name]} plugin supports following platforms: #{@supported_platforms.join(', ')}. You selected #{@previous_plugin_info[:name]} platform which is not supported by this plugin, sorry."
167: end
168:
169: FileUtils.rm_rf @dir.tmp
170: FileUtils.mkdir_p @dir.tmp
171:
172: param.nil? ? execute : execute(param)
173:
174: # TODO execute post commands for platform plugins here?
175:
176: @deliverables.each do |name, path|
177: @log.trace "Moving '#{path}' deliverable to target destination '#{@target_deliverables[name]}'..."
178: FileUtils.mv(path, @target_deliverables[name])
179: end if @move_deliverables
180:
181: FileUtils.rm_rf @dir.tmp
182: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 160
160: def run(param = nil)
161: unless is_supported_os?
162: raise PluginValidationError, "#{@plugin_info[:full_name]} plugin supports following operating systems: #{supported_oses}. Your appliance contains #{@appliance_config.os.name} #{@appliance_config.os.version} operating system which is not supported by this plugin, sorry."
163: end
164:
165: unless is_supported_platform?
166: raise PluginValidationError, "#{@plugin_info[:full_name]} plugin supports following platforms: #{@supported_platforms.join(', ')}. You selected #{@previous_plugin_info[:name]} platform which is not supported by this plugin, sorry."
167: end
168:
169: FileUtils.rm_rf @dir.tmp
170: FileUtils.mkdir_p @dir.tmp
171:
172: param.nil? ? execute : execute(param)
173:
174: # TODO execute post commands for platform plugins here?
175:
176: @deliverables.each do |name, path|
177: @log.trace "Moving '#{path}' deliverable to target destination '#{@target_deliverables[name]}'..."
178: FileUtils.mv(path, @target_deliverables[name])
179: end if @move_deliverables
180:
181: FileUtils.rm_rf @dir.tmp
182: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 205
205: def set_default_config_value(key, value)
206: @plugin_config[key] = @plugin_config[key].nil? ? value : @plugin_config[key]
207: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 205
205: def set_default_config_value(key, value)
206: @plugin_config[key] = @plugin_config[key].nil? ? value : @plugin_config[key]
207: end
Validation helper method.
Execute the validation only for selected plugin type. TODO make this prettier somehow? Maybe moving validation to a class?
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 88
88: def subtype(type)
89: return unless @type == type
90: yield if block_given?
91: end
Validation helper method.
Execute the validation only for selected plugin type. TODO make this prettier somehow? Maybe moving validation to a class?
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 88
88: def subtype(type)
89: return unless @type == type
90: yield if block_given?
91: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 127
127: def supported_oses
128: supported = ""
129:
130: @supported_oses.sort.each do |name, versions|
131: supported << ", " unless supported.empty?
132: supported << "#{name} (versions: #{versions.join(", ")})"
133: end
134:
135: supported
136: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 127
127: def supported_oses
128: supported = ""
129:
130: @supported_oses.sort.each do |name, versions|
131: supported << ", " unless supported.empty?
132: supported << "#{name} (versions: #{versions.join(", ")})"
133: end
134:
135: supported
136: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 148
148: def validate_plugin_config(fields = [], doc = nil)
149: more_info = doc.nil? ? '' : "See #{doc} for more info"
150:
151: fields.each do |field|
152: raise PluginValidationError, "Please specify a valid '#{field}' key in BoxGrinder configuration file: '#{@config.file}' or use CLI '--#{@plugin_info[:type]}-config #{field}:DATA' argument. #{more_info}" if @plugin_config[field].nil?
153: end
154: end
# File lib/boxgrinder-build/plugins/base-plugin.rb, line 148
148: def validate_plugin_config(fields = [], doc = nil)
149: more_info = doc.nil? ? '' : "See #{doc} for more info"
150:
151: fields.each do |field|
152: raise PluginValidationError, "Please specify a valid '#{field}' key in BoxGrinder configuration file: '#{@config.file}' or use CLI '--#{@plugin_info[:type]}-config #{field}:DATA' argument. #{more_info}" if @plugin_config[field].nil?
153: end
154: end