boxgrinder-build 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,16 @@
1
+ v0.8.0
2
+
3
+ * [BGBUILD-138] enablerepo path is not escaped when calling repoquery
4
+ * [BGBUILD-133] Support a consolidated configuration file
5
+ * [BGBUILD-128] Allow to specify plugin configuration using CLI
6
+ * [BGBUILD-134] Replace rubygem-commander with rubygem-thor
7
+ * [BGBUILD-131] Check if OS is supported before executing the plugin
8
+ * [BGBUILD-68] Global .boxgrinder/config or rc style file for config
9
+ * [BGBUILD-79] Allow to use BoxGrinder Build as a library
10
+ * [BGBUILD-127] Use appliance definition object instead of a file when using BG as a library
11
+ * [BGBUILD-72] Add support for growing (not pre-allocated) disks for KVM/Xen
12
+ * [BGBUILD-147] Allow to list installed plugins and version information
13
+
1
14
  v0.7.1
2
15
 
3
16
  * [BGBUILD-124] Guestfs fails while mounting multiple partitions with '_' prefix
data/Manifest CHANGED
@@ -3,8 +3,9 @@ LICENSE
3
3
  Manifest
4
4
  README
5
5
  Rakefile
6
- bin/boxgrinder-build
6
+ bin/boxgrinder
7
7
  boxgrinder-build.gemspec
8
+ lib/boxgrinder-build.rb
8
9
  lib/boxgrinder-build/appliance.rb
9
10
  lib/boxgrinder-build/helpers/appliance-customize-helper.rb
10
11
  lib/boxgrinder-build/helpers/augeas-helper.rb
@@ -13,6 +14,7 @@ lib/boxgrinder-build/helpers/image-helper.rb
13
14
  lib/boxgrinder-build/helpers/linux-helper.rb
14
15
  lib/boxgrinder-build/helpers/package-helper.rb
15
16
  lib/boxgrinder-build/helpers/plugin-helper.rb
17
+ lib/boxgrinder-build/helpers/thor-helper.rb
16
18
  lib/boxgrinder-build/managers/plugin-manager.rb
17
19
  lib/boxgrinder-build/plugins/base-plugin.rb
18
20
  rubygem-boxgrinder-build.spec
@@ -27,5 +29,3 @@ spec/helpers/package-helper-spec.rb
27
29
  spec/helpers/plugin-helper-spec.rb
28
30
  spec/managers/plugin-manager-spec.rb
29
31
  spec/plugins/base-plugin-spec.rb
30
- spec/rspec/src/appliances/jeos-f13.appl
31
- spec/rspec/src/appliances/jeos-f13.ks
data/Rakefile CHANGED
@@ -26,7 +26,7 @@ Echoe.new("boxgrinder-build") do |p|
26
26
  p.summary = "A tool for creating appliances from simple plain text files for various virtual environments."
27
27
  p.url = "http://www.jboss.org/boxgrinder"
28
28
  p.email = "info@boxgrinder.org"
29
- p.runtime_dependencies = ["commander ~>4.0.3", "boxgrinder-core ~>0.1.5"]
29
+ p.runtime_dependencies = ["thor >=0.13", "boxgrinder-core ~>0.2.0"]
30
30
  end
31
31
 
32
32
  desc "Run all tests"
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2010 Red Hat, Inc.
4
+ #
5
+ # This is free software; you can redistribute it and/or modify it
6
+ # under the terms of the GNU Lesser General Public License as
7
+ # published by the Free Software Foundation; either version 3 of
8
+ # the License, or (at your option) any later version.
9
+ #
10
+ # This software is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this software; if not, write to the Free
17
+ # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18
+ # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
19
+
20
+ require 'rubygems'
21
+ require 'boxgrinder-core/helpers/log-helper'
22
+ require 'boxgrinder-build/appliance'
23
+ require 'boxgrinder-build/helpers/thor-helper'
24
+
25
+ #$stderr.reopen($stdout)
26
+
27
+ if Process.uid != 0
28
+ puts "This program must be executed with root privileges. Try 'sudo boxgrinder-build'"
29
+ abort
30
+ end
31
+
32
+ module BoxGrinder
33
+ class App < ThorHelper
34
+ desc "build [appliance definition file] [options]", "Create an image from selected appliance definition for selected platform and deliver it using selected method"
35
+ method_option :platform, :type => :string, :default => :none, :aliases => '-p', :desc => "The name of platform you want to convert to."
36
+ method_option :delivery, :type => :string, :default => :none, :aliases => '-d', :desc => "The delivery method for selected appliance."
37
+ method_option :os_config, :type => :hash, :default => {}, :desc => "Operating system plugin options."
38
+ method_option :platform_config, :type => :hash, :default => {}, :desc => "Platform plugin options."
39
+ method_option :delivery_config, :type => :hash, :default => {}, :desc => "Delivery plugin options."
40
+ method_option :additional_plugins, :type => :array, :default => [], :banner => 'plugin1 plugin2', :aliases => '-l', :desc => "Space separated list of additional plugins. Default: empty."
41
+ method_option :force, :type => :boolean, :default => false, :aliases => '-f', :desc => "Force image creation - removes all previous builds for selected appliance. Default: false."
42
+ method_option :debug, :type => :boolean, :default => false, :desc => "Prints debug information while building. Default: false."
43
+ method_option :trace, :type => :boolean, :default => false, :desc => "Prints trace information while building. Default: false."
44
+
45
+ def build(appliance_definition_file)
46
+ log_level = :debug if options.debug?
47
+ log_level = :trace if options.trace?
48
+
49
+ config = Config.new(options.merge(:platform => options.platform.to_sym, :delivery => options.delivery.to_sym))
50
+ config.merge!(:log_level => log_level) unless log_level.nil?
51
+
52
+ log = LogHelper.new(:level => config.log_level)
53
+
54
+ unless File.exists?(appliance_definition_file)
55
+ log.fatal "Appliance definition file '#{appliance_definition_file}' could not be found."
56
+ abort
57
+ end
58
+
59
+ begin
60
+ Appliance.new(appliance_definition_file, config, :log => log).create
61
+ rescue Exception => e
62
+ log.fatal e
63
+ end
64
+ end
65
+
66
+ desc 'info', "Prints out the program details"
67
+ method_option :plugins, :type => :boolean, :default => false, :aliases => '-p', :desc => "List also available plugins. Default: false."
68
+
69
+ def info
70
+ PluginHelper.new(Config.new).load_plugins if options.plugins
71
+
72
+ shell.say
73
+ shell.say "BoxGrinder Build #{File.read("#{File.dirname(__FILE__)}/../CHANGELOG").match(/^v(.*)/)[1]}"
74
+
75
+ if options.plugins
76
+
77
+ shell.say
78
+ shell.say "Plugin summary:"
79
+
80
+ [:os, :platform, :delivery].each do |type|
81
+ shell.say
82
+
83
+ if PluginManager.instance.plugins[type].empty?
84
+ shell.say "No #{type} plugins available"
85
+ else
86
+ shell.say "Available #{type} plugins:"
87
+ PluginManager.instance.plugins[type].each do |name, plugin_info|
88
+ shell.say " - #{name} plugin for #{plugin_info[:full_name]}."
89
+ end
90
+ end
91
+ end
92
+ end
93
+
94
+ shell.say
95
+ end
96
+
97
+ class << self
98
+ def build_help(shell)
99
+ examples = {
100
+ "$ boxgrinder build jeos.appl" => "# Build KVM image for jeos.appl",
101
+ "$ boxgrinder build jeos.appl -f" => "# Build KVM image for jeos.appl with removing previous build for this image",
102
+ "$ boxgrinder build jeos.appl --os-config format:qcow2" => "# Build KVM image for jeos.appl with a qcow2 disk",
103
+ "$ boxgrinder build jeos.appl -p vmware --platform-config type:personal thin_disk:true" => "# Build VMware image for VMware Server, Player, Fusion using thin (growing) disk",
104
+ "$ boxgrinder build jeos.appl -p ec2 -d ami" => "# Build and register AMI for jeos.appl",
105
+ "$ boxgrinder build jeos.appl -p vmware -d local" => "# Build VMware image for jeos.appl and deliver it to local directory"
106
+ }.sort { |a, b| a[0] <=> b[0] }
107
+
108
+ shell.say "Examples:"
109
+ shell.print_table(examples, :ident => 2, :truncate => true)
110
+ shell.say
111
+ end
112
+ end
113
+ end
114
+ end
115
+
116
+ begin
117
+ BoxGrinder::App.start
118
+ rescue Thor::Error => e
119
+ puts e.message
120
+ end
121
+
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{boxgrinder-build}
5
- s.version = "0.7.1"
5
+ s.version = "0.8.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Marek Goldmann"]
9
- s.date = %q{2011-01-03}
10
- s.default_executable = %q{boxgrinder-build}
9
+ s.date = %q{2011-02-09}
10
+ s.default_executable = %q{boxgrinder}
11
11
  s.description = %q{A tool for creating appliances from simple plain text files for various virtual environments.}
12
12
  s.email = %q{info@boxgrinder.org}
13
- s.executables = ["boxgrinder-build"]
14
- s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "bin/boxgrinder-build", "lib/boxgrinder-build/appliance.rb", "lib/boxgrinder-build/helpers/appliance-customize-helper.rb", "lib/boxgrinder-build/helpers/augeas-helper.rb", "lib/boxgrinder-build/helpers/guestfs-helper.rb", "lib/boxgrinder-build/helpers/image-helper.rb", "lib/boxgrinder-build/helpers/linux-helper.rb", "lib/boxgrinder-build/helpers/package-helper.rb", "lib/boxgrinder-build/helpers/plugin-helper.rb", "lib/boxgrinder-build/managers/plugin-manager.rb", "lib/boxgrinder-build/plugins/base-plugin.rb"]
15
- s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "bin/boxgrinder-build", "boxgrinder-build.gemspec", "lib/boxgrinder-build/appliance.rb", "lib/boxgrinder-build/helpers/appliance-customize-helper.rb", "lib/boxgrinder-build/helpers/augeas-helper.rb", "lib/boxgrinder-build/helpers/guestfs-helper.rb", "lib/boxgrinder-build/helpers/image-helper.rb", "lib/boxgrinder-build/helpers/linux-helper.rb", "lib/boxgrinder-build/helpers/package-helper.rb", "lib/boxgrinder-build/helpers/plugin-helper.rb", "lib/boxgrinder-build/managers/plugin-manager.rb", "lib/boxgrinder-build/plugins/base-plugin.rb", "rubygem-boxgrinder-build.spec", "spec/Rakefile", "spec/appliance-spec.rb", "spec/helpers/appliance-customize-helper-spec.rb", "spec/helpers/augeas-helper-spec.rb", "spec/helpers/guestfs-helper-spec.rb", "spec/helpers/image-helper-spec.rb", "spec/helpers/linux-helper-spec.rb", "spec/helpers/package-helper-spec.rb", "spec/helpers/plugin-helper-spec.rb", "spec/managers/plugin-manager-spec.rb", "spec/plugins/base-plugin-spec.rb", "spec/rspec/src/appliances/jeos-f13.appl", "spec/rspec/src/appliances/jeos-f13.ks"]
13
+ s.executables = ["boxgrinder"]
14
+ s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "bin/boxgrinder", "lib/boxgrinder-build.rb", "lib/boxgrinder-build/appliance.rb", "lib/boxgrinder-build/helpers/appliance-customize-helper.rb", "lib/boxgrinder-build/helpers/augeas-helper.rb", "lib/boxgrinder-build/helpers/guestfs-helper.rb", "lib/boxgrinder-build/helpers/image-helper.rb", "lib/boxgrinder-build/helpers/linux-helper.rb", "lib/boxgrinder-build/helpers/package-helper.rb", "lib/boxgrinder-build/helpers/plugin-helper.rb", "lib/boxgrinder-build/helpers/thor-helper.rb", "lib/boxgrinder-build/managers/plugin-manager.rb", "lib/boxgrinder-build/plugins/base-plugin.rb"]
15
+ s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "bin/boxgrinder", "boxgrinder-build.gemspec", "lib/boxgrinder-build.rb", "lib/boxgrinder-build/appliance.rb", "lib/boxgrinder-build/helpers/appliance-customize-helper.rb", "lib/boxgrinder-build/helpers/augeas-helper.rb", "lib/boxgrinder-build/helpers/guestfs-helper.rb", "lib/boxgrinder-build/helpers/image-helper.rb", "lib/boxgrinder-build/helpers/linux-helper.rb", "lib/boxgrinder-build/helpers/package-helper.rb", "lib/boxgrinder-build/helpers/plugin-helper.rb", "lib/boxgrinder-build/helpers/thor-helper.rb", "lib/boxgrinder-build/managers/plugin-manager.rb", "lib/boxgrinder-build/plugins/base-plugin.rb", "rubygem-boxgrinder-build.spec", "spec/Rakefile", "spec/appliance-spec.rb", "spec/helpers/appliance-customize-helper-spec.rb", "spec/helpers/augeas-helper-spec.rb", "spec/helpers/guestfs-helper-spec.rb", "spec/helpers/image-helper-spec.rb", "spec/helpers/linux-helper-spec.rb", "spec/helpers/package-helper-spec.rb", "spec/helpers/plugin-helper-spec.rb", "spec/managers/plugin-manager-spec.rb", "spec/plugins/base-plugin-spec.rb"]
16
16
  s.homepage = %q{http://www.jboss.org/boxgrinder}
17
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Boxgrinder-build", "--main", "README"]
18
18
  s.require_paths = ["lib"]
@@ -25,14 +25,14 @@ Gem::Specification.new do |s|
25
25
  s.specification_version = 3
26
26
 
27
27
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
28
- s.add_runtime_dependency(%q<commander>, ["~> 4.0.3"])
29
- s.add_runtime_dependency(%q<boxgrinder-core>, ["~> 0.1.5"])
28
+ s.add_runtime_dependency(%q<thor>, [">= 0.13"])
29
+ s.add_runtime_dependency(%q<boxgrinder-core>, ["~> 0.2.0"])
30
30
  else
31
- s.add_dependency(%q<commander>, ["~> 4.0.3"])
32
- s.add_dependency(%q<boxgrinder-core>, ["~> 0.1.5"])
31
+ s.add_dependency(%q<thor>, [">= 0.13"])
32
+ s.add_dependency(%q<boxgrinder-core>, ["~> 0.2.0"])
33
33
  end
34
34
  else
35
- s.add_dependency(%q<commander>, ["~> 4.0.3"])
36
- s.add_dependency(%q<boxgrinder-core>, ["~> 0.1.5"])
35
+ s.add_dependency(%q<thor>, [">= 0.13"])
36
+ s.add_dependency(%q<boxgrinder-core>, ["~> 0.2.0"])
37
37
  end
38
38
  end
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2010 Red Hat, Inc.
3
+ #
4
+ # This is free software; you can redistribute it and/or modify it
5
+ # under the terms of the GNU Lesser General Public License as
6
+ # published by the Free Software Foundation; either version 3 of
7
+ # the License, or (at your option) any later version.
8
+ #
9
+ # This software is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this software; if not, write to the Free
16
+ # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
17
+ # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
18
+
19
+ require 'boxgrinder-build/appliance'
@@ -17,6 +17,8 @@
17
17
  # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
18
18
 
19
19
  require 'rubygems'
20
+ require 'hashery/opencascade'
21
+ require 'boxgrinder-core/helpers/log-helper'
20
22
  require 'boxgrinder-core/models/appliance-config'
21
23
  require 'boxgrinder-core/models/config'
22
24
  require 'boxgrinder-core/helpers/appliance-helper'
@@ -27,47 +29,41 @@ require 'boxgrinder-core/validators/appliance-config-validator'
27
29
 
28
30
  module BoxGrinder
29
31
  class Appliance
30
-
31
- def initialize(appliance_definition_file, options = {})
32
- @config = Config.new
33
- @appliance_definition_file = appliance_definition_file
34
- @log = options[:log] || Logger.new(STDOUT)
35
- @options = options[:options]
36
-
37
- @config.name = @options.name
38
- @config.version.version = @options.version
39
- @config.version.release = nil
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)
40
36
  end
41
37
 
42
38
  def read_definition
43
39
  begin
44
40
  # first try to read as appliance definition file
45
- appliance_configs, appliance_config = ApplianceHelper.new(:log => @log).read_definitions(@appliance_definition_file)
41
+ appliance_configs, appliance_config = ApplianceHelper.new(:log => @log).read_definitions(@appliance_definition)
46
42
  rescue
47
43
  # then try to read OS plugin specific format
48
44
  PluginManager.instance.plugins[:os].each_value do |info|
49
45
  plugin = info[:class].new
50
- appliance_config = plugin.read_file(@appliance_definition_file) if plugin.respond_to?(:read_file)
46
+ appliance_config = plugin.read_file(@appliance_definition) if plugin.respond_to?(:read_file)
51
47
  break unless appliance_config.nil?
52
48
  end
53
49
  appliance_configs = [appliance_config]
54
50
  end
55
51
 
56
- raise "Couldn't read appliance definition file: #{File.basename(@appliance_definition_file)}" if appliance_config.nil?
52
+ raise "Couldn't read appliance definition file: #{File.basename(@appliance_definition)}" if appliance_config.nil?
57
53
 
58
54
  appliance_config_helper = ApplianceConfigHelper.new(appliance_configs)
59
- @appliance_config = appliance_config_helper.merge(appliance_config.clone.init_arch).initialize_paths
55
+ @appliance_config = appliance_config_helper.merge(appliance_config.clone.init_arch).initialize_paths
60
56
  end
61
57
 
62
58
  def validate_definition
63
59
  ApplianceConfigValidator.new(@appliance_config).validate
64
60
 
65
- abort "No operating system plugins installed. Install one or more operating system plugin. See http://community.jboss.org/docs/DOC-15081 and http://community.jboss.org/docs/DOC-15214 for more info" if PluginManager.instance.plugins[:os].empty?
61
+ raise "No operating system plugins installed. Install one or more operating system plugin. See http://community.jboss.org/docs/DOC-15081 and http://community.jboss.org/docs/DOC-15214 for more info." if PluginManager.instance.plugins[:os].empty?
66
62
 
67
63
  os_plugin = PluginManager.instance.plugins[:os][@appliance_config.os.name.to_sym]
68
64
 
69
- abort "Not supported operating system selected: #{@appliance_config.os.name}. Make sure you have installed right operating system plugin, see http://community.jboss.org/docs/DOC-15214. Supported OSes are: #{PluginManager.instance.plugins[:os].keys.join(", ")}" if os_plugin.nil?
70
- abort "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)
65
+ raise "Not supported operating system selected: #{@appliance_config.os.name}. Make sure you have installed right operating system plugin, see http://community.jboss.org/docs/DOC-15214. Supported OSes are: #{PluginManager.instance.plugins[:os].keys.join(", ")}" if os_plugin.nil?
66
+ 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
67
  end
72
68
 
73
69
  def remove_old_builds
@@ -83,19 +79,18 @@ module BoxGrinder
83
79
  end
84
80
 
85
81
  def create
86
- begin
87
- PluginHelper.new(:options => @options, :log => @log).load_plugins
88
- read_definition
89
- validate_definition
90
- remove_old_builds if @options.force
91
- execute_plugin_chain
92
- rescue
93
- @log.fatal $!
94
- end
82
+ @log.debug "Launching new BoxGrinder build..."
83
+ @log.trace "Used configuration: #{@config.to_yaml}"
84
+
85
+ PluginHelper.new(@config, :log => @log).load_plugins
86
+ read_definition
87
+ validate_definition
88
+ remove_old_builds if @config.force
89
+ execute_plugin_chain
95
90
  end
96
91
 
97
92
  def execute_os_plugin
98
- raise "No operating system plugins installed. Install one or more operating system plugin. See http://community.jboss.org/docs/DOC-15081 and http://community.jboss.org/docs/DOC-15214 for more info" if PluginManager.instance.plugins[:os].empty?
93
+ raise "No operating system plugins installed. Install one or more operating system plugin. See http://community.jboss.org/docs/DOC-15081 and http://community.jboss.org/docs/DOC-15214 for more info." if PluginManager.instance.plugins[:os].empty?
99
94
 
100
95
  os_plugin, os_plugin_info = PluginManager.instance.initialize_plugin(:os, @appliance_config.os.name.to_sym)
101
96
  os_plugin.init(@config, @appliance_config, :log => @log, :plugin_info => os_plugin_info)
@@ -106,21 +101,21 @@ module BoxGrinder
106
101
  end
107
102
 
108
103
  @log.debug "Executing operating system plugin for #{@appliance_config.os.name}..."
109
- os_plugin.run(@appliance_definition_file)
104
+ os_plugin.run(@appliance_definition)
110
105
  @log.debug "Operating system plugin executed."
111
106
 
112
107
  {:deliverables => os_plugin.deliverables, :plugin_info => os_plugin_info}
113
108
  end
114
109
 
115
110
  def execute_platform_plugin(previous_plugin_output)
116
- if @options.platform == :none or @options.platform == nil
111
+ if @config.platform == :none or @config.platform.to_s.empty? == nil
117
112
  @log.debug "No platform selected, skipping platform conversion."
118
113
  return previous_plugin_output
119
114
  end
120
115
 
121
- raise "No platform plugins installed. Install one or more platform plugin. See http://community.jboss.org/docs/DOC-15081 and http://community.jboss.org/docs/DOC-15214 for more info" if PluginManager.instance.plugins[:platform].empty?
116
+ raise "No platform plugins installed. Install one or more platform plugin. See http://community.jboss.org/docs/DOC-15081 and http://community.jboss.org/docs/DOC-15214 for more info." if PluginManager.instance.plugins[:platform].empty?
122
117
 
123
- platform_plugin, platform_plugin_info = PluginManager.instance.initialize_plugin(:platform, @options.platform)
118
+ platform_plugin, platform_plugin_info = PluginManager.instance.initialize_plugin(:platform, @config.platform)
124
119
  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])
125
120
 
126
121
  if platform_plugin.deliverables_exists?
@@ -128,7 +123,7 @@ module BoxGrinder
128
123
  return {:deliverables => platform_plugin.deliverables, :plugin_info => platform_plugin_info}
129
124
  end
130
125
 
131
- @log.debug "Executing platform plugin for #{@options.platform}..."
126
+ @log.debug "Executing platform plugin for #{@config.platform}..."
132
127
  platform_plugin.run
133
128
  @log.debug "Platform plugin executed."
134
129
 
@@ -136,16 +131,16 @@ module BoxGrinder
136
131
  end
137
132
 
138
133
  def execute_delivery_plugin(previous_plugin_output)
139
- if @options.delivery == :none or @options.delivery == nil
134
+ if @config.delivery == :none or @config.delivery.to_s.empty? == nil
140
135
  @log.debug "No delivery method selected, skipping delivering."
141
136
  return
142
137
  end
143
138
 
144
139
  raise "No delivery plugins installed. Install one or more delivery plugin. See http://community.jboss.org/docs/DOC-15081 and http://community.jboss.org/docs/DOC-15214 for more info" if PluginManager.instance.plugins[:delivery].empty?
145
140
 
146
- delivery_plugin, delivery_plugin_info = PluginManager.instance.initialize_plugin(:delivery, @options.delivery)
141
+ delivery_plugin, delivery_plugin_info = PluginManager.instance.initialize_plugin(:delivery, @config.delivery)
147
142
  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])
148
- delivery_plugin.run(@options.delivery)
143
+ delivery_plugin.run(@config.delivery)
149
144
  end
150
145
  end
151
146
  end
@@ -19,7 +19,7 @@
19
19
  require 'rubygems'
20
20
  require 'boxgrinder-build/helpers/guestfs-helper'
21
21
  require 'boxgrinder-core/helpers/exec-helper'
22
- require 'logger'
22
+ require 'boxgrinder-core/helpers/log-helper'
23
23
 
24
24
  module BoxGrinder
25
25
  class ApplianceCustomizeHelper
@@ -29,7 +29,7 @@ module BoxGrinder
29
29
  @appliance_config = appliance_config
30
30
  @disk = disk
31
31
 
32
- @log = options[:log] || Logger.new(STDOUT)
32
+ @log = options[:log] || LogHelper.new
33
33
  @exec_helper = options[:exec_helper] || ExecHelper.new( { :log => @log } )
34
34
  end
35
35
 
@@ -16,14 +16,14 @@
16
16
  # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
17
17
  # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
18
18
 
19
- require 'logger'
19
+ require 'boxgrinder-core/helpers/log-helper'
20
20
 
21
21
  module BoxGrinder
22
22
  class AugeasHelper
23
23
  def initialize(guestfs, guestfs_helper, options = {})
24
24
  @guestfs = guestfs
25
25
  @guestfs_helper = guestfs_helper
26
- @log = options[:log] || Logger.new(STDOUT)
26
+ @log = options[:log] || LogHelper.new
27
27
 
28
28
  @files = {}
29
29
  end
@@ -17,9 +17,10 @@
17
17
  # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
18
18
 
19
19
  require 'boxgrinder-build/helpers/augeas-helper'
20
+ require 'boxgrinder-core/helpers/log-helper'
20
21
  require 'guestfs'
21
- require 'logger'
22
22
  require 'open-uri'
23
+ require 'timeout'
23
24
  require 'rbconfig'
24
25
 
25
26
  module BoxGrinder
@@ -82,7 +83,7 @@ module BoxGrinder
82
83
  class GuestFSHelper
83
84
  def initialize(raw_disk, options = {})
84
85
  @raw_disk = raw_disk
85
- @log = options[:log] || Logger.new(STDOUT)
86
+ @log = options[:log] || LogHelper.new
86
87
 
87
88
  @partitions = {}
88
89
  end
@@ -93,7 +94,8 @@ module BoxGrinder
93
94
  @log.trace "Checking if HW virtualization is available..."
94
95
 
95
96
  begin
96
- open('http://169.254.169.254/1.0/meta-data/local-ipv4')
97
+ Timeout::timeout(2) { open('http://169.254.169.254/1.0/meta-data/local-ipv4') }
98
+
97
99
  ec2 = true
98
100
  rescue Exception
99
101
  ec2 = false
@@ -109,7 +111,7 @@ module BoxGrinder
109
111
  false
110
112
  end
111
113
 
112
- def customize
114
+ def customize(options = {})
113
115
  read_pipe, write_pipe = IO.pipe
114
116
 
115
117
  fork do
@@ -122,7 +124,7 @@ module BoxGrinder
122
124
  end
123
125
  end
124
126
 
125
- helper = execute(write_pipe)
127
+ helper = execute(write_pipe, options)
126
128
 
127
129
  yield @guestfs, helper
128
130
 
@@ -133,7 +135,9 @@ module BoxGrinder
133
135
  Process.wait
134
136
  end
135
137
 
136
- def execute(pipe = nil)
138
+ def execute(pipe = nil, options = {})
139
+ options = {:ide_disk => false}.merge(options)
140
+
137
141
  @log.debug "Preparing guestfs..."
138
142
 
139
143
  @guestfs = pipe.nil? ? Guestfs::create : Guestfs::create.redirect(pipe)
@@ -149,6 +153,7 @@ module BoxGrinder
149
153
  @guestfs.set_selinux(1)
150
154
 
151
155
  unless hw_virtualization_available?
156
+ # This wrapper is required especially for EC2 where running qemu-kvm crashes libguestfs
152
157
  qemu_wrapper = (RbConfig::CONFIG['host_cpu'].eql?('x86_64') ? "/usr/bin/qemu-system-x86_64" : "/usr/bin/qemu")
153
158
 
154
159
  if File.exists?(qemu_wrapper)
@@ -159,7 +164,11 @@ module BoxGrinder
159
164
  end
160
165
 
161
166
  @log.trace "Adding drive '#{@raw_disk}'..."
162
- @guestfs.add_drive(@raw_disk)
167
+ if options[:ide_disk]
168
+ @guestfs.add_drive_with_if(@raw_disk, 'ide')
169
+ else
170
+ @guestfs.add_drive(@raw_disk)
171
+ end
163
172
  @log.trace "Drive added."
164
173
 
165
174
  if @guestfs.respond_to?('set_network')