vagrant-libvirt 0.0.5 → 0.0.6

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.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.0.6 (Jul 24, 2013)
2
+
3
+ * Synced folder via NFS support.
4
+ * Routed private network support.
5
+ * Configurable ssh parameters in Vagrantfile via `config.ssh.*`.
6
+ * Fixed uploading base box image to storage pool bug (buffer was too big).
7
+
1
8
  # 0.0.5 (May 10, 2013)
2
9
 
3
10
  * Private networks support.
data/README.md CHANGED
@@ -4,12 +4,12 @@ This is a [Vagrant](http://www.vagrantup.com) 1.1+ plugin that adds an
4
4
  [Libvirt](http://libvirt.org) provider to Vagrant, allowing Vagrant to
5
5
  control and provision machines via Libvirt toolkit.
6
6
 
7
- **Note:** Actual version (0.0.5) is still a development one. Feedback is
7
+ **Note:** Actual version (0.0.6) is still a development one. Feedback is
8
8
  welcome and can help a lot :-)
9
9
 
10
- ## Features (Version 0.0.5)
10
+ ## Features (Version 0.0.6)
11
11
 
12
- * Controll local or remote Libvirt hypervisors.
12
+ * Controll local Libvirt hypervisors.
13
13
  * Vagrant `up`, `destroy`, `suspend`, `resume`, `halt`, `ssh` and `provision` commands.
14
14
  * Upload box image (qcow2 format) to Libvirt storage pool.
15
15
  * Create volume as COW diff image for domains.
@@ -18,7 +18,7 @@ welcome and can help a lot :-)
18
18
  * SSH into domains.
19
19
  * Setup hostname and network interfaces.
20
20
  * Provision domains with any built-in Vagrant provisioner.
21
- * Minimal synced folder support via `rsync`.
21
+ * Synced folder support via `rsync` or `nfs`.
22
22
 
23
23
  ## Future work
24
24
 
@@ -66,6 +66,11 @@ centos64 box and setup with 10.20.30.40 IP address.
66
66
 
67
67
  ```ruby
68
68
  Vagrant.configure("2") do |config|
69
+
70
+ # If you are still using old centos box, you have to setup root username for
71
+ # ssh access. Read more in section 'SSH Access To VM'.
72
+ config.ssh.username = "root"
73
+
69
74
  config.vm.define :test_vm do |test_vm|
70
75
  test_vm.vm.box = "centos64"
71
76
  test_vm.vm.network :private_network, :ip => '10.20.30.40'
@@ -110,6 +115,7 @@ Vagrant.configure("2") do |config|
110
115
  dbserver.vm.provider :libvirt do |domain|
111
116
  domain.memory = 2048
112
117
  domain.cpus = 2
118
+ domain.nested = true
113
119
  end
114
120
  end
115
121
 
@@ -153,7 +159,7 @@ An examples of network interface definitions:
153
159
 
154
160
  ```ruby
155
161
  config.vm.define :test_vm1 do |test_vm1|
156
- test_vm1.vm.network :private_network, :ip => '10.20.30.40'
162
+ test_vm1.vm.network :private_network, :ip => "10.20.30.40",
157
163
  end
158
164
  ```
159
165
 
@@ -178,14 +184,18 @@ starts with 'libvirt__' string. Here is a list of those options:
178
184
  network 'default' is used.
179
185
  * `:libvirt__netmask` - Used only together with `:ip` option. Default is
180
186
  '255.255.255.0'.
181
- * `:libvirt__nat_interface` - Name of interface, where should network be
182
- NATed. Used only when creating new network. By default, all physical
183
- interfaces are used.
184
- * `:libvirt__isolated` - If network should be isolated - without NAT to outside.
185
- Used only when creating new network. Default is set to false.
186
187
  * `:libvirt__dhcp_enabled` - If DHCP will offer addresses, or not. Used only
187
188
  when creating new network. Default is true.
188
189
  * `:libvirt__adapter` - Number specifiyng sequence number of interface.
190
+ * `:libvirt__forward_mode` - Specify one of `none`, `nat` or `route` options.
191
+ This option is used only when creating new network. Mode `none` will create
192
+ isolated network without NATing or routing outside. You will want to use
193
+ NATed forwarding typically to reach networks outside of hypervisor. Routed
194
+ forwarding is typically useful to reach other networks within hypervisor.
195
+ By default, option `nat` is used.
196
+ * `:libvirt__forward_device` - Name of interface/device, where network should
197
+ be forwarded (NATed or routed). Used only when creating new network. By
198
+ default, all physical interfaces are used.
189
199
 
190
200
  ## Obtaining Domain IP Address
191
201
 
@@ -197,6 +207,24 @@ makes lease information public in `/var/lib/libvirt/dnsmasq` directory, or in
197
207
  information like which MAC address has which IP address resides and it's parsed
198
208
  by vagrant-libvirt plugin.
199
209
 
210
+ ## SSH Access To VM
211
+
212
+ There are some configuration options for ssh access to VM via `config.ssh.*` in
213
+ Vagrantfile. Untill provider version 0.0.5, root user was hardcoded and used to
214
+ access VMs ssh. Now, vagrant user is used by default, but it's configurable via
215
+ `config.ssh.username` option in Vagrantfile now.
216
+
217
+ If you are still using CentOS 6.4 box from example in this README, please set
218
+ ssh username back to root, because user vagrant is not usable (I forgot to add
219
+ necessary ssh key to his authorized_keys).
220
+
221
+ Configurable ssh parameters in Vagrantfile after provider version 0.0.5 are:
222
+
223
+ * `config.ssh.username` - Default is username vagrant.
224
+ * `config.ssh.guest_port` - Default port is set to 22.
225
+ * `config.ssh.forward_agent` - Default is false.
226
+ * `config.ssh.forward_x11` - Default is false.
227
+
200
228
  ## Synced Folders
201
229
 
202
230
  There is minimal support for synced folders. Upon `vagrant up`, the Libvirt
@@ -206,6 +234,8 @@ to the remote machine over SSH.
206
234
  This is good enough for all built-in Vagrant provisioners (shell,
207
235
  chef, and puppet) to work!
208
236
 
237
+ If used options `:nfs => true`, folder will exported by nfs.
238
+
209
239
  ## Box Format
210
240
 
211
241
  You can view an example box in the [example_box/directory](https://github.com/pradels/vagrant-libvirt/tree/master/example_box). That directory also contains instructions on how to build a box.
@@ -7,13 +7,25 @@ Vagrant.configure("2") do |config|
7
7
  #
8
8
  #config.vm.define :test_vm do |test_vm|
9
9
  # Box name
10
+ #
10
11
  #test_vm.vm.box = "centos64"
11
12
 
13
+ # Domain Specific Options
14
+ #
15
+ # See README for more info.
16
+ #
17
+ #test_vm.vm.provider :libvirt do |domain|
18
+ # domain.memory = 2048
19
+ # domain.cpus = 2
20
+ #end
21
+
12
22
  # Interfaces for VM
13
23
  #
14
- # Hostonly network is not supported in this version of provider. Bridged
15
- # interface with network id specified can be created.
16
- #test_vm.vm.network :bridged, :bridge => "default", :adapter => 1
24
+ # Networking features in the form of `config.vm.network` support private
25
+ # networks concept. No public network or port forwarding are supported in
26
+ # current version of provider. See README for more info.
27
+ #
28
+ #test_vm.vm.network :private_network, :ip => '10.20.30.40'
17
29
  #end
18
30
 
19
31
  # Options for libvirt vagrant provider.
@@ -24,6 +24,10 @@ module VagrantPlugins
24
24
  b2.use TimedProvision
25
25
  b2.use CreateNetworks
26
26
  b2.use CreateNetworkInterfaces
27
+
28
+ b2.use NFS
29
+ b2.use PrepareNFSSettings
30
+ b2.use ShareFolders
27
31
  b2.use SetHostname
28
32
  b2.use StartDomain
29
33
  b2.use WaitTillUp
@@ -100,6 +104,7 @@ module VagrantPlugins
100
104
  end
101
105
 
102
106
  b2.use ConnectLibvirt
107
+ b2.use PruneNFSExports
103
108
  b2.use DestroyDomain
104
109
  b2.use DestroyNetworks
105
110
  end
@@ -274,6 +279,9 @@ module VagrantPlugins
274
279
  autoload :WaitTillUp, action_root.join("wait_till_up")
275
280
  autoload :SyncFolders, action_root.join("sync_folders")
276
281
  autoload :SSHRun, "vagrant/action/builtin/ssh_run"
282
+ autoload :PrepareNFSSettings, action_root.join("prepare_nfs_settings")
283
+ autoload :PruneNFSExports, action_root.join("prune_nfs_exports")
284
+ autoload :ShareFolders, action_root.join("share_folders")
277
285
  end
278
286
  end
279
287
  end
@@ -18,7 +18,7 @@ module VagrantPlugins
18
18
  env[:libvirt_compute] = Libvirt.libvirt_connection
19
19
  return @app.call(env)
20
20
  end
21
-
21
+
22
22
  # Get config options for libvirt provider.
23
23
  config = env[:machine].provider_config
24
24
 
@@ -38,7 +38,7 @@ module VagrantPlugins
38
38
  else
39
39
  uri << '://'
40
40
  uri << config.host if config.host
41
- end
41
+ end
42
42
  uri << '/system?no_verify=1'
43
43
 
44
44
  conn_attr = {}
@@ -46,7 +46,7 @@ module VagrantPlugins
46
46
  conn_attr[:libvirt_uri] = uri
47
47
  conn_attr[:libvirt_username] = config.username if config.username
48
48
  conn_attr[:libvirt_password] = config.password if config.password
49
-
49
+
50
50
  # Setup command for retrieving IP address for newly created machine
51
51
  # with some MAC address. Get it from dnsmasq leases table - either
52
52
  # /var/lib/libvirt/dnsmasq/*.leases files, or
@@ -54,7 +54,7 @@ module VagrantPlugins
54
54
  ip_command = "LEASES='/var/lib/libvirt/dnsmasq/*.leases'; "
55
55
  ip_command << "[ -f /var/lib/misc/dnsmasq.leases ] && "
56
56
  ip_command << "LEASES='/var/lib/misc/dnsmasq.leases'; "
57
- ip_command << "cat $LEASES | grep $mac | awk '{ print $3 }'"
57
+ ip_command << "grep $mac $LEASES | awk '{ print $3 }'"
58
58
  conn_attr[:libvirt_ip_command] = ip_command
59
59
 
60
60
  @logger.info("Connecting to Libvirt (#{uri}) ...")
@@ -123,7 +123,7 @@ module VagrantPlugins
123
123
 
124
124
  env[:ui].info I18n.t("vagrant.actions.vm.network.configuring")
125
125
  env[:machine].guest.capability(
126
- :configure_networks, networks_to_configure)
126
+ :configure_networks, networks_to_configure)
127
127
  end
128
128
 
129
129
  private
@@ -45,6 +45,8 @@ module VagrantPlugins
45
45
  @options = scoped_hash_override(options, :libvirt)
46
46
  @options = {
47
47
  :netmask => '255.255.255.0',
48
+ :dhcp_enabled => true,
49
+ :forward_mode => 'nat',
48
50
  }.merge(@options)
49
51
 
50
52
  # Prepare a hash describing network for this specific interface.
@@ -201,14 +203,9 @@ module VagrantPlugins
201
203
  @network_address = @interface_network[:ip_address]
202
204
  @network_netmask = @interface_network[:netmask]
203
205
 
204
- if @options[:isolated]
205
- @network_forward_mode = false
206
- else
207
- @network_forward_mode = 'nat'
208
-
209
- if @options[:nat_interface]
210
- @network_nat_interface = @options[:nat_interface]
211
- end
206
+ @network_forward_mode = @options[:forward_mode]
207
+ if @options[:forward_device]
208
+ @network_forward_device = @options[:forward_device]
212
209
  end
213
210
 
214
211
  if @options[:dhcp_enabled]
@@ -96,7 +96,14 @@ module VagrantPlugins
96
96
  volume = pool.lookup_volume_by_name(volume_name)
97
97
  stream = env[:libvirt_compute].client.stream
98
98
  volume.upload(stream, offset=0, length=image_size)
99
- buf_size = 1024*1024 # 1M
99
+
100
+ # Exception Libvirt::RetrieveError can be raised if buffer is
101
+ # longer than length accepted by API send function.
102
+ #
103
+ # TODO: How to find out if buffer is too large and what is the
104
+ # length that send function will accept?
105
+
106
+ buf_size = 1024*250 # 250K
100
107
  progress = 0
101
108
  open(image_file, 'rb') do |io|
102
109
  while (buff = io.read(buf_size)) do
@@ -0,0 +1,66 @@
1
+ require 'nokogiri'
2
+ module VagrantPlugins
3
+ module Libvirt
4
+ module Action
5
+ class PrepareNFSSettings
6
+ def initialize(app,env)
7
+ @app = app
8
+ @logger = Log4r::Logger.new("vagrant::action::vm::nfs")
9
+ end
10
+
11
+ def call(env)
12
+ @app.call(env)
13
+
14
+ using_nfs = false
15
+ env[:machine].config.vm.synced_folders.each do |id, opts|
16
+ if opts[:nfs]
17
+ using_nfs = true
18
+ break
19
+ end
20
+ end
21
+
22
+ if using_nfs
23
+ @logger.info("Using NFS, preparing NFS settings by reading host IP and machine IP")
24
+ env[:nfs_host_ip] = read_host_ip(env[:machine],env)
25
+ env[:nfs_machine_ip] = env[:machine].ssh_info[:host]
26
+
27
+ raise Vagrant::Errors::NFSNoHostonlyNetwork if !env[:nfs_machine_ip]
28
+ end
29
+ end
30
+
31
+ # Returns the IP address of the first host only network adapter
32
+ #
33
+ # @param [Machine] machine
34
+ # @return [String]
35
+ def read_host_ip(machine,env)
36
+ nets = env[:libvirt_compute].list_networks
37
+ if nets.size == 1
38
+ net = nets.first
39
+ else
40
+ domain = env[:libvirt_compute].servers.get(machine.id.to_s)
41
+ xml=Nokogiri::XML(domain.to_xml)
42
+ networkname = xml.xpath('/domain/devices/interface/source').first.attributes['network'].value.to_s
43
+ puts "network name = #{networkname}"
44
+ net = env[:libvirt_compute].list_networks.find {|netw| netw[:name] == networkname}
45
+ end
46
+ # FIXME better implement by libvirt xml parsing
47
+ `ip addr show | grep -A 2 #{net[:bridge_name]} | grep -i 'inet ' | tr -s ' ' | cut -d' ' -f3 | cut -d'/' -f 1`.chomp
48
+ end
49
+
50
+ # Returns the IP address of the guest by looking at the first
51
+ # enabled host only network.
52
+ #
53
+ # @return [String]
54
+ def read_machine_ip(machine)
55
+ machine.config.vm.networks.each do |type, options|
56
+ if type == :private_network && options[:ip].is_a?(String)
57
+ return options[:ip]
58
+ end
59
+ end
60
+
61
+ nil
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,26 @@
1
+ require 'yaml'
2
+ module VagrantPlugins
3
+ module Libvirt
4
+ module Action
5
+ class PruneNFSExports
6
+
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ if env[:host]
13
+ uuid = env[:machine].id
14
+ # get all uuids
15
+ uuids = env[:libvirt_compute].servers.all.map(&:id)
16
+ # not exiisted in array will removed from nfs
17
+ uuids.delete(uuid)
18
+ env[:host].nfs_prune(uuids)
19
+ end
20
+
21
+ @app.call(env)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -40,15 +40,19 @@ module VagrantPlugins
40
40
  }
41
41
  raise Errors::NoIpAddressError if not ip_address
42
42
 
43
- # Return the info
44
- # TODO: Some info should be configurable in Vagrantfile
45
- return {
43
+ ssh_info = {
46
44
  :host => ip_address,
47
- :port => 22,
48
- :username => 'root',
49
- :forward_agent => true,
50
- :forward_x11 => true,
45
+ :port => machine.config.ssh.guest_port,
46
+ :username => machine.config.ssh.username,
47
+ :forward_agent => machine.config.ssh.forward_agent,
48
+ :forward_x11 => machine.config.ssh.forward_x11,
51
49
  }
50
+
51
+ if not ssh_info[:username]
52
+ ssh_info[:username] = machine.config.ssh.default.username
53
+ end
54
+
55
+ ssh_info
52
56
  end
53
57
  end
54
58
  end
@@ -0,0 +1,76 @@
1
+ require "pathname"
2
+
3
+ require "log4r"
4
+
5
+ module VagrantPlugins
6
+ module Libvirt
7
+ module Action
8
+ class ShareFolders
9
+ def initialize(app, env)
10
+ @logger = Log4r::Logger.new("vagrant::action::vm::share_folders")
11
+ @app = app
12
+ end
13
+
14
+ def call(env)
15
+ @env = env
16
+
17
+ prepare_folders
18
+ create_metadata
19
+
20
+ @app.call(env)
21
+ end
22
+
23
+ # This method returns an actual list of shared
24
+ # folders to create and their proper path.
25
+ def shared_folders
26
+ {}.tap do |result|
27
+ @env[:machine].config.vm.synced_folders.each do |id, data|
28
+ # Ignore NFS shared folders
29
+ next if !data[:nfs]
30
+
31
+ # convert to NFS share
32
+ #data[:nfs] = true
33
+
34
+ # This to prevent overwriting the actual shared folders data
35
+ result[id] = data.dup
36
+ end
37
+ end
38
+ end
39
+
40
+ # Prepares the shared folders by verifying they exist and creating them
41
+ # if they don't.
42
+ def prepare_folders
43
+ shared_folders.each do |id, options|
44
+ hostpath = Pathname.new(options[:hostpath]).expand_path(@env[:root_path])
45
+
46
+ if !hostpath.directory? && options[:create]
47
+ # Host path doesn't exist, so let's create it.
48
+ @logger.debug("Host path doesn't exist, creating: #{hostpath}")
49
+
50
+ begin
51
+ hostpath.mkpath
52
+ rescue Errno::EACCES
53
+ raise Vagrant::Errors::SharedFolderCreateFailed,
54
+ :path => hostpath.to_s
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ def create_metadata
61
+ @env[:ui].info I18n.t("vagrant.actions.vm.share_folders.creating")
62
+
63
+ folders = []
64
+ shared_folders.each do |id, data|
65
+ folders << {
66
+ :name => id,
67
+ :hostpath => File.expand_path(data[:hostpath], @env[:root_path]),
68
+ :transient => data[:transient]
69
+ }
70
+ end
71
+ end
72
+
73
+ end
74
+ end
75
+ end
76
+ end
@@ -18,6 +18,7 @@ module VagrantPlugins
18
18
  ssh_info = env[:machine].ssh_info
19
19
 
20
20
  env[:machine].config.vm.synced_folders.each do |id, data|
21
+ next if data[:nfs]
21
22
  hostpath = File.expand_path(data[:hostpath], env[:root_path])
22
23
  guestpath = data[:guestpath]
23
24
 
@@ -25,7 +25,7 @@ module VagrantPlugins
25
25
  end
26
26
 
27
27
  class ImageUploadError < VagrantLibvirtError
28
- error_key(:image_upload_error_error)
28
+ error_key(:image_upload_error)
29
29
  end
30
30
 
31
31
 
@@ -9,6 +9,7 @@ module VagrantPlugins
9
9
  class Provider < Vagrant.plugin('2', :provider)
10
10
  def initialize(machine)
11
11
  @machine = machine
12
+ raise 'REQUIRE USE RUBY >= 1.9.3 VERSION' if RUBY_VERSION < '1.9.3'
12
13
  end
13
14
 
14
15
  # This should return an action callable for the given name.
@@ -2,9 +2,9 @@
2
2
  <name><%= @network_name %></name>
3
3
  <bridge name="<%= @network_bridge_name %>" />
4
4
 
5
- <% if @network_forward_mode != false %>
6
- <% if @network_nat_interface %>
7
- <forward mode="<%= @network_forward_mode %>" dev="<%= @network_nat_interface %>" />
5
+ <% if @network_forward_mode != 'none' %>
6
+ <% if @network_forward_device %>
7
+ <forward mode="<%= @network_forward_mode %>" dev="<%= @network_forward_device %>" />
8
8
  <% else %>
9
9
  <forward mode="<%= @network_forward_mode %>" />
10
10
  <% end %>
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Libvirt
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.6"
4
4
  end
5
5
  end
@@ -10,7 +10,7 @@
10
10
  # For more info about creating custom box refer to
11
11
  # https://github.com/pradels/vagrant-libvirt/tree/master/example_box
12
12
 
13
- # We need a hostname.
13
+ # We need to set a hostname.
14
14
  if [ $# -ne 1 ]; then
15
15
  echo "Usage: $0 <hostname>"
16
16
  echo "Hostname should be in format vagrant-[os-name], e.g. vagrant-redhat63."
@@ -75,7 +75,7 @@ sed -i 's/Defaults\s*requiretty/Defaults !requiretty/' /etc/sudoers
75
75
 
76
76
 
77
77
  # SSH setup
78
- # Add Vagrant ssh key for root accout.
78
+ # Add Vagrant ssh key for root and vagrant accouts.
79
79
  sed -i 's/.*UseDNS.*/UseDNS no/' /etc/ssh/sshd_config
80
80
 
81
81
  [ -d ~root/.ssh ] || mkdir ~root/.ssh
@@ -85,6 +85,13 @@ ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7
85
85
  EOF
86
86
  chmod 600 ~root/.ssh/authorized_keys
87
87
 
88
+ [ -d ~vagrant/.ssh ] || mkdir ~vagrant/.ssh
89
+ chmod 700 ~vagrant/.ssh
90
+ cat > ~vagrant/.ssh/authorized_keys << EOF
91
+ ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
92
+ EOF
93
+ chmod 600 ~vagrant/.ssh/authorized_keys
94
+
88
95
 
89
96
  # Disable firewall and switch SELinux to permissive mode.
90
97
  chkconfig iptables off
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-libvirt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-10 00:00:00.000000000 Z
12
+ date: 2013-07-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
@@ -94,10 +94,13 @@ files:
94
94
  - lib/vagrant-libvirt/action/message_not_created.rb
95
95
  - lib/vagrant-libvirt/action/message_not_running.rb
96
96
  - lib/vagrant-libvirt/action/message_not_suspended.rb
97
+ - lib/vagrant-libvirt/action/prepare_nfs_settings.rb
98
+ - lib/vagrant-libvirt/action/prune_nfs_exports.rb
97
99
  - lib/vagrant-libvirt/action/read_ssh_info.rb
98
100
  - lib/vagrant-libvirt/action/read_state.rb
99
101
  - lib/vagrant-libvirt/action/resume_domain.rb
100
102
  - lib/vagrant-libvirt/action/set_name_of_domain.rb
103
+ - lib/vagrant-libvirt/action/share_folders.rb
101
104
  - lib/vagrant-libvirt/action/start_domain.rb
102
105
  - lib/vagrant-libvirt/action/suspend_domain.rb
103
106
  - lib/vagrant-libvirt/action/sync_folders.rb