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