lib/vagrant-mutate/box_loader.rb in vagrant-mutate-0.2.1 vs lib/vagrant-mutate/box_loader.rb in vagrant-mutate-0.2.2
- old
+ new
@@ -11,27 +11,10 @@
@env = env
@logger = Log4r::Logger.new('vagrant::mutate')
@tmp_files = []
end
- def create_box(provider_name, name, dir)
- @logger.info "Creating box #{name} with provider #{provider_name} in #{dir}"
- case provider_name
- when 'kvm'
- require_relative 'box/kvm'
- Box::Kvm.new(@env, name, dir)
- when 'libvirt'
- require_relative 'box/libvirt'
- Box::Libvirt.new(@env, name, dir)
- when 'virtualbox'
- require_relative 'box/virtualbox'
- Box::Virtualbox.new(@env, name, dir)
- else
- raise Errors::ProviderNotSupported, :provider => provider_name, :direction => 'input or output'
- end
- end
-
def prepare_for_output(name, provider_name)
@logger.info "Preparing #{name} for output as #{provider_name}"
dir = create_output_dir(name, provider_name)
box = create_box(provider_name, name, dir)
@@ -126,10 +109,55 @@
end
end
private
+ def create_box(provider_name, name, dir)
+ @logger.info "Creating box #{name} with provider #{provider_name} in #{dir}"
+ case provider_name
+ when 'kvm'
+ require_relative 'box/kvm'
+ Box::Kvm.new(@env, name, dir)
+ when 'libvirt'
+ require_relative 'box/libvirt'
+ Box::Libvirt.new(@env, name, dir)
+ when 'virtualbox'
+ require_relative 'box/virtualbox'
+ Box::Virtualbox.new(@env, name, dir)
+ else
+ raise Errors::ProviderNotSupported, :provider => provider_name, :direction => 'input or output'
+ end
+ end
+
+ def create_output_dir(name, provider_name)
+ # e.g. $HOME/.vagrant.d/boxes/fedora-19/libvirt
+ out_dir = File.join( @env.boxes_path, name, provider_name )
+ begin
+ FileUtils.mkdir_p(out_dir)
+ rescue => e
+ raise Errors::CreateBoxDirFailed, :error_message => e.message
+ end
+ @logger.info "Created output directory #{out_dir}"
+ return out_dir
+ end
+
+ def unpack(file)
+ @env.ui.info "Extracting box file to a temporary directory."
+ unless File.exists? file
+ raise Errors::BoxNotFound, :box => file
+ end
+ tmp_dir = Dir.mktmpdir(nil, @env.tmp_path)
+ @tmp_files << tmp_dir
+ result = Vagrant::Util::Subprocess.execute(
+ "bsdtar", "-v", "-x", "-m", "-C", tmp_dir.to_s, "-f", file)
+ if result.exit_code != 0
+ raise Errors::ExtractBoxFailed, :error_message => result.stderr.to_s
+ end
+ @logger.info "Unpacked box to #{tmp_dir}"
+ return tmp_dir
+ end
+
def determine_provider(dir)
metadata_file = File.join(dir, 'metadata.json')
if File.exists? metadata_file
begin
metadata = JSON.load( File.new( metadata_file, 'r') )
@@ -152,10 +180,20 @@
@logger.info "Parsed provider name as not given and box name as #{identifier}"
return nil, identifier
end
end
+ def verify_input_dir(provider_name, name)
+ input_dir = File.join( @env.boxes_path, name, provider_name)
+ if File.directory?(input_dir)
+ @logger.info "Found input directory #{input_dir}"
+ return input_dir
+ else
+ raise Errors::BoxNotFound, :box => input_dir
+ end
+ end
+
def find_input_dir(name)
box_parent_dir = File.join( @env.boxes_path, name)
if Dir.exist?(box_parent_dir)
providers = Dir.entries(box_parent_dir).reject { |entry| entry =~ /^\./ }
@@ -173,47 +211,9 @@
provider_name = providers.first
input_dir = File.join( box_parent_dir, provider_name)
@logger.info "Found source for box #{name} from provider #{provider_name} at #{input_dir}"
return provider_name, input_dir
end
- end
-
- def verify_input_dir(provider_name, name)
- input_dir = File.join( @env.boxes_path, name, provider_name)
- if File.directory?(input_dir)
- @logger.info "Found input directory #{input_dir}"
- return input_dir
- else
- raise Errors::BoxNotFound, :box => input_dir
- end
- end
-
- def create_output_dir(name, provider_name)
- # e.g. $HOME/.vagrant.d/boxes/fedora-19/libvirt
- out_dir = File.join( @env.boxes_path, name, provider_name )
- begin
- FileUtils.mkdir_p(out_dir)
- rescue => e
- raise Errors::CreateBoxDirFailed, :error_message => e.message
- end
- @logger.info "Created output directory #{out_dir}"
- return out_dir
- end
-
- def unpack(file)
- @env.ui.info "Extracting box file to a temporary directory."
- unless File.exists? file
- raise Errors::BoxNotFound, :box => file
- end
- tmp_dir = Dir.mktmpdir(nil, @env.tmp_path)
- @tmp_files << tmp_dir
- result = Vagrant::Util::Subprocess.execute(
- "bsdtar", "-v", "-x", "-m", "-C", tmp_dir.to_s, "-f", file)
- if result.exit_code != 0
- raise Errors::ExtractBoxFailed, :error_message => result.stderr.to_s
- end
- @logger.info "Unpacked box to #{tmp_dir}"
- return tmp_dir
end
end
end