vagrant 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. data/README.md +1 -0
  2. data/config/default.rb +6 -6
  3. data/lib/vagrant.rb +6 -3
  4. data/lib/vagrant/action.rb +77 -0
  5. data/lib/vagrant/action/action_exception.rb +16 -0
  6. data/lib/vagrant/action/box/destroy.rb +19 -0
  7. data/lib/vagrant/action/box/download.rb +78 -0
  8. data/lib/vagrant/action/box/unpackage.rb +58 -0
  9. data/lib/vagrant/action/box/verify.rb +23 -0
  10. data/lib/vagrant/action/builder.rb +151 -0
  11. data/lib/vagrant/action/builtin.rb +114 -0
  12. data/lib/vagrant/action/env/error_halt.rb +16 -0
  13. data/lib/vagrant/action/env/set.rb +18 -0
  14. data/lib/vagrant/action/environment.rb +98 -0
  15. data/lib/vagrant/action/exception_catcher.rb +14 -0
  16. data/lib/vagrant/action/vm/boot.rb +54 -0
  17. data/lib/vagrant/action/vm/check_box.rb +27 -0
  18. data/lib/vagrant/action/vm/check_guest_additions.rb +32 -0
  19. data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
  20. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +39 -0
  21. data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
  22. data/lib/vagrant/action/vm/clear_shared_folders.rb +32 -0
  23. data/lib/vagrant/action/vm/customize.rb +21 -0
  24. data/lib/vagrant/action/vm/destroy.rb +20 -0
  25. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +35 -0
  26. data/lib/vagrant/action/vm/disable_networks.rb +26 -0
  27. data/lib/vagrant/action/vm/export.rb +53 -0
  28. data/lib/vagrant/action/vm/forward_ports.rb +121 -0
  29. data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
  30. data/lib/vagrant/action/vm/halt.rb +34 -0
  31. data/lib/vagrant/action/vm/import.rb +33 -0
  32. data/lib/vagrant/action/vm/match_mac_address.rb +19 -0
  33. data/lib/vagrant/{actions → action}/vm/network.rb +47 -55
  34. data/lib/vagrant/action/vm/nfs.rb +161 -0
  35. data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
  36. data/lib/vagrant/action/vm/package.rb +99 -0
  37. data/lib/vagrant/action/vm/persist.rb +22 -0
  38. data/lib/vagrant/action/vm/provision.rb +50 -0
  39. data/lib/vagrant/action/vm/resume.rb +20 -0
  40. data/lib/vagrant/{actions/vm/shared_folders.rb → action/vm/share_folders.rb} +48 -45
  41. data/lib/vagrant/action/vm/suspend.rb +20 -0
  42. data/lib/vagrant/box.rb +3 -7
  43. data/lib/vagrant/commands/base.rb +1 -3
  44. data/lib/vagrant/commands/package.rb +4 -9
  45. data/lib/vagrant/commands/up.rb +0 -2
  46. data/lib/vagrant/config.rb +15 -1
  47. data/lib/vagrant/downloaders/file.rb +1 -1
  48. data/lib/vagrant/downloaders/http.rb +2 -1
  49. data/lib/vagrant/environment.rb +18 -14
  50. data/lib/vagrant/hosts/base.rb +77 -0
  51. data/lib/vagrant/hosts/bsd.rb +53 -0
  52. data/lib/vagrant/hosts/linux.rb +52 -0
  53. data/lib/vagrant/provisioners/base.rb +17 -9
  54. data/lib/vagrant/provisioners/chef.rb +1 -1
  55. data/lib/vagrant/provisioners/chef_server.rb +4 -8
  56. data/lib/vagrant/provisioners/chef_solo.rb +1 -2
  57. data/lib/vagrant/ssh.rb +12 -4
  58. data/lib/vagrant/systems/base.rb +4 -0
  59. data/lib/vagrant/systems/linux.rb +12 -1
  60. data/lib/vagrant/util.rb +16 -0
  61. data/lib/vagrant/util/busy.rb +59 -0
  62. data/lib/vagrant/util/plain_logger.rb +11 -0
  63. data/lib/vagrant/util/platform.rb +18 -0
  64. data/lib/vagrant/util/resource_logger.rb +128 -0
  65. data/lib/vagrant/version.rb +6 -0
  66. data/lib/vagrant/vm.rb +10 -12
  67. data/templates/chef_solo_solo.erb +2 -1
  68. data/templates/nfs/exports.erb +3 -0
  69. data/templates/nfs/exports_linux.erb +3 -0
  70. data/templates/strings.yml +23 -3
  71. metadata +128 -198
  72. data/.gitignore +0 -11
  73. data/Gemfile +0 -18
  74. data/Rakefile +0 -41
  75. data/VERSION +0 -1
  76. data/bin/.gitignore +0 -0
  77. data/lib/vagrant/actions/base.rb +0 -130
  78. data/lib/vagrant/actions/box/add.rb +0 -23
  79. data/lib/vagrant/actions/box/destroy.rb +0 -14
  80. data/lib/vagrant/actions/box/download.rb +0 -67
  81. data/lib/vagrant/actions/box/unpackage.rb +0 -42
  82. data/lib/vagrant/actions/box/verify.rb +0 -32
  83. data/lib/vagrant/actions/collection.rb +0 -36
  84. data/lib/vagrant/actions/runner.rb +0 -131
  85. data/lib/vagrant/actions/vm/boot.rb +0 -43
  86. data/lib/vagrant/actions/vm/customize.rb +0 -19
  87. data/lib/vagrant/actions/vm/destroy.rb +0 -24
  88. data/lib/vagrant/actions/vm/down.rb +0 -22
  89. data/lib/vagrant/actions/vm/export.rb +0 -45
  90. data/lib/vagrant/actions/vm/forward_ports.rb +0 -134
  91. data/lib/vagrant/actions/vm/halt.rb +0 -24
  92. data/lib/vagrant/actions/vm/import.rb +0 -23
  93. data/lib/vagrant/actions/vm/move_hard_drive.rb +0 -51
  94. data/lib/vagrant/actions/vm/package.rb +0 -94
  95. data/lib/vagrant/actions/vm/provision.rb +0 -49
  96. data/lib/vagrant/actions/vm/reload.rb +0 -17
  97. data/lib/vagrant/actions/vm/resume.rb +0 -16
  98. data/lib/vagrant/actions/vm/start.rb +0 -26
  99. data/lib/vagrant/actions/vm/suspend.rb +0 -16
  100. data/lib/vagrant/actions/vm/up.rb +0 -53
  101. data/lib/vagrant/busy.rb +0 -79
  102. data/lib/vagrant/resource_logger.rb +0 -126
  103. data/lib/vagrant/util/error_helper.rb +0 -13
  104. data/lib/vagrant/util/output_helper.rb +0 -9
  105. data/test/test_helper.rb +0 -149
  106. data/test/vagrant/actions/base_test.rb +0 -32
  107. data/test/vagrant/actions/box/add_test.rb +0 -36
  108. data/test/vagrant/actions/box/destroy_test.rb +0 -17
  109. data/test/vagrant/actions/box/download_test.rb +0 -137
  110. data/test/vagrant/actions/box/unpackage_test.rb +0 -99
  111. data/test/vagrant/actions/box/verify_test.rb +0 -44
  112. data/test/vagrant/actions/collection_test.rb +0 -113
  113. data/test/vagrant/actions/runner_test.rb +0 -268
  114. data/test/vagrant/actions/vm/boot_test.rb +0 -49
  115. data/test/vagrant/actions/vm/customize_test.rb +0 -21
  116. data/test/vagrant/actions/vm/destroy_test.rb +0 -37
  117. data/test/vagrant/actions/vm/down_test.rb +0 -39
  118. data/test/vagrant/actions/vm/export_test.rb +0 -88
  119. data/test/vagrant/actions/vm/forward_ports_test.rb +0 -253
  120. data/test/vagrant/actions/vm/halt_test.rb +0 -65
  121. data/test/vagrant/actions/vm/import_test.rb +0 -45
  122. data/test/vagrant/actions/vm/move_hard_drive_test.rb +0 -106
  123. data/test/vagrant/actions/vm/network_test.rb +0 -291
  124. data/test/vagrant/actions/vm/package_test.rb +0 -254
  125. data/test/vagrant/actions/vm/provision_test.rb +0 -99
  126. data/test/vagrant/actions/vm/reload_test.rb +0 -46
  127. data/test/vagrant/actions/vm/resume_test.rb +0 -26
  128. data/test/vagrant/actions/vm/shared_folders_test.rb +0 -211
  129. data/test/vagrant/actions/vm/start_test.rb +0 -73
  130. data/test/vagrant/actions/vm/suspend_test.rb +0 -26
  131. data/test/vagrant/actions/vm/up_test.rb +0 -96
  132. data/test/vagrant/active_list_test.rb +0 -173
  133. data/test/vagrant/box_test.rb +0 -154
  134. data/test/vagrant/busy_test.rb +0 -78
  135. data/test/vagrant/command_test.rb +0 -53
  136. data/test/vagrant/commands/base_test.rb +0 -139
  137. data/test/vagrant/commands/box/add_test.rb +0 -34
  138. data/test/vagrant/commands/box/list_test.rb +0 -32
  139. data/test/vagrant/commands/box/remove_test.rb +0 -41
  140. data/test/vagrant/commands/destroy_test.rb +0 -44
  141. data/test/vagrant/commands/halt_test.rb +0 -50
  142. data/test/vagrant/commands/init_test.rb +0 -55
  143. data/test/vagrant/commands/package_test.rb +0 -104
  144. data/test/vagrant/commands/provision_test.rb +0 -60
  145. data/test/vagrant/commands/reload_test.rb +0 -44
  146. data/test/vagrant/commands/resume_test.rb +0 -44
  147. data/test/vagrant/commands/ssh_config_test.rb +0 -77
  148. data/test/vagrant/commands/ssh_test.rb +0 -129
  149. data/test/vagrant/commands/status_test.rb +0 -40
  150. data/test/vagrant/commands/suspend_test.rb +0 -44
  151. data/test/vagrant/commands/up_test.rb +0 -47
  152. data/test/vagrant/config_test.rb +0 -287
  153. data/test/vagrant/downloaders/base_test.rb +0 -28
  154. data/test/vagrant/downloaders/file_test.rb +0 -33
  155. data/test/vagrant/downloaders/http_test.rb +0 -62
  156. data/test/vagrant/environment_test.rb +0 -770
  157. data/test/vagrant/provisioners/base_test.rb +0 -33
  158. data/test/vagrant/provisioners/chef_server_test.rb +0 -176
  159. data/test/vagrant/provisioners/chef_solo_test.rb +0 -183
  160. data/test/vagrant/provisioners/chef_test.rb +0 -175
  161. data/test/vagrant/resource_logger_test.rb +0 -145
  162. data/test/vagrant/ssh_session_test.rb +0 -46
  163. data/test/vagrant/ssh_test.rb +0 -296
  164. data/test/vagrant/systems/linux_test.rb +0 -179
  165. data/test/vagrant/util/error_helper_test.rb +0 -5
  166. data/test/vagrant/util/output_helper_test.rb +0 -5
  167. data/test/vagrant/util/plain_logger_test.rb +0 -17
  168. data/test/vagrant/util/platform_test.rb +0 -18
  169. data/test/vagrant/util/stacked_proc_runner_test.rb +0 -43
  170. data/test/vagrant/util/template_renderer_test.rb +0 -144
  171. data/test/vagrant/util/translator_test.rb +0 -61
  172. data/test/vagrant/util_test.rb +0 -27
  173. data/test/vagrant/vm_test.rb +0 -235
  174. data/vagrant.gemspec +0 -291
@@ -1,43 +0,0 @@
1
- module Vagrant
2
- module Actions
3
- module VM
4
- class Boot < Base
5
- def execute!
6
- @runner.invoke_around_callback(:boot) do
7
- # Startup the VM
8
- boot
9
-
10
- # Wait for it to complete booting, or error if we could
11
- # never detect it booted up successfully
12
- if !wait_for_boot
13
- error_and_exit(:vm_failed_to_boot)
14
- end
15
- end
16
- end
17
-
18
- def boot
19
- logger.info "Booting VM..."
20
- @runner.vm.start(@runner.env.config.vm.boot_mode)
21
- end
22
-
23
- def wait_for_boot(sleeptime=5)
24
- logger.info "Waiting for VM to boot..."
25
-
26
- @runner.env.config.ssh.max_tries.to_i.times do |i|
27
- logger.info "Trying to connect (attempt ##{i+1} of #{@runner.env.config[:ssh][:max_tries]})..."
28
-
29
- if @runner.ssh.up?
30
- logger.info "VM booted and ready for use!"
31
- return true
32
- end
33
-
34
- sleep sleeptime
35
- end
36
-
37
- logger.info "Failed to connect to VM! Failed to boot?"
38
- false
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,19 +0,0 @@
1
- module Vagrant
2
- module Actions
3
- module VM
4
- class Customize < Base
5
- def execute!
6
- if !runner.env.config.vm.proc_stack.empty?
7
- logger.info "Running any VM customizations..."
8
-
9
- # Run the customization procs over the VM
10
- runner.env.config.vm.run_procs!(@runner.vm)
11
-
12
- # Save the vm
13
- runner.vm.save
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,24 +0,0 @@
1
- module Vagrant
2
- module Actions
3
- module VM
4
- class Destroy < Base
5
- def execute!
6
- @runner.invoke_around_callback(:destroy) do
7
- destroy_vm
8
- update_dotfile
9
- end
10
- end
11
-
12
- def destroy_vm
13
- logger.info "Destroying VM and associated drives..."
14
- @runner.vm.destroy(:destroy_medium => :delete)
15
- @runner.vm = nil
16
- end
17
-
18
- def update_dotfile
19
- @runner.env.update_dotfile
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,22 +0,0 @@
1
- module Vagrant
2
- module Actions
3
- module VM
4
- class Down < Base
5
- def prepare
6
- # The true as the 2nd parameter always forces the shutdown so its
7
- # fast (since we're destroying anyways)
8
- @runner.add_action(Halt, :force => true) if @runner.vm.running?
9
- @runner.add_action(Network)
10
- @runner.add_action(Destroy)
11
- end
12
-
13
- def after_halt
14
- # This sleep is necessary to wait for the VM to clean itself up.
15
- # There appears to be nothing in the API that does this "wait"
16
- # for us.
17
- Kernel.sleep(1)
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,45 +0,0 @@
1
- module Vagrant
2
- module Actions
3
- module VM
4
- class Export < Base
5
- attr_reader :temp_dir
6
-
7
- def execute!
8
- setup_temp_dir
9
- export
10
- end
11
-
12
- def cleanup
13
- if temp_dir
14
- logger.info "Removing temporary export directory..."
15
- FileUtils.rm_r(temp_dir)
16
- end
17
- end
18
-
19
- def rescue(exception)
20
- cleanup
21
- end
22
-
23
- def setup_temp_dir
24
- @temp_dir = File.join(@runner.env.tmp_path, Time.now.to_i.to_s)
25
-
26
- logger.info "Creating temporary directory for export..."
27
- FileUtils.mkpath(temp_dir)
28
- end
29
-
30
- def ovf_path
31
- File.join(temp_dir, @runner.env.config.vm.box_ovf)
32
- end
33
-
34
- def export
35
- logger.info "Exporting VM to #{ovf_path}..."
36
- @runner.vm.export(ovf_path) do |progress|
37
- logger.report_progress(progress.percent, 100, false)
38
- end
39
-
40
- logger.clear_progress
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,134 +0,0 @@
1
- module Vagrant
2
- module Actions
3
- module VM
4
- class ForwardPorts < Base
5
- def prepare
6
- external_collision_check
7
- end
8
-
9
- # This method checks for any port collisions with any VMs
10
- # which are already created (by Vagrant or otherwise).
11
- # report the collisions detected or will attempt to fix them
12
- # automatically if the port is configured to do so.
13
- def external_collision_check
14
- existing = used_ports
15
- runner.env.config.vm.forwarded_ports.each do |name, options|
16
- if existing.include?(options[:hostport].to_s)
17
- handle_collision(name, options, existing)
18
- end
19
- end
20
- end
21
-
22
- # Handles any collisions. This method will either attempt to
23
- # fix the collision automatically or will raise an error if
24
- # auto fixing is disabled.
25
- def handle_collision(name, options, existing_ports)
26
- if !options[:auto]
27
- # Auto fixing is disabled for this port forward, so we
28
- # must throw an error so the user can fix it.
29
- raise ActionException.new(:vm_port_collision, :name => name, :hostport => options[:hostport].to_s, :guestport => options[:guestport].to_s, :adapter => options[:adapter])
30
- end
31
-
32
- # Get the auto port range and get rid of the used ports and
33
- # ports which are being used in other forwards so we're just
34
- # left with available ports.
35
- range = runner.env.config.vm.auto_port_range.to_a
36
- range -= runner.env.config.vm.forwarded_ports.collect { |n, o| o[:hostport].to_i }
37
- range -= existing_ports
38
-
39
- if range.empty?
40
- raise ActionException.new(:vm_port_auto_empty, :vm_name => @runner.name, :name => name, :options => options)
41
- end
42
-
43
- # Set the port up to be the first one and add that port to
44
- # the used list.
45
- options[:hostport] = range.shift
46
- existing_ports << options[:hostport]
47
-
48
- # Notify the user
49
- logger.info "Fixed port collision: #{name} now on port #{options[:hostport]}"
50
- end
51
-
52
- def execute!
53
- clear
54
- forward_ports
55
- end
56
-
57
- def clear
58
- if used_ports.length > 0
59
- logger.info "Deleting any previously set forwarded ports..."
60
- clear_ports
61
- runner.reload!
62
- end
63
- end
64
-
65
- def forward_ports
66
- logger.info "Forwarding ports..."
67
-
68
- runner.env.config.vm.forwarded_ports.each do |name, options|
69
- adapter = options[:adapter]
70
-
71
- # Assuming the only reason to establish port forwarding is because the VM is using Virtualbox NAT networking.
72
- # Host-only or Bridged networking don't require port-forwarding and establishing forwarded ports on these
73
- # attachment types has uncertain behaviour.
74
- if @runner.vm.network_adapters[adapter].attachment_type == :nat
75
- logger.info "Forwarding \"#{name}\": #{options[:guestport]} on adapter \##{adapter+1} => #{options[:hostport]}"
76
- forward_port(name, options)
77
- else
78
- logger.info "VirtualBox adapter \##{adapter+1} not configured as \"NAT\"."
79
- logger.info "Skipped port forwarding \"#{name}\": #{options[:guestport]} on adapter\##{adapter+1} => #{options[:hostport]}"
80
- end
81
- end
82
-
83
- runner.vm.save
84
- runner.reload!
85
- end
86
-
87
- #------------------------------------------------------------
88
- # VirtualBox version-specific helpers below. VirtualBox 3.2
89
- # introduced a breaking change into the way that forwarded
90
- # ports are handled. For backwards compatability with 3.1, we
91
- # need this trickery.
92
- #------------------------------------------------------------
93
- # TODO In a future version, fix this.
94
-
95
- # Returns an array of used ports. This method is implemented
96
- # differently depending on the VirtualBox version, but the
97
- # behavior is the same.
98
- #
99
- # @return [Array<String>]
100
- def used_ports
101
- result = VirtualBox::VM.all.collect do |vm|
102
- if vm.running? && vm.uuid != runner.uuid
103
- vm.network_adapters.collect do |na|
104
- na.nat_driver.forwarded_ports.collect do |fp|
105
- fp.hostport.to_s
106
- end
107
- end
108
- end
109
- end
110
-
111
- result.flatten.uniq
112
- end
113
-
114
- # Deletes existing forwarded ports.
115
- def clear_ports
116
- runner.vm.network_adapters.each do |na|
117
- na.nat_driver.forwarded_ports.dup.each do |fp|
118
- fp.destroy
119
- end
120
- end
121
- end
122
-
123
- # Forwards a port.
124
- def forward_port(name, options)
125
- port = VirtualBox::NATForwardedPort.new
126
- port.name = name
127
- port.guestport = options[:guestport]
128
- port.hostport = options[:hostport]
129
- runner.vm.network_adapters[options[:adapter]].nat_driver.forwarded_ports << port
130
- end
131
- end
132
- end
133
- end
134
- end
@@ -1,24 +0,0 @@
1
- module Vagrant
2
- module Actions
3
- module VM
4
- class Halt < Base
5
- def execute!
6
- raise ActionException.new(:vm_not_running) unless @runner.vm.running?
7
-
8
- @runner.invoke_around_callback(:halt) do
9
- @runner.system.halt if !options[:force]
10
-
11
- if @runner.vm.state(true) != :powered_off
12
- logger.info "Forcing shutdown of VM..."
13
- @runner.vm.stop
14
- end
15
- end
16
- end
17
-
18
- def force?
19
- !!options[:force]
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,23 +0,0 @@
1
- module Vagrant
2
- module Actions
3
- module VM
4
- class Import < Base
5
- def execute!
6
- @runner.invoke_around_callback(:import) do
7
- Busy.busy do
8
- logger.info "Importing base VM (#{@runner.env.box.ovf_file})..."
9
- # Use the first argument passed to the action
10
- @runner.vm = VirtualBox::VM.import(@runner.env.box.ovf_file) do |progress|
11
- logger.report_progress(progress.percent, 100, false)
12
- end
13
-
14
- logger.clear_progress
15
-
16
- raise ActionException.new(:virtualbox_import_failure) unless @runner.vm
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,51 +0,0 @@
1
- module Vagrant
2
- module Actions
3
- module VM
4
- class MoveHardDrive < Base
5
- def execute!
6
- unless @runner.powered_off?
7
- error_and_exit(:vm_power_off_to_move_hd)
8
- return
9
- end
10
-
11
- destroy_drive_after { clone_and_attach }
12
- end
13
-
14
- def hard_drive
15
- @hard_drive ||= find_hard_drive
16
- end
17
-
18
- # TODO won't work if the first disk is not the boot disk or even if there are multiple disks
19
- def find_hard_drive
20
- @runner.vm.storage_controllers.each do |sc|
21
- sc.devices.each do |d|
22
- return d if d.image.is_a?(VirtualBox::HardDrive)
23
- end
24
- end
25
- end
26
-
27
- def clone_and_attach
28
- logger.info "Cloning current VM Disk to new location (#{new_image_path})..."
29
- hard_drive.image = hard_drive.image.clone(new_image_path, @runner.env.config.vm.disk_image_format, true)
30
-
31
- logger.info "Attaching new disk to VM ..."
32
- @runner.vm.save
33
- end
34
-
35
- def destroy_drive_after
36
- old_image = hard_drive.image
37
-
38
- yield
39
-
40
- logger.info "Destroying old VM Disk (#{old_image.filename})..."
41
- old_image.destroy(true)
42
- end
43
-
44
- # Returns the path to the new location for the hard drive
45
- def new_image_path
46
- File.join(@runner.env.config.vm.hd_location, hard_drive.image.filename)
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,94 +0,0 @@
1
- module Vagrant
2
- module Actions
3
- module VM
4
- class Package < Base
5
- attr_reader :export_action
6
-
7
- def initialize(*args)
8
- super
9
- @temp_path = nil
10
- end
11
-
12
- def prepare
13
- raise ActionException.new(:box_file_exists, :output_file => tar_path) if File.exist?(tar_path)
14
-
15
- # Verify the existance of all the additional files, if any
16
- include_files.each do |file|
17
- raise ActionException.new(:package_include_file_doesnt_exist, :filename => file) unless File.exists?(file)
18
- end
19
-
20
- # Get the export action and store a reference to it
21
- @export_action = @runner.find_action(Export)
22
- raise ActionException.new(:packaged_requires_export) unless @export_action
23
- end
24
-
25
- def execute!
26
- compress
27
- end
28
-
29
- def out_path
30
- options[:output] || "package"
31
- end
32
-
33
- def include_files
34
- options[:include] || []
35
- end
36
-
37
- def tar_path
38
- File.join(FileUtils.pwd, "#{out_path}#{@runner.env.config.package.extension}")
39
- end
40
-
41
- def temp_path
42
- export_action.temp_dir
43
- end
44
-
45
- # This method copies the include files (passed in via command line)
46
- # to the temporary directory so they are included in a sub-folder within
47
- # the actual box
48
- def copy_include_files
49
- if include_files.length > 0
50
- include_dir = File.join(temp_path, "include")
51
- FileUtils.mkdir_p(include_dir)
52
-
53
- include_files.each do |f|
54
- logger.info "Packaging additional file: #{f}"
55
- FileUtils.cp(f, include_dir)
56
- end
57
- end
58
- end
59
-
60
- # This method creates the auto-generated Vagrantfile at the root of the
61
- # box. This Vagrantfile contains the MAC address so that the user doesn't
62
- # have to worry about it.
63
- def create_vagrantfile
64
- File.open(File.join(temp_path, "Vagrantfile"), "w") do |f|
65
- f.write(TemplateRenderer.render("package_Vagrantfile", {
66
- :base_mac => @runner.vm.network_adapters.first.mac_address
67
- }))
68
- end
69
- end
70
-
71
- def compress
72
- logger.info "Packaging VM into #{tar_path}..."
73
- File.open(tar_path, Platform.tar_file_options) do |tar|
74
- Archive::Tar::Minitar::Output.open(tar) do |output|
75
- begin
76
- current_dir = FileUtils.pwd
77
-
78
- copy_include_files
79
- create_vagrantfile
80
-
81
- FileUtils.cd(temp_path)
82
- Dir.glob(File.join(".", "**", "*")).each do |entry|
83
- Archive::Tar::Minitar.pack_file(entry, output)
84
- end
85
- ensure
86
- FileUtils.cd(current_dir)
87
- end
88
- end
89
- end
90
- end
91
- end
92
- end
93
- end
94
- end