vagrant-libvirt 0.6.3 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +65 -13
  3. data/lib/vagrant-libvirt/action/cleanup_on_failure.rb +76 -0
  4. data/lib/vagrant-libvirt/action/create_domain.rb +56 -10
  5. data/lib/vagrant-libvirt/action/create_network_interfaces.rb +5 -1
  6. data/lib/vagrant-libvirt/action/create_networks.rb +24 -0
  7. data/lib/vagrant-libvirt/action/destroy_domain.rb +106 -21
  8. data/lib/vagrant-libvirt/action/destroy_networks.rb +1 -1
  9. data/lib/vagrant-libvirt/action/forward_ports.rb +12 -11
  10. data/lib/vagrant-libvirt/action/prepare_nfs_settings.rb +1 -1
  11. data/lib/vagrant-libvirt/action/start_domain.rb +36 -0
  12. data/lib/vagrant-libvirt/action/wait_till_up.rb +6 -32
  13. data/lib/vagrant-libvirt/action.rb +72 -83
  14. data/lib/vagrant-libvirt/config.rb +85 -30
  15. data/lib/vagrant-libvirt/driver.rb +11 -9
  16. data/lib/vagrant-libvirt/errors.rb +12 -0
  17. data/lib/vagrant-libvirt/templates/domain.xml.erb +228 -218
  18. data/lib/vagrant-libvirt/templates/private_network.xml.erb +4 -1
  19. data/lib/vagrant-libvirt/util/network_util.rb +15 -3
  20. data/lib/vagrant-libvirt/util/nfs.rb +2 -0
  21. data/lib/vagrant-libvirt/util/resolvers.rb +80 -0
  22. data/lib/vagrant-libvirt/version +1 -1
  23. data/locales/en.yml +17 -0
  24. data/spec/spec_helper.rb +36 -23
  25. data/spec/support/libvirt_context.rb +7 -4
  26. data/spec/support/sharedcontext.rb +1 -1
  27. data/spec/unit/action/cleanup_on_failure_spec.rb +131 -0
  28. data/spec/unit/action/create_domain_spec/additional_disks_domain.xml +6 -18
  29. data/spec/unit/action/create_domain_spec/custom_disk_settings.xml +43 -0
  30. data/spec/unit/action/create_domain_spec/default_domain.xml +6 -18
  31. data/spec/unit/action/create_domain_spec/two_disk_settings.xml +49 -0
  32. data/spec/unit/action/create_domain_spec.rb +51 -7
  33. data/spec/unit/action/create_domain_volume_spec.rb +5 -3
  34. data/spec/unit/action/destroy_domain_spec/additional_disks_domain.xml +47 -0
  35. data/spec/unit/action/destroy_domain_spec/box_multiple_disks.xml +55 -0
  36. data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks.xml +72 -0
  37. data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks_no_aliases.xml +67 -0
  38. data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_disks.xml +67 -0
  39. data/spec/unit/action/destroy_domain_spec/cdrom_domain.xml +48 -0
  40. data/spec/unit/action/destroy_domain_spec.rb +134 -30
  41. data/spec/unit/action/forward_ports_spec.rb +10 -2
  42. data/spec/unit/action/prepare_nfs_settings_spec.rb +59 -0
  43. data/spec/unit/action/shutdown_domain_spec.rb +1 -1
  44. data/spec/unit/action/start_domain_spec/clock_timer_rtc.xml +6 -18
  45. data/spec/unit/action/start_domain_spec/default.xml +6 -18
  46. data/spec/unit/action/start_domain_spec/default_added_tpm_path.xml +6 -18
  47. data/spec/unit/action/start_domain_spec/default_added_tpm_version.xml +6 -18
  48. data/spec/unit/action/start_domain_spec/existing.xml +1 -1
  49. data/spec/unit/action/wait_till_up_spec.rb +4 -43
  50. data/spec/unit/action_spec.rb +2 -0
  51. data/spec/unit/config_spec.rb +133 -26
  52. data/spec/unit/driver_spec.rb +154 -10
  53. data/spec/unit/templates/domain_all_settings.xml +56 -77
  54. data/spec/unit/templates/domain_cpu_mode_passthrough.xml +39 -0
  55. data/spec/unit/templates/domain_custom_cpu_model.xml +6 -18
  56. data/spec/unit/templates/domain_defaults.xml +6 -18
  57. data/spec/unit/templates/domain_spec.rb +39 -13
  58. data/spec/unit/templates/tpm/version_1.2.xml +6 -18
  59. data/spec/unit/templates/tpm/version_2.0.xml +6 -18
  60. data/spec/unit/util/resolvers_spec.rb +116 -0
  61. metadata +40 -41
@@ -47,7 +47,7 @@ module VagrantPlugins
47
47
  )
48
48
  rescue Libvirt::RetrieveError => e
49
49
  # this network is already destroyed, so move on
50
- if e.message =~ /Network not found/
50
+ if e.libvirt_code == ProviderLibvirt::Util::ErrorCodes::VIR_ERR_NO_NETWORK
51
51
  @logger.info 'It is already undefined'
52
52
  next
53
53
  # some other error occured, so raise it again
@@ -87,12 +87,13 @@ module VagrantPlugins
87
87
  gateway_ports)
88
88
  ssh_info = machine.ssh_info
89
89
  params = %W(
90
+ -n
90
91
  -L
91
92
  #{host_ip}:#{host_port}:#{guest_ip}:#{guest_port}
92
93
  -N
93
94
  #{ssh_info[:host]}
94
- ).join(' ')
95
- params += ' -g' if gateway_ports
95
+ )
96
+ params += '-g' if gateway_ports
96
97
 
97
98
  options = (%W(
98
99
  User=#{ssh_info[:username]}
@@ -105,32 +106,32 @@ module VagrantPlugins
105
106
  ForwardX11=#{ssh_info[:forward_x11] ? 'yes' : 'no'}
106
107
  IdentitiesOnly=#{ssh_info[:keys_only] ? 'yes' : 'no'}
107
108
  ) + ssh_info[:private_key_path].map do |pk|
108
- "IdentityFile='\"#{pk}\"'"
109
- end).map { |s| "-o #{s}" }.join(' ')
109
+ "IdentityFile=\"#{pk}\""
110
+ end
111
+ ).map { |s| ['-o', s] }.flatten
110
112
 
111
- options += " -o ProxyCommand=\"#{ssh_info[:proxy_command]}\"" if machine.provider_config.proxy_command
113
+ options += ['-o', "ProxyCommand=\"#{ssh_info[:proxy_command]}\""] if machine.provider_config.proxy_command
114
+
115
+ ssh_cmd = ['ssh'] + options + params
112
116
 
113
117
  # TODO: instead of this, try and lock and get the stdin from spawn...
114
- ssh_cmd = ''
115
118
  if host_port <= 1024
116
119
  @@lock.synchronize do
117
120
  # TODO: add i18n
118
121
  env[:ui].info 'Requesting sudo for host port(s) <= 1024'
119
122
  r = system('sudo -v')
120
123
  if r
121
- ssh_cmd += 'sudo ' # add sudo prefix
124
+ ssh_cmd.unshift('sudo') # add sudo prefix
122
125
  end
123
126
  end
124
127
  end
125
128
 
126
- ssh_cmd += "ssh -n #{options} #{params}"
127
-
128
- @logger.debug "Forwarding port with `#{ssh_cmd}`"
129
+ @logger.debug "Forwarding port with `#{ssh_cmd.join(' ')}`"
129
130
  log_file = ssh_forward_log_file(
130
131
  env[:machine], host_ip, host_port, guest_ip, guest_port,
131
132
  )
132
133
  @logger.info "Logging to #{log_file}"
133
- spawn(ssh_cmd, [:out, :err] => [log_file, 'w'], :pgroup => true)
134
+ spawn(*ssh_cmd, [:out, :err] => [log_file, 'w'], :pgroup => true)
134
135
  end
135
136
 
136
137
  def ssh_forward_log_file(machine, host_ip, host_port, guest_ip, guest_port)
@@ -59,7 +59,7 @@ module VagrantPlugins
59
59
  command = "ip=$(which ip); ${ip:-/sbin/ip} addr show | grep -i 'inet ' | grep -v '127.0.0.1' | tr -s ' ' | cut -d' ' -f3 | cut -d'/' -f 1"
60
60
  result = ''
61
61
  machine.communicate.execute(command) do |type, data|
62
- result << data if type == :stdout
62
+ result += data if type == :stdout
63
63
  end
64
64
 
65
65
  ips = result.chomp.split("\n").uniq
@@ -222,6 +222,24 @@ module VagrantPlugins
222
222
  graphics.attributes['passwd'] = config.graphics_passwd
223
223
  end
224
224
  end
225
+ graphics_gl = REXML::XPath.first(xml_descr, '/domain/devices/graphics/gl')
226
+ if graphics_gl.nil?
227
+ if config.graphics_gl
228
+ graphics_gl = REXML::Element.new('gl', REXML::XPath.first(xml_descr, '/domain/devices/graphics'))
229
+ graphics_gl.attributes['enable'] = 'yes'
230
+ descr_changed = true
231
+ end
232
+ else
233
+ if config.graphics_gl
234
+ if graphics_gl.attributes['enable'] != 'yes'
235
+ graphics_gl.attributes['enable'] = 'yes'
236
+ descr_changed = true
237
+ end
238
+ else
239
+ graphics_gl.parent.delete_element(graphics_gl)
240
+ descr_changed = true
241
+ end
242
+ end
225
243
  else
226
244
  # graphics_type = none, remove entire element
227
245
  graphics.parent.delete_element(graphics) unless graphics.nil?
@@ -280,6 +298,24 @@ module VagrantPlugins
280
298
  video_model.attributes['vram'] = config.video_vram
281
299
  end
282
300
  end
301
+ video_accel = REXML::XPath.first(xml_descr, '/domain/devices/video/model/acceleration')
302
+ if video_accel.nil?
303
+ if config.video_accel3d
304
+ video_accel = REXML::Element.new('acceleration', REXML::XPath.first(xml_descr, '/domain/devices/video/model'))
305
+ video_accel.attributes['accel3d'] = 'yes'
306
+ descr_changed = true
307
+ end
308
+ else
309
+ if config.video_accel3d
310
+ if video_accel.attributes['accel3d'] != 'yes'
311
+ video_accel.attributes['accel3d'] = 'yes'
312
+ descr_changed = true
313
+ end
314
+ else
315
+ video_accel.parent.delete_element(video_accel)
316
+ descr_changed = true
317
+ end
318
+ end
283
319
  end
284
320
 
285
321
  # Sound device
@@ -22,60 +22,34 @@ module VagrantPlugins
22
22
  # Initialize metrics if they haven't been
23
23
  env[:metrics] ||= {}
24
24
 
25
- # Get domain object
26
- domain = env[:machine].provider.driver.get_domain(env[:machine])
25
+ driver = env[:machine].provider.driver
26
+ domain = driver.get_domain(env[:machine])
27
+
27
28
  if domain.nil?
28
29
  raise Errors::NoDomainError,
29
30
  error_message: "Domain #{env[:machine].id} not found"
30
31
  end
31
32
 
32
- # Wait for domain to obtain an ip address. Ip address is searched
33
- # from arp table, either locally or remotely via ssh, if Libvirt
34
- # connection was done via ssh.
35
33
  env[:ip_address] = nil
36
34
  @logger.debug("Searching for IP for MAC address: #{domain.mac}")
37
35
  env[:ui].info(I18n.t('vagrant_libvirt.waiting_for_ip'))
38
36
 
37
+ # Wait for domain to obtain an ip address. Ip address is searched
38
+ # from dhcp leases table via libvirt, or via qemu agent if enabled.
39
39
  env[:metrics]['instance_ip_time'] = Util::Timer.time do
40
40
  retryable(on: Fog::Errors::TimeoutError, tries: 300) do
41
41
  # just return if interrupted and let the warden call recover
42
42
  return if env[:interrupted]
43
43
 
44
44
  # Wait for domain to obtain an ip address
45
- env[:ip_address] = env[:machine].provider.driver.get_domain_ipaddress(env[:machine], domain)
45
+ env[:ip_address] = driver.get_domain_ipaddress(env[:machine], domain)
46
46
  end
47
47
  end
48
-
49
48
  @logger.info("Got IP address #{env[:ip_address]}")
50
49
  @logger.info("Time for getting IP: #{env[:metrics]['instance_ip_time']}")
51
50
 
52
51
  @app.call(env)
53
52
  end
54
-
55
- def recover(env)
56
- # Undo the import
57
- terminate(env)
58
- end
59
-
60
- def terminate(env)
61
- if env[:machine].state.id != :not_created
62
- # If we're not supposed to destroy on error then just return
63
- return unless env[:destroy_on_error]
64
-
65
- if env[:halt_on_error]
66
- halt_env = env.dup
67
- halt_env.delete(:interrupted)
68
- halt_env[:config_validate] = false
69
- env[:action_runner].run(Action.action_halt, halt_env)
70
- else
71
- destroy_env = env.dup
72
- destroy_env.delete(:interrupted)
73
- destroy_env[:config_validate] = false
74
- destroy_env[:force_confirm_destroy] = true
75
- env[:action_runner].run(Action.action_destroy, destroy_env)
76
- end
77
- end
78
- end
79
53
  end
80
54
  end
81
55
  end
@@ -6,6 +6,58 @@ require 'log4r'
6
6
  module VagrantPlugins
7
7
  module ProviderLibvirt
8
8
  module Action
9
+ action_root = Pathname.new(File.expand_path('../action', __FILE__))
10
+ autoload :CleanupOnFailure, action_root.join('cleanup_on_failure')
11
+ autoload :ClearForwardedPorts, action_root.join('forward_ports')
12
+ autoload :CreateDomain, action_root.join('create_domain')
13
+ autoload :CreateDomainVolume, action_root.join('create_domain_volume')
14
+ autoload :CreateNetworkInterfaces, action_root.join('create_network_interfaces')
15
+ autoload :CreateNetworks, action_root.join('create_networks')
16
+ autoload :CleanMachineFolder, action_root.join('clean_machine_folder')
17
+ autoload :DestroyDomain, action_root.join('destroy_domain')
18
+ autoload :DestroyNetworks, action_root.join('destroy_networks')
19
+ autoload :ForwardPorts, action_root.join('forward_ports')
20
+ autoload :HaltDomain, action_root.join('halt_domain')
21
+ autoload :HandleBoxImage, action_root.join('handle_box_image')
22
+ autoload :HandleStoragePool, action_root.join('handle_storage_pool')
23
+ autoload :IsCreated, action_root.join('is_created')
24
+ autoload :IsRunning, action_root.join('is_running')
25
+ autoload :IsSuspended, action_root.join('is_suspended')
26
+ autoload :MessageAlreadyCreated, action_root.join('message_already_created')
27
+ autoload :MessageNotCreated, action_root.join('message_not_created')
28
+ autoload :MessageNotRunning, action_root.join('message_not_running')
29
+ autoload :MessageNotSuspended, action_root.join('message_not_suspended')
30
+ autoload :MessageWillNotDestroy, action_root.join('message_will_not_destroy')
31
+ autoload :PackageDomain, action_root.join('package_domain')
32
+ autoload :PrepareNFSSettings, action_root.join('prepare_nfs_settings')
33
+ autoload :PrepareNFSValidIds, action_root.join('prepare_nfs_valid_ids')
34
+ autoload :PruneNFSExports, action_root.join('prune_nfs_exports')
35
+ autoload :ReadMacAddresses, action_root.join('read_mac_addresses')
36
+ autoload :RemoveLibvirtImage, action_root.join('remove_libvirt_image')
37
+ autoload :RemoveStaleVolume, action_root.join('remove_stale_volume')
38
+ autoload :ResumeDomain, action_root.join('resume_domain')
39
+ autoload :SetNameOfDomain, action_root.join('set_name_of_domain')
40
+ autoload :SetBootOrder, action_root.join('set_boot_order')
41
+ autoload :SetupComplete, action_root.join('cleanup_on_failure')
42
+ # I don't think we need it anymore
43
+ autoload :ShareFolders, action_root.join('share_folders')
44
+ autoload :ShutdownDomain, action_root.join('shutdown_domain')
45
+ autoload :StartDomain, action_root.join('start_domain')
46
+ autoload :StartShutdownTimer, action_root.join('shutdown_domain')
47
+ autoload :SuspendDomain, action_root.join('suspend_domain')
48
+ autoload :TimedProvision, action_root.join('timed_provision')
49
+ autoload :WaitTillUp, action_root.join('wait_till_up')
50
+
51
+ autoload :HandleBox, 'vagrant/action/builtin/handle_box'
52
+ autoload :Package, 'vagrant/action/general/package'
53
+ autoload :PackageSetupFiles, 'vagrant/action/general/package_setup_files'
54
+ autoload :PackageSetupFolders, 'vagrant/action/general/package_setup_folders'
55
+ autoload :ProvisionerCleanup, 'vagrant/action/builtin/provisioner_cleanup'
56
+ autoload :SSHRun, 'vagrant/action/builtin/ssh_run'
57
+ autoload :SyncedFolderCleanup, 'vagrant/action/builtin/synced_folder_cleanup'
58
+ autoload :SyncedFolders, 'vagrant/action/builtin/synced_folders'
59
+ autoload :WaitForCommunicator, 'vagrant/action/builtin/wait_for_communicator'
60
+
9
61
  # Include the built-in & general modules so we can use them as top-level things.
10
62
  include Vagrant::Action::Builtin
11
63
  include Vagrant::Action::General
@@ -24,44 +76,42 @@ module VagrantPlugins
24
76
  b.use ConfigValidate
25
77
  b.use BoxCheckOutdated
26
78
  b.use Call, IsCreated do |env, b2|
79
+ b2.use CleanupOnFailure
80
+ b2.use Provision
81
+
27
82
  # Create VM if not yet created.
28
83
  if !env[:result]
29
84
  b2.use SetNameOfDomain
85
+
30
86
  if !env[:machine].config.vm.box
31
87
  b2.use CreateDomain
32
88
  b2.use CreateNetworks
33
89
  b2.use CreateNetworkInterfaces
34
- b2.use SetBootOrder
35
- b2.use StartDomain
90
+
91
+ b2.use action_start
92
+
93
+ b2.use SetupComplete
36
94
  else
37
95
  b2.use HandleStoragePool
38
96
  b2.use HandleBox
39
97
  b2.use HandleBoxImage
40
98
  b2.use CreateDomainVolume
41
99
  b2.use CreateDomain
42
-
43
- b2.use Provision
44
- b2.use PrepareNFSValidIds
45
- b2.use SyncedFolderCleanup
46
- b2.use SyncedFolders
47
- b2.use PrepareNFSSettings
48
- b2.use ShareFolders
49
100
  b2.use CreateNetworks
50
101
  b2.use CreateNetworkInterfaces
51
- b2.use SetBootOrder
52
102
 
53
- b2.use StartDomain
54
- b2.use WaitTillUp
55
- b2.use WaitForCommunicator, [:running]
103
+ b2.use action_start
56
104
 
57
- b2.use ForwardPorts
58
105
  b2.use SetHostname
59
- # b2.use SyncFolders
60
106
  end
61
107
  else
62
108
  env[:halt_on_error] = true
109
+ b2.use CreateNetworks
63
110
  b2.use action_start
64
111
  end
112
+
113
+ # corresponding action to CleanupOnFailure
114
+ b2.use SetupComplete
65
115
  end
66
116
  end
67
117
  end
@@ -69,7 +119,7 @@ module VagrantPlugins
69
119
  # Assuming VM is created, just start it. This action is not called
70
120
  # directly by any subcommand. VM can be suspended, already running or in
71
121
  # poweroff state.
72
- def self.action_start
122
+ private_class_method def self.action_start
73
123
  Vagrant::Action::Builder.new.tap do |b|
74
124
  b.use ConfigValidate
75
125
  b.use Call, IsRunning do |env, b2|
@@ -82,28 +132,23 @@ module VagrantPlugins
82
132
  b2.use Call, IsSuspended do |env2, b3|
83
133
  # if vm is suspended resume it then exit
84
134
  if env2[:result]
85
- b3.use CreateNetworks
86
135
  b3.use ResumeDomain
87
136
  next
88
137
  end
89
138
 
90
139
  if !env[:machine].config.vm.box
91
140
  # With no box, we just care about network creation and starting it
92
- b3.use CreateNetworks
93
141
  b3.use SetBootOrder
94
142
  b3.use StartDomain
95
143
  else
96
144
  # VM is not running or suspended.
97
-
98
- b3.use Provision
99
-
100
- # Ensure networks are created and active
101
- b3.use CreateNetworks
102
- b3.use SetBootOrder
103
-
104
145
  b3.use PrepareNFSValidIds
105
146
  b3.use SyncedFolderCleanup
106
147
  b3.use SyncedFolders
148
+ b3.use PrepareNFSSettings
149
+ b3.use ShareFolders
150
+
151
+ b3.use SetBootOrder
107
152
 
108
153
  # Start it..
109
154
  b3.use StartDomain
@@ -114,8 +159,6 @@ module VagrantPlugins
114
159
  b3.use WaitForCommunicator, [:running]
115
160
 
116
161
  b3.use ForwardPorts
117
- b3.use PrepareNFSSettings
118
- b3.use ShareFolders
119
162
  end
120
163
  end
121
164
  end
@@ -264,7 +307,6 @@ module VagrantPlugins
264
307
  end
265
308
 
266
309
  b3.use Provision
267
- # b3.use SyncFolders
268
310
  end
269
311
  end
270
312
  end
@@ -310,6 +352,8 @@ module VagrantPlugins
310
352
  end
311
353
  b3.use CreateNetworks
312
354
  b3.use ResumeDomain
355
+ b3.use Provision
356
+ b3.use WaitForCommunicator, [:running]
313
357
  end
314
358
  end
315
359
  end
@@ -342,61 +386,6 @@ module VagrantPlugins
342
386
  end
343
387
  end
344
388
 
345
- action_root = Pathname.new(File.expand_path('../action', __FILE__))
346
- autoload :PackageDomain, action_root.join('package_domain')
347
- autoload :CreateDomain, action_root.join('create_domain')
348
- autoload :CreateDomainVolume, action_root.join('create_domain_volume')
349
- autoload :CreateNetworkInterfaces, action_root.join('create_network_interfaces')
350
- autoload :CreateNetworks, action_root.join('create_networks')
351
- autoload :CleanMachineFolder, action_root.join('clean_machine_folder')
352
- autoload :DestroyDomain, action_root.join('destroy_domain')
353
- autoload :DestroyNetworks, action_root.join('destroy_networks')
354
- autoload :ForwardPorts, action_root.join('forward_ports')
355
- autoload :ClearForwardedPorts, action_root.join('forward_ports')
356
- autoload :HaltDomain, action_root.join('halt_domain')
357
- autoload :StartShutdownTimer, action_root.join('shutdown_domain')
358
- autoload :ShutdownDomain, action_root.join('shutdown_domain')
359
- autoload :HandleBoxImage, action_root.join('handle_box_image')
360
- autoload :HandleStoragePool, action_root.join('handle_storage_pool')
361
- autoload :RemoveLibvirtImage, action_root.join('remove_libvirt_image')
362
- autoload :IsCreated, action_root.join('is_created')
363
- autoload :IsRunning, action_root.join('is_running')
364
- autoload :IsSuspended, action_root.join('is_suspended')
365
- autoload :MessageAlreadyCreated, action_root.join('message_already_created')
366
- autoload :MessageNotCreated, action_root.join('message_not_created')
367
- autoload :MessageNotRunning, action_root.join('message_not_running')
368
- autoload :MessageNotSuspended, action_root.join('message_not_suspended')
369
- autoload :MessageWillNotDestroy, action_root.join('message_will_not_destroy')
370
-
371
- autoload :RemoveStaleVolume, action_root.join('remove_stale_volume')
372
-
373
- autoload :PrepareNFSSettings, action_root.join('prepare_nfs_settings')
374
- autoload :PrepareNFSValidIds, action_root.join('prepare_nfs_valid_ids')
375
- autoload :PruneNFSExports, action_root.join('prune_nfs_exports')
376
-
377
- autoload :ReadMacAddresses, action_root.join('read_mac_addresses')
378
- autoload :ResumeDomain, action_root.join('resume_domain')
379
- autoload :SetNameOfDomain, action_root.join('set_name_of_domain')
380
- autoload :SetBootOrder, action_root.join('set_boot_order')
381
-
382
- # I don't think we need it anymore
383
- autoload :ShareFolders, action_root.join('share_folders')
384
- autoload :StartDomain, action_root.join('start_domain')
385
- autoload :SuspendDomain, action_root.join('suspend_domain')
386
- autoload :TimedProvision, action_root.join('timed_provision')
387
-
388
- autoload :WaitTillUp, action_root.join('wait_till_up')
389
- autoload :PrepareNFSValidIds, action_root.join('prepare_nfs_valid_ids')
390
-
391
- autoload :Package, 'vagrant/action/general/package'
392
- autoload :PackageSetupFiles, 'vagrant/action/general/package_setup_files'
393
- autoload :PackageSetupFolders, 'vagrant/action/general/package_setup_folders'
394
- autoload :SSHRun, 'vagrant/action/builtin/ssh_run'
395
- autoload :HandleBox, 'vagrant/action/builtin/handle_box'
396
- autoload :SyncedFolders, 'vagrant/action/builtin/synced_folders'
397
- autoload :SyncedFolderCleanup, 'vagrant/action/builtin/synced_folder_cleanup'
398
- autoload :ProvisionerCleanup, 'vagrant/action/builtin/provisioner_cleanup'
399
- autoload :WaitForCommunicator, 'vagrant/action/builtin/wait_for_communicator'
400
389
  end
401
390
  end
402
391
  end