Class: Vagrant::Action::General::Package
- Inherits:
-
Object
- Object
- Vagrant::Action::General::Package
- Includes:
- Util
- Defined in:
- lib/vagrant/action/general/package.rb
Overview
A general packaging (tar) middleware. Given the following options, it will do the right thing:
- package.output - The filename of the outputted package.
- package.include - An array of files to include in the package.
- package.directory - The directory which contains the contents to compress into the package.
This middleware always produces the final file in the current working directory (FileUtils.pwd)
Instance Method Summary (collapse)
- - (Object) call(env)
-
- (Object) compress
Compress the exported file into a package.
-
- (Object) copy_include_files
This method copies the include files (passed in via command line) to the temporary directory so they are included in a sub-folder within the actual box.
-
- (Package) initialize(app, env)
constructor
A new instance of Package.
- - (Object) recover(env)
-
- (Object) tar_path
Path to the final box output file.
Constructor Details
- (Package) initialize(app, env)
A new instance of Package
20 21 22 23 24 25 |
# File 'lib/vagrant/action/general/package.rb', line 20 def initialize(app, env) @app = app env["package.files"] ||= {} env["package.output"] ||= env["global_config"].package.name end |
Instance Method Details
- (Object) call(env)
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/vagrant/action/general/package.rb', line 27 def call(env) @env = env raise Errors::PackageOutputDirectory if File.directory?(tar_path) raise Errors::PackageOutputExists if File.exist?(tar_path) raise Errors::PackageRequiresDirectory if !env["package.directory"] || !File.directory?(env["package.directory"]) compress @app.call(env) end |
- (Object) compress
Compress the exported file into a package
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/vagrant/action/general/package.rb', line 74 def compress @env[:ui].info I18n.t("vagrant.actions.general.package.compressing", :tar_path => tar_path) File.open(tar_path, Platform.) do |tar| Archive::Tar::Minitar::Output.open(tar) do |output| begin current_dir = FileUtils.pwd copy_include_files FileUtils.cd(@env["package.directory"]) Dir.glob(File.join(".", "**", "*")).each do |entry| Archive::Tar::Minitar.pack_file(entry, output) end ensure FileUtils.cd(current_dir) end end end end |
- (Object) copy_include_files
This method copies the include files (passed in via command line) to the temporary directory so they are included in a sub-folder within the actual box
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/vagrant/action/general/package.rb', line 54 def copy_include_files include_directory = Pathname.new(@env["package.directory"]).join("include") @env["package.files"].each do |from, dest| # We place the file in the include directory to = include_directory.join(dest) @env[:ui].info I18n.t("vagrant.actions.general.package.packaging", :file => from) FileUtils.mkdir_p(to.parent) # Copy direcotry contents recursively. if File.directory?(from) FileUtils.cp_r(Dir.glob(from), to.parent, :preserve => true) else FileUtils.cp(from, to, :preserve => true) end end end |
- (Object) recover(env)
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/vagrant/action/general/package.rb', line 40 def recover(env) # There are certain exceptions that we don't delete the file for. ignore_exc = [Errors::PackageOutputDirectory, Errors::PackageOutputExists] ignore_exc.each do |exc| return if env["vagrant.error"].is_a?(exc) end # Cleanup any packaged files if the packaging failed at some point. File.delete(tar_path) if File.exist?(tar_path) end |
- (Object) tar_path
Path to the final box output file
95 96 97 |
# File 'lib/vagrant/action/general/package.rb', line 95 def tar_path File.(@env["package.output"], FileUtils.pwd) end |