46 lines
1.3 KiB
Ruby
46 lines
1.3 KiB
Ruby
module Vagrant
|
|
class Commands
|
|
# Export and package the current vm
|
|
#
|
|
# This command requires that an instance be powered off
|
|
class Package < Base
|
|
Base.subcommand "package", self
|
|
description "Packages a vagrant environment for distribution"
|
|
|
|
def execute(args=[])
|
|
parse_options(args)
|
|
|
|
if !options[:base]
|
|
# Packaging a pre-existing environment
|
|
env.require_persisted_vm
|
|
else
|
|
# Packaging a base box; that is a VM not tied to a specific
|
|
# vagrant environment
|
|
vm = VM.find(options[:base])
|
|
vm.env = env if vm
|
|
env.vm = vm
|
|
|
|
error_and_exit(:vm_base_not_found, :name => options[:base]) unless vm
|
|
end
|
|
|
|
error_and_exit(:vm_power_off_to_package) unless env.vm.powered_off?
|
|
env.vm.package(args[0], options[:include])
|
|
end
|
|
|
|
def options_spec(opts)
|
|
opts.banner = "Usage: vagrant package [--base BASE] [--include FILES]"
|
|
|
|
# Defaults
|
|
options[:include] = []
|
|
|
|
opts.on("--base [BASE]", "Name or UUID of VM to create a base box from") do |v|
|
|
options[:base] = v
|
|
end
|
|
|
|
opts.on("--include x,y,z", Array, "List of files to include in the package") do |v|
|
|
options[:include] = v
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end |