Sha256: 8658a2d979346f57378e90a8c9663a58bd4889ac00ae75d5d59ac3aad360afd3

Contents?: true

Size: 1.73 KB

Versions: 2

Compression:

Stored size: 1.73 KB

Contents

require "log4r"
require "json"
require "fileutils"

module VagrantPlugins
  module XHYVE
    module Action
      # This terminates the running instance.
      class Import
        def initialize(app, env)
          @app = app
        end

        def call(env)

          #TODO: Progress bar
          env[:ui].info("Importing box...")

          image_dir = File.join(env[:machine].data_dir, "image")
          box_dir = env[:machine].box.directory

          log.debug("Importing box from: #{box_dir}")

          create_image_directory(image_dir)
          copy_kernel_to(box_dir, image_dir)
          copy_initrd_to(box_dir, image_dir)
          copy_block_files_to(box_dir, image_dir)
          env[:ui].info("Done importing box.")

          @app.call(env)
        end

        private

        def copy_kernel_to(from, to)
          copy_file(from, to, "vmlinuz")
        end

        def copy_initrd_to(from, to)
          copy_file(from, to, "initrd.gz")
        end

        def copy_block_files_to(from, to)
          block_glob = Dir.glob(File.join(from, "block*.{img,raw,qcow,qcow2}"))
          log.debug("Copying #{block_glob} to #{to} ")
          FileUtils.cp_r block_glob, to
        end

        def copy_file(from, to, filename)
          from_box_file_path = File.join(from, filename)
          to_image_file_path = File.join(to, filename)

          unless File.exist? to_image_file_path
            log.debug("Copying #{from_box_file_path} to #{to} ")
            FileUtils.cp(from_box_file_path, to)
          end
        end

        def create_image_directory(path)
          FileUtils.mkdir_p(path)
        end

        def log
          @logger ||= Log4r::Logger.new("vagrant_xhyve::action::import")
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
vagrant-xhyve-0.4.1 lib/vagrant-xhyve/action/import.rb
vagrant-xhyve-0.4.0 lib/vagrant-xhyve/action/import.rb