vagrant-libvirt 0.6.2 → 0.8.0

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 (64) 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/handle_box_image.rb +19 -10
  11. data/lib/vagrant-libvirt/action/prepare_nfs_settings.rb +1 -1
  12. data/lib/vagrant-libvirt/action/start_domain.rb +36 -0
  13. data/lib/vagrant-libvirt/action/wait_till_up.rb +6 -32
  14. data/lib/vagrant-libvirt/action.rb +67 -80
  15. data/lib/vagrant-libvirt/config.rb +85 -30
  16. data/lib/vagrant-libvirt/driver.rb +11 -9
  17. data/lib/vagrant-libvirt/errors.rb +12 -0
  18. data/lib/vagrant-libvirt/templates/domain.xml.erb +228 -218
  19. data/lib/vagrant-libvirt/templates/private_network.xml.erb +4 -1
  20. data/lib/vagrant-libvirt/util/network_util.rb +15 -3
  21. data/lib/vagrant-libvirt/util/nfs.rb +2 -0
  22. data/lib/vagrant-libvirt/util/resolvers.rb +80 -0
  23. data/lib/vagrant-libvirt/version +1 -1
  24. data/locales/en.yml +21 -0
  25. data/spec/spec_helper.rb +36 -23
  26. data/spec/support/libvirt_context.rb +7 -4
  27. data/spec/support/sharedcontext.rb +1 -1
  28. data/spec/unit/action/cleanup_on_failure_spec.rb +131 -0
  29. data/spec/unit/action/create_domain_spec/additional_disks_domain.xml +6 -18
  30. data/spec/unit/action/create_domain_spec/custom_disk_settings.xml +43 -0
  31. data/spec/unit/action/create_domain_spec/default_domain.xml +6 -18
  32. data/spec/unit/action/create_domain_spec/two_disk_settings.xml +49 -0
  33. data/spec/unit/action/create_domain_spec.rb +51 -7
  34. data/spec/unit/action/create_domain_volume_spec.rb +5 -3
  35. data/spec/unit/action/destroy_domain_spec/additional_disks_domain.xml +47 -0
  36. data/spec/unit/action/destroy_domain_spec/box_multiple_disks.xml +55 -0
  37. data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks.xml +72 -0
  38. data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks_no_aliases.xml +67 -0
  39. data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_disks.xml +67 -0
  40. data/spec/unit/action/destroy_domain_spec/cdrom_domain.xml +48 -0
  41. data/spec/unit/action/destroy_domain_spec.rb +134 -30
  42. data/spec/unit/action/forward_ports_spec.rb +10 -2
  43. data/spec/unit/action/handle_box_image_spec.rb +30 -0
  44. data/spec/unit/action/prepare_nfs_settings_spec.rb +59 -0
  45. data/spec/unit/action/shutdown_domain_spec.rb +1 -1
  46. data/spec/unit/action/start_domain_spec/clock_timer_rtc.xml +6 -18
  47. data/spec/unit/action/start_domain_spec/default.xml +6 -18
  48. data/spec/unit/action/start_domain_spec/default_added_tpm_path.xml +6 -18
  49. data/spec/unit/action/start_domain_spec/default_added_tpm_version.xml +6 -18
  50. data/spec/unit/action/start_domain_spec/existing.xml +1 -1
  51. data/spec/unit/action/wait_till_up_spec.rb +4 -43
  52. data/spec/unit/action_spec.rb +2 -0
  53. data/spec/unit/config_spec.rb +133 -26
  54. data/spec/unit/driver_spec.rb +154 -10
  55. data/spec/unit/provider_spec.rb +11 -0
  56. data/spec/unit/templates/domain_all_settings.xml +56 -77
  57. data/spec/unit/templates/domain_cpu_mode_passthrough.xml +39 -0
  58. data/spec/unit/templates/domain_custom_cpu_model.xml +6 -18
  59. data/spec/unit/templates/domain_defaults.xml +6 -18
  60. data/spec/unit/templates/domain_spec.rb +39 -13
  61. data/spec/unit/templates/tpm/version_1.2.xml +6 -18
  62. data/spec/unit/templates/tpm/version_2.0.xml +6 -18
  63. data/spec/unit/util/resolvers_spec.rb +116 -0
  64. metadata +65 -64
@@ -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)
@@ -34,10 +34,11 @@ module VagrantPlugins
34
34
  box_format = env[:machine].box.metadata['format']
35
35
  HandleBoxImage.verify_box_format(box_format)
36
36
 
37
+ image_path = HandleBoxImage.get_box_image_path(env[:machine].box, 'box.img')
37
38
  env[:box_volume_number] = 1
38
39
  env[:box_volumes] = [{
39
- :path => HandleBoxImage.get_box_image_path(env[:machine].box, 'box.img'),
40
- :name => HandleBoxImage.get_volume_name(env[:machine].box, 'box'),
40
+ :path => image_path,
41
+ :name => HandleBoxImage.get_volume_name(env[:machine].box, 'box', image_path, env[:ui]),
41
42
  :virtual_size => HandleBoxImage.get_virtual_size(env),
42
43
  :format => box_format,
43
44
  }]
@@ -58,6 +59,8 @@ module VagrantPlugins
58
59
  volume_name = HandleBoxImage.get_volume_name(
59
60
  env[:machine].box,
60
61
  disks[i].fetch('name', disks[i]['path'].sub(/#{File.extname(disks[i]['path'])}$/, '')),
62
+ image_path,
63
+ env[:ui],
61
64
  )
62
65
 
63
66
  # allowing name means needing to check that it doesn't cause a clash
@@ -122,15 +125,21 @@ module VagrantPlugins
122
125
 
123
126
  protected
124
127
 
125
- def self.get_volume_name(box, name)
128
+ def self.get_volume_name(box, name, path, ui)
129
+ version = begin
130
+ box.version.to_s
131
+ rescue
132
+ ''
133
+ end
134
+
135
+ if version.empty?
136
+ ui.warn(I18n.t('vagrant_libvirt.box_version_missing', name: box.name.to_s))
137
+
138
+ version = "0_#{File.mtime(path).to_i}"
139
+ end
140
+
126
141
  vol_name = box.name.to_s.dup.gsub('/', '-VAGRANTSLASH-')
127
- vol_name << "_vagrant_box_image_#{
128
- begin
129
- box.version.to_s
130
- rescue
131
- ''
132
- end
133
- }_#{name.dup.gsub('/', '-SLASH-')}.img"
142
+ vol_name << "_vagrant_box_image_#{version}_#{name.dup.gsub('/', '-SLASH-')}.img"
134
143
  end
135
144
 
136
145
  def self.get_virtual_size(env)
@@ -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,6 +76,8 @@ 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
+
27
81
  # Create VM if not yet created.
28
82
  if !env[:result]
29
83
  b2.use SetNameOfDomain
@@ -31,37 +85,31 @@ module VagrantPlugins
31
85
  b2.use CreateDomain
32
86
  b2.use CreateNetworks
33
87
  b2.use CreateNetworkInterfaces
34
- b2.use SetBootOrder
35
- b2.use StartDomain
88
+
89
+ b2.use action_start
90
+
91
+ b2.use SetupComplete
36
92
  else
37
93
  b2.use HandleStoragePool
38
94
  b2.use HandleBox
39
95
  b2.use HandleBoxImage
40
96
  b2.use CreateDomainVolume
41
97
  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
98
  b2.use CreateNetworks
50
99
  b2.use CreateNetworkInterfaces
51
- b2.use SetBootOrder
52
100
 
53
- b2.use StartDomain
54
- b2.use WaitTillUp
55
- b2.use WaitForCommunicator, [:running]
101
+ b2.use action_start
56
102
 
57
- b2.use ForwardPorts
58
103
  b2.use SetHostname
59
- # b2.use SyncFolders
60
104
  end
61
105
  else
62
106
  env[:halt_on_error] = true
107
+ b2.use CreateNetworks
63
108
  b2.use action_start
64
109
  end
110
+
111
+ # corresponding action to CleanupOnFailure
112
+ b2.use SetupComplete
65
113
  end
66
114
  end
67
115
  end
@@ -82,28 +130,25 @@ module VagrantPlugins
82
130
  b2.use Call, IsSuspended do |env2, b3|
83
131
  # if vm is suspended resume it then exit
84
132
  if env2[:result]
85
- b3.use CreateNetworks
86
133
  b3.use ResumeDomain
87
134
  next
88
135
  end
89
136
 
90
137
  if !env[:machine].config.vm.box
91
138
  # With no box, we just care about network creation and starting it
92
- b3.use CreateNetworks
93
139
  b3.use SetBootOrder
94
140
  b3.use StartDomain
95
141
  else
96
142
  # VM is not running or suspended.
97
-
98
143
  b3.use Provision
99
144
 
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
@@ -342,61 +384,6 @@ module VagrantPlugins
342
384
  end
343
385
  end
344
386
 
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
387
  end
401
388
  end
402
389
  end