vagrant-libvirt 0.6.3 → 0.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9cdcf747d5d28e485d660d025beefdd8c3f58c107816ce719bcb0ba14559913a
4
- data.tar.gz: 71026dbb9ada779894dd0d5136f91e0da2c986ee279c320919817aaea511bdce
3
+ metadata.gz: 696535927498f1996c3fd02f6e5503bd8ac47e92eb226d03cd28c46329232b93
4
+ data.tar.gz: 73cfeb05a09dad74122a6f09f562b5d56ac7c43a7ec029f2e8f5c8dcfa2a9413
5
5
  SHA512:
6
- metadata.gz: 7dc8d355a72f309322630617dbb3be94536969637bc3f6d7c9fa907aebbbd1b96bcc49aad3501dd5dd3a1220d17d5d12a14f7cd87d57e43c2790238e5099622d
7
- data.tar.gz: ded86b4e49bfb44e3d257936373b804d918a1eb34b956e2a02c9d99e60a7f5140cdc5241740720461a505897b74690589e0ba8c9a4656ce430be9164b86541c3
6
+ metadata.gz: b4237cc046b138f9fbd5efad00bcc80d97b964d6a374e68b94c20cc19fd668e6eda2ea2939d8782ca05b9ea80478907a9728c3b34692b1b2adbb6305f1798cf4
7
+ data.tar.gz: 5a3e8094b553fd2557be01514f782139bfa52edca8c7dc811138932a84c7f3bffe44e7c0a5a5b322868e648016146efc9b67f5e3a7356e98b2d58b0e6ca2db74
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Vagrant Libvirt Provider
2
2
 
3
3
  [![Join the chat at https://gitter.im/vagrant-libvirt/vagrant-libvirt](https://badges.gitter.im/vagrant-libvirt/vagrant-libvirt.svg)](https://gitter.im/vagrant-libvirt/vagrant-libvirt?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
4
- [![Build Status](https://travis-ci.org/vagrant-libvirt/vagrant-libvirt.svg)](https://travis-ci.org/vagrant-libvirt/vagrant-libvirt)
4
+ [![Build Status](https://github.com/vagrant-libvirt/vagrant-libvirt/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/vagrant-libvirt/vagrant-libvirt/actions/workflows/unit-tests.yml)
5
5
  [![Coverage Status](https://coveralls.io/repos/github/vagrant-libvirt/vagrant-libvirt/badge.svg?branch=master)](https://coveralls.io/github/vagrant-libvirt/vagrant-libvirt?branch=master)
6
+ [![Gem Version](https://badge.fury.io/rb/vagrant-libvirt.svg)](https://badge.fury.io/rb/vagrant-libvirt)
6
7
 
7
8
  This is a [Vagrant](http://www.vagrantup.com) plugin that adds a
8
9
  [Libvirt](http://libvirt.org) provider to Vagrant, allowing Vagrant to
@@ -49,6 +50,7 @@ can help a lot :-)
49
50
  * [USB Redirector Devices](#usb-redirector-devices)
50
51
  * [Filter for USB Redirector Devices](#filter-for-usb-redirector-devices)
51
52
  * [Random number generator passthrough](#random-number-generator-passthrough)
53
+ * [Serial Console Devices](#serial-console-devices)
52
54
  * [Watchdog device](#watchdog-device)
53
55
  * [Smartcard device](#smartcard-device)
54
56
  * [Hypervisor Features](#hypervisor-features)
@@ -137,12 +139,6 @@ docker pull vagrantlibvirt/vagrant-libvirt:edge
137
139
  ```
138
140
  ---
139
141
 
140
- Preparing the docker run, only once:
141
-
142
- ```bash
143
- mkdir -p ~/.vagrant.d/{boxes,data,tmp}
144
- ```
145
-
146
142
  Running the image:
147
143
  ```bash
148
144
  docker run -it --rm \
@@ -173,6 +169,14 @@ vagrant(){
173
169
  ```
174
170
 
175
171
  ### Using Podman
172
+
173
+ Preparing the podman run, only once:
174
+
175
+ ```bash
176
+ mkdir -p ~/.vagrant.d/{boxes,data,tmp}
177
+ ```
178
+ _N.B. This is needed until the entrypoint works for podman to only mount the `~/.vagrant.d` directory_
179
+
176
180
  To run with Podman you need to include
177
181
 
178
182
  ```bash
@@ -180,6 +184,7 @@ To run with Podman you need to include
180
184
  --security-opt label=disable \
181
185
  -v ~/.vagrant.d/boxes:/vagrant/boxes \
182
186
  -v ~/.vagrant.d/data:/vagrant/data \
187
+ -v ~/.vagrant.d/data:/vagrant/tmp \
183
188
  ```
184
189
 
185
190
  for example:
@@ -191,6 +196,7 @@ vagrant(){
191
196
  -v /var/run/libvirt/:/var/run/libvirt/ \
192
197
  -v ~/.vagrant.d/boxes:/vagrant/boxes \
193
198
  -v ~/.vagrant.d/data:/vagrant/data \
199
+ -v ~/.vagrant.d/data:/vagrant/tmp \
194
200
  -v $(realpath "${PWD}"):${PWD} \
195
201
  -w $(realpath "${PWD}") \
196
202
  --network host \
@@ -232,7 +238,7 @@ installed](http://docs.vagrantup.com/v2/installation/index.html).
232
238
  Vagrant-libvirt supports Vagrant 2.0, 2.1 & 2.2. It should also work with earlier
233
239
  releases from 1.5 onwards but they are not actively tested.
234
240
 
235
- Check the [.travis.yml](https://github.com/vagrant-libvirt/vagrant-libvirt/blob/master/.travis.yml)
241
+ Check the [unit tests](https://github.com/vagrant-libvirt/vagrant-libvirt/blob/master/.github/workflows/unit-tests.yml)
236
242
  for the current list of tested versions.
237
243
 
238
244
  *We only test with the upstream version!* If you decide to install your distro's
@@ -593,6 +599,8 @@ end
593
599
  * `graphics_autoport` - Sets autoport for graphics, Libvirt in this case
594
600
  ignores graphics_port value, Defaults to 'yes'. Possible value are "yes" and
595
601
  "no"
602
+ * `graphics_gl` - Set to `true` to enable OpenGL. Defaults to `true` if
603
+ `video_accel3d` is `true`.
596
604
  * `keymap` - Set keymap for vm. default: en-us
597
605
  * `kvm_hidden` - [Hide the hypervisor from the
598
606
  guest](https://libvirt.org/formatdomain.html#elementsFeatures). Useful for
@@ -603,6 +611,8 @@ end
603
611
  "cirrus", "vmvga", "xen", "vbox", or "qxl".
604
612
  * `video_vram` - Used by some graphics card types to vary the amount of RAM
605
613
  dedicated to video. Defaults to 9216.
614
+ * `video_accel3d` - Set to `true` to enable 3D acceleration. Defaults to
615
+ `false`.
606
616
  * `sound_type` - [Set the virtual sound card](https://libvirt.org/formatdomain.html#elementsSound)
607
617
  Defaults to "ich6".
608
618
  * `machine_type` - Sets machine type. Equivalent to qemu `-machine`. Use
@@ -657,6 +667,9 @@ end
657
667
  it is not possible to communicate with VM through `vagrant ssh` or run
658
668
  provisioning. Setting to 'false' is only possible when VM doesn't use box.
659
669
  Defaults set to 'true'.
670
+ * `serial` - [libvirt serial devices](https://libvirt.org/formatdomain.html#elementsConsole).
671
+ Configure a serial/console port to communicate with the guest. Can be used
672
+ to log to file boot time messages sent to ttyS0 console by the guest.
660
673
 
661
674
  Specific domain settings can be set for each domain separately in multi-VM
662
675
  environment. Example below shows a part of Vagrantfile, where specific options
@@ -906,6 +919,9 @@ starts with `libvirt__` string. Here is a list of those options:
906
919
  If not specified the default is 'false'.
907
920
  * `:bus` - The bus of the PCI device. Both :bus and :slot have to be defined.
908
921
  * `:slot` - The slot of the PCI device. Both :bus and :slot have to be defined.
922
+ * `:libvirt__always_destroy` - Allow domains that use but did not create a
923
+ network to destroy it when the domain is destroyed (default: `true`). Set to
924
+ `false` to only allow the domain that created the network to destroy it.
909
925
 
910
926
  When the option `:libvirt__dhcp_enabled` is to to 'false' it shouldn't matter
911
927
  whether the virtual network contains a DHCP server or not and vagrant-libvirt
@@ -1249,6 +1265,26 @@ Vagrant.configure("2") do |config|
1249
1265
  end
1250
1266
  ```
1251
1267
 
1268
+ ## Serial Console Devices
1269
+ You can define settings to redirect output from the serial console of any VM brought up with libvirt to a file or other devices that are listening. [See libvirt documentation](https://libvirt.org/formatdomain.html#elementCharSerial).
1270
+
1271
+ Currently only redirecting to a file is supported.
1272
+
1273
+ * `type` - only value that has an effect is file, in the future support may be added for virtual console, pty, dev, pipe, tcp, udp, unix socket, spiceport & nmdm.
1274
+ * `source` - options pertaining to how the connection attaches to the host, contains sub-settings dependent on `type`.
1275
+ `source` options for type `file`
1276
+ * `path` - file on host to connect to the serial port to record all output. May be created by qemu system user causing some permissions issues.
1277
+
1278
+ ```ruby
1279
+ Vagrant.configure("2") do |config|
1280
+ config.vm.define :test do |test|
1281
+ test.vm.provider :libvirt do |domain|
1282
+ domain.serial :type => "file", :source => {:path => "/var/log/vm_consoles/test.log}
1283
+ end
1284
+ end
1285
+ end
1286
+ ```
1287
+
1252
1288
  ## Random number generator passthrough
1253
1289
 
1254
1290
  You can pass through `/dev/random` to your VM by configuring the domain like this:
@@ -78,9 +78,11 @@ module VagrantPlugins
78
78
  else
79
79
  "passwd='#{config.graphics_passwd}'"
80
80
  end
81
+ @graphics_gl = config.graphics_gl
81
82
  @video_type = config.video_type
82
83
  @sound_type = config.sound_type
83
84
  @video_vram = config.video_vram
85
+ @video_accel3d = config.video_accel3d
84
86
  @keymap = config.keymap
85
87
  @kvm_hidden = config.kvm_hidden
86
88
 
@@ -171,6 +173,20 @@ module VagrantPlugins
171
173
  storage_prefix = get_disk_storage_prefix(env, @storage_pool_name)
172
174
  end
173
175
 
176
+ @serials = config.serials
177
+
178
+ @serials.each do |serial|
179
+ next unless serial[:source] && serial[:source][:path]
180
+
181
+ dir = File.dirname(serial[:source][:path])
182
+ begin
183
+ FileUtils.mkdir_p(dir)
184
+ rescue ::Errno::EACCES
185
+ raise Errors::SerialCannotCreatePathError,
186
+ path: dir
187
+ end
188
+ end
189
+
174
190
  @disks.each do |disk|
175
191
  disk[:path] ||= _disk_name(@name, disk)
176
192
 
@@ -285,6 +301,7 @@ module VagrantPlugins
285
301
  env[:ui].info(" -- Graphics Password: #{@graphics_passwd.empty? ? 'Not defined' : 'Defined'}")
286
302
  env[:ui].info(" -- Video Type: #{@video_type}")
287
303
  env[:ui].info(" -- Video VRAM: #{@video_vram}")
304
+ env[:ui].info(" -- Video 3D accel: #{@video_accel3d}")
288
305
  env[:ui].info(" -- Sound Type: #{@sound_type}")
289
306
  env[:ui].info(" -- Keymap: #{@keymap}")
290
307
  env[:ui].info(" -- TPM Backend: #{@tpm_type}")
@@ -379,6 +396,13 @@ module VagrantPlugins
379
396
  env[:ui].info(" -- smartcard device: mode=#{@smartcard_dev[:mode]}, type=#{@smartcard_dev[:type]}")
380
397
  end
381
398
 
399
+ @serials.each_with_index do |serial, port|
400
+ if serial[:source]
401
+ env[:ui].info(" -- SERIAL(COM#{port}: redirect to #{serial[:source][:path]}")
402
+ env[:ui].warn(I18n.t('vagrant_libvirt.warnings.creating_domain_console_access_disabled'))
403
+ end
404
+ end
405
+
382
406
  unless @qemu_args.empty?
383
407
  env[:ui].info(' -- Command line args: ')
384
408
  @qemu_args.each do |arg|
@@ -208,6 +208,9 @@ module VagrantPlugins
208
208
 
209
209
  # Create a private network.
210
210
  create_private_network(env)
211
+ write_created_network(env)
212
+ else
213
+ write_created_network(env) unless @options[:always_destroy] == false
211
214
  end
212
215
  end
213
216
 
@@ -247,6 +250,9 @@ module VagrantPlugins
247
250
 
248
251
  # Create a private network.
249
252
  create_private_network(env)
253
+ write_created_network(env)
254
+ else
255
+ write_created_network(env) unless @options[:always_destroy] == false
250
256
  end
251
257
  end
252
258
 
@@ -273,6 +279,9 @@ module VagrantPlugins
273
279
 
274
280
  # Create a private network.
275
281
  create_private_network(env)
282
+ write_created_network(env)
283
+ else
284
+ write_created_network(env) unless @options[:always_destroy] == false
276
285
  end
277
286
  end
278
287
 
@@ -347,7 +356,9 @@ module VagrantPlugins
347
356
  rescue => e
348
357
  raise Errors::CreateNetworkError, error_message: e.message
349
358
  end
359
+ end
350
360
 
361
+ def write_created_network(env)
351
362
  created_networks_file = env[:machine].data_dir + 'created_networks'
352
363
 
353
364
  message = 'Saving information about created network ' \
@@ -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
@@ -119,8 +119,10 @@ module VagrantPlugins
119
119
  attr_accessor :graphics_port
120
120
  attr_accessor :graphics_passwd
121
121
  attr_accessor :graphics_ip
122
+ attr_accessor :graphics_gl
122
123
  attr_accessor :video_type
123
124
  attr_accessor :video_vram
125
+ attr_accessor :video_accel3d
124
126
  attr_accessor :keymap
125
127
  attr_accessor :kvm_hidden
126
128
  attr_accessor :sound_type
@@ -196,6 +198,9 @@ module VagrantPlugins
196
198
  # Use QEMU Agent to get ip address
197
199
  attr_accessor :qemu_use_agent
198
200
 
201
+ # serial consoles
202
+ attr_accessor :serials
203
+
199
204
  def initialize
200
205
  @uri = UNSET_VALUE
201
206
  @driver = UNSET_VALUE
@@ -267,8 +272,10 @@ module VagrantPlugins
267
272
  @graphics_port = UNSET_VALUE
268
273
  @graphics_ip = UNSET_VALUE
269
274
  @graphics_passwd = UNSET_VALUE
275
+ @graphics_gl = UNSET_VALUE
270
276
  @video_type = UNSET_VALUE
271
277
  @video_vram = UNSET_VALUE
278
+ @video_accel3d = UNSET_VALUE
272
279
  @sound_type = UNSET_VALUE
273
280
  @keymap = UNSET_VALUE
274
281
  @kvm_hidden = UNSET_VALUE
@@ -338,6 +345,8 @@ module VagrantPlugins
338
345
 
339
346
  # Use Qemu agent to get ip address
340
347
  @qemu_use_agent = UNSET_VALUE
348
+
349
+ @serials = []
341
350
  end
342
351
 
343
352
  def boot(device)
@@ -705,6 +714,20 @@ module VagrantPlugins
705
714
  @qemu_env.merge!(options)
706
715
  end
707
716
 
717
+ def serial(options={})
718
+ options = {
719
+ :type => "pty",
720
+ :source => nil,
721
+ }.merge(options)
722
+
723
+ serial = {
724
+ :type => options[:type],
725
+ :source => options[:source],
726
+ }
727
+
728
+ @serials << serial
729
+ end
730
+
708
731
  def _default_uri
709
732
  # Determine if any settings except driver provided explicitly, if not
710
733
  # and the LIBVIRT_DEFAULT_URI var is set, use that.
@@ -817,7 +840,6 @@ module VagrantPlugins
817
840
  @management_network_pci_slot = nil if @management_network_pci_slot == UNSET_VALUE
818
841
  @management_network_domain = nil if @management_network_domain == UNSET_VALUE
819
842
  @management_network_mtu = nil if @management_network_mtu == UNSET_VALUE
820
- @system_uri = 'qemu:///system' if @system_uri == UNSET_VALUE
821
843
 
822
844
  # Domain specific settings.
823
845
  @title = '' if @title == UNSET_VALUE
@@ -871,6 +893,8 @@ module VagrantPlugins
871
893
  @graphics_ip = '127.0.0.1' if @graphics_ip == UNSET_VALUE
872
894
  @video_type = 'cirrus' if @video_type == UNSET_VALUE
873
895
  @video_vram = 9216 if @video_vram == UNSET_VALUE
896
+ @video_accel3d = false if @video_accel3d == UNSET_VALUE
897
+ @graphics_gl = @video_accel3d if @graphics_gl == UNSET_VALUE
874
898
  @sound_type = nil if @sound_type == UNSET_VALUE
875
899
  @keymap = 'en-us' if @keymap == UNSET_VALUE
876
900
  @kvm_hidden = false if @kvm_hidden == UNSET_VALUE
@@ -945,7 +969,9 @@ module VagrantPlugins
945
969
  # Additional QEMU commandline environment variables
946
970
  @qemu_env = {} if @qemu_env == UNSET_VALUE
947
971
 
948
- @qemu_use_agent = true if @qemu_use_agent != UNSET_VALUE
972
+ @qemu_use_agent = false if @qemu_use_agent == UNSET_VALUE
973
+
974
+ @serials = [{:type => 'pty', :source => nil}] if @serials == []
949
975
  end
950
976
 
951
977
  def validate(machine)
@@ -959,6 +985,9 @@ module VagrantPlugins
959
985
  end
960
986
  end
961
987
 
988
+ unless @qemu_use_agent == true || @qemu_use_agent == false
989
+ errors << "libvirt.qemu_use_agent must be a boolean."
990
+ end
962
991
 
963
992
  if @qemu_use_agent == true
964
993
  # if qemu agent is used to optain domain ip configuration, at least
@@ -976,6 +1005,12 @@ module VagrantPlugins
976
1005
  end
977
1006
  end
978
1007
 
1008
+ machine.provider_config.serials.each do |serial|
1009
+ if serial[:source] and serial[:source][:path].nil?
1010
+ errors << "serial :source requires :path to be defined"
1011
+ end
1012
+ end
1013
+
979
1014
  machine.config.vm.networks.each do |_type, opts|
980
1015
  if opts[:mac]
981
1016
  if opts[:mac] =~ /\A([0-9a-fA-F]{12})\z/
@@ -1017,6 +1052,10 @@ module VagrantPlugins
1017
1052
  c = qemu_env != UNSET_VALUE ? qemu_env.dup : {}
1018
1053
  c.merge!(other.qemu_env) if other.qemu_env != UNSET_VALUE
1019
1054
  result.qemu_env = c
1055
+
1056
+ s = serials.dup
1057
+ s += other.serials
1058
+ result.serials = s
1020
1059
  end
1021
1060
  end
1022
1061
 
@@ -1026,6 +1065,10 @@ module VagrantPlugins
1026
1065
  # Parse uri to extract individual components
1027
1066
  uri = _parse_uri(@uri)
1028
1067
 
1068
+ system_uri = uri.dup
1069
+ system_uri.path = '/system'
1070
+ @system_uri = system_uri.to_s if @system_uri == UNSET_VALUE
1071
+
1029
1072
  # only set @connect_via_ssh if not explicitly to avoid overriding
1030
1073
  # and allow an error to occur if the @uri and @connect_via_ssh disagree
1031
1074
  @connect_via_ssh = uri.scheme.include? "ssh" if @connect_via_ssh == UNSET_VALUE
@@ -61,7 +61,7 @@ module VagrantPlugins
61
61
 
62
62
  config = @machine.provider_config
63
63
 
64
- @system_connection = Libvirt::open(config.system_uri)
64
+ @system_connection = Libvirt::open_read_only(config.system_uri)
65
65
  @system_connection
66
66
  end
67
67
 
@@ -98,16 +98,16 @@ module VagrantPlugins
98
98
  end
99
99
 
100
100
  def get_domain_ipaddress(machine, domain)
101
- if @machine.provider_config.qemu_use_session
102
- return get_ipaddress_from_system domain.mac
103
- end
104
-
105
101
  # attempt to get ip address from qemu agent
106
102
  if @machine.provider_config.qemu_use_agent == true
107
103
  @logger.info('Get IP via qemu agent')
108
104
  return get_ipaddress_from_qemu_agent(domain, machine.id)
109
105
  end
110
106
 
107
+ if @machine.provider_config.qemu_use_session
108
+ return get_ipaddress_from_system domain.mac
109
+ end
110
+
111
111
  # Get IP address from dhcp leases table
112
112
  begin
113
113
  ip_address = get_ipaddress_from_domain(domain)
@@ -168,9 +168,9 @@ module VagrantPlugins
168
168
  def get_ipaddress_from_qemu_agent(domain, machine_id)
169
169
  ip_address = nil
170
170
  addresses = nil
171
- dom = system_connection.lookup_domain_by_uuid(machine_id)
171
+ libvirt_domain = connection.client.lookup_domain_by_uuid(machine_id)
172
172
  begin
173
- response = dom.qemu_agent_command('{"execute":"guest-network-get-interfaces"}', timeout=10)
173
+ response = libvirt_domain.qemu_agent_command('{"execute":"guest-network-get-interfaces"}', timeout=10)
174
174
  @logger.debug("Got Response from qemu agent")
175
175
  @logger.debug(response)
176
176
  addresses = JSON.parse(response)
@@ -180,7 +180,7 @@ module VagrantPlugins
180
180
 
181
181
  unless addresses.nil?
182
182
  addresses["return"].each{ |interface|
183
- if domain.mac == interface["hardware-address"]
183
+ if domain.mac.downcase == interface["hardware-address"].downcase
184
184
  @logger.debug("Found mathing interface: [%s]" % interface["name"])
185
185
  if interface.has_key?("ip-addresses")
186
186
  interface["ip-addresses"].each{ |ip|
@@ -181,6 +181,10 @@ module VagrantPlugins
181
181
  class DeleteSnapshotError < VagrantLibvirtError
182
182
  error_key(:delete_snapshot_error)
183
183
  end
184
+
185
+ class SerialCannotCreatePathError < VagrantLibvirtError
186
+ error_key(:serial_cannot_create_path_error)
187
+ end
184
188
  end
185
189
  end
186
190
  end
@@ -162,10 +162,19 @@
162
162
  </disk>
163
163
  <% end %>
164
164
 
165
- <serial type='pty'>
166
- <target port='0'/>
165
+ <% @serials.each_with_index do |serial, port| %>
166
+ <serial type='<%= serial[:type] %>'>
167
+ <% unless serial[:source].nil? %>
168
+ <source path='<%= serial[:source][:path] %>'/>
169
+ <% end %>
170
+ <target port='<%= port %>'/>
167
171
  </serial>
168
- <console type='pty'>
172
+ <% end %>
173
+ <% console_log = @serials.first %>
174
+ <console type='<%= console_log[:type] %>'>
175
+ <% unless console_log[:source].nil? %>
176
+ <source path='<%= console_log[:source][:path] %>'/>
177
+ <% end %>
169
178
  <target port='0'/>
170
179
  </console>
171
180
 
@@ -207,9 +216,13 @@
207
216
  <% end %>
208
217
  <% if @graphics_type != 'none' %>
209
218
  <%# Video device -%>
210
- <graphics type='<%= @graphics_type %>' port='<%= @graphics_port %>' autoport='<%= @graphics_autoport %>' listen='<%= @graphics_ip %>' keymap='<%= @keymap %>' <%= @graphics_passwd%> />
219
+ <graphics type='<%= @graphics_type %>' port='<%= @graphics_port %>' autoport='<%= @graphics_autoport %>' listen='<%= @graphics_ip %>' keymap='<%= @keymap %>' <%= @graphics_passwd %> <% if not @graphics_gl %>/><% else %>>
220
+ <gl enable='yes' />
221
+ </graphics><% end %>
211
222
  <video>
212
- <model type='<%= @video_type %>' vram='<%= @video_vram %>' heads='1'/>
223
+ <model type='<%= @video_type %>' vram='<%= @video_vram %>' heads='1'<% if not @video_accel3d %>/><% else %>>
224
+ <acceleration accel3d='yes'/>
225
+ </model><% end %>
213
226
  </video>
214
227
  <%#End Video -%>
215
228
  <% end %>
@@ -119,7 +119,8 @@ module VagrantPlugins
119
119
  IPAddr.new(options[:network_address]).get_mask :
120
120
  '255.255.255.0',
121
121
  dhcp_enabled: true,
122
- forward_mode: 'nat'
122
+ forward_mode: 'nat',
123
+ always_destroy: true
123
124
  }.merge(options)
124
125
 
125
126
  if options[:type].to_s == 'dhcp' && options[:ip].nil?
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'vagrant/action/builtin/mixin_synced_folders'
4
+
3
5
  module VagrantPlugins
4
6
  module ProviderLibvirt
5
7
  module Util
@@ -1 +1 @@
1
- 0.6.3
1
+ 0.7.0
data/locales/en.yml CHANGED
@@ -64,6 +64,8 @@ en:
64
64
  the minimum box image size of '%{minimum}'.
65
65
  forwarding_udp: |-
66
66
  Forwarding UDP ports is not supported. Ignoring.
67
+ creating_domain_console_access_disabled: |-
68
+ Serial console is being redirected, access via virsh will be disabled.
67
69
 
68
70
  errors:
69
71
  call_chain_error: Invalid action chain, must ensure that '%{require_action}' is called prior to calling '%{current_action}'
@@ -166,6 +168,8 @@ en:
166
168
  management_network_required: |-
167
169
  Management network can't be disabled when VM use box.
168
170
  Please fix your configuration and run vagrant again.
171
+ serial_cannot_create_path_error: |-
172
+ Error creating path for serial port output log: %{path}
169
173
 
170
174
  states:
171
175
  paused: |-
data/spec/spec_helper.rb CHANGED
@@ -42,4 +42,12 @@ RSpec.configure do |config|
42
42
  config.before(:suite) do
43
43
  ENV.delete('LIBVIRT_DEFAULT_URI')
44
44
  end
45
+
46
+ config.mock_with :rspec do |mocks|
47
+ # This option should be set when all dependencies are being loaded
48
+ # before a spec run, as is the case in a typical spec helper. It will
49
+ # cause any verifying double instantiation for a class that does not
50
+ # exist to raise, protecting against incorrectly spelt names.
51
+ mocks.verify_doubled_constant_names = true
52
+ end
45
53
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'fog/libvirt'
4
+ require 'fog/libvirt/models/compute/server'
5
+ require 'libvirt'
4
6
 
5
7
  shared_context 'libvirt' do
6
8
  include_context 'unit'
@@ -8,7 +10,9 @@ shared_context 'libvirt' do
8
10
  let(:libvirt_context) { true }
9
11
  let(:id) { 'dummy-vagrant_dummy' }
10
12
  let(:connection) { double('connection') }
11
- let(:domain) { double('domain') }
13
+ let(:domain) { instance_double('::Fog::Libvirt::Compute::Server') }
14
+ let(:libvirt_client) { instance_double('::Libvirt::Connect') }
15
+ let(:libvirt_domain) { instance_double('::Libvirt::Domain') }
12
16
  let(:logger) { double('logger') }
13
17
 
14
18
  def connection_result(options = {})
@@ -22,11 +26,10 @@ shared_context 'libvirt' do
22
26
  stub_const('::Fog::Compute', connection)
23
27
 
24
28
  # drivers also call vm_exists? during init;
25
- allow(connection).to receive(:servers).with(kind_of(String))
29
+ allow(connection).to receive(:servers)
26
30
  .and_return(connection_result(result: nil))
27
31
 
28
- # return some information for domain when needed
29
- allow(domain).to receive(:mac).and_return('9C:D5:53:F1:5A:E7')
32
+ allow(connection).to receive(:client).and_return(libvirt_client)
30
33
 
31
34
  allow(machine).to receive(:id).and_return(id)
32
35
  allow(Log4r::Logger).to receive(:new).and_return(logger)
@@ -36,6 +36,6 @@ shared_context 'unit' do
36
36
 
37
37
  before (:each) do
38
38
  allow(machine).to receive(:guest).and_return(guest)
39
- allow(machine).to receive(:communicator).and_return(communicator)
39
+ allow(machine).to receive(:communicate).and_return(communicator)
40
40
  end
41
41
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'support/sharedcontext'
5
+
6
+ require 'vagrant-libvirt/action/prepare_nfs_settings'
7
+
8
+
9
+ describe VagrantPlugins::ProviderLibvirt::Action::PrepareNFSSettings do
10
+ subject { described_class.new(app, env) }
11
+
12
+ include_context 'unit'
13
+
14
+ describe '#call' do
15
+ before do
16
+ # avoid requiring nfsd installed to run tests
17
+ allow(machine.env.host).to receive(:capability?).with(:nfs_installed).and_return(true)
18
+ allow(machine.env.host).to receive(:capability).with(:nfs_installed).and_return(true)
19
+ end
20
+
21
+ context 'when enabled' do
22
+ let(:vagrantfile) do
23
+ <<-EOF
24
+ Vagrant.configure('2') do |config|
25
+ config.vm.box = "vagrant-libvirt/test"
26
+ config.vm.define :test
27
+ config.vm.synced_folder ".", "/vagrant", type: "nfs"
28
+ config.vm.provider :libvirt do |libvirt|
29
+ #{vagrantfile_providerconfig}
30
+ end
31
+ end
32
+ EOF
33
+ end
34
+ let(:socket) { double('socket') }
35
+
36
+ before do
37
+ allow(::TCPSocket).to receive(:new).and_return(socket)
38
+ allow(socket).to receive(:close)
39
+ end
40
+
41
+ it 'should retrieve the guest IP address' do
42
+ times_called = 0
43
+ expect(::TCPSocket).to receive(:new) do
44
+ # force reaching later code
45
+ times_called += 1
46
+ times_called < 2 ? raise("StandardError") : socket
47
+ end
48
+ expect(machine).to receive(:ssh_info).and_return({:host => '192.168.1.2'})
49
+ expect(communicator).to receive(:execute).and_yield(:stdout, "192.168.1.2\n192.168.2.2")
50
+
51
+ expect(subject.call(env)).to be_nil
52
+ end
53
+ end
54
+ end
55
+ end
@@ -50,7 +50,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::ShutdownDomain do
50
50
  end
51
51
 
52
52
  it "should not shutdown" do
53
- expect(domain).not_to receive(:shutoff)
53
+ expect(domain).not_to receive(:poweroff)
54
54
  subject.call(env)
55
55
  end
56
56
 
@@ -22,6 +22,8 @@ describe VagrantPlugins::ProviderLibvirt::Action::WaitTillUp do
22
22
  .and_return(driver)
23
23
  allow(driver).to receive(:get_domain).and_return(domain)
24
24
  allow(driver).to receive(:state).and_return(:running)
25
+ # return some information for domain when needed
26
+ allow(domain).to receive(:mac).and_return('9C:D5:53:F1:5A:E7')
25
27
  end
26
28
 
27
29
  context 'when machine does not exist' do
@@ -62,7 +64,6 @@ describe VagrantPlugins::ProviderLibvirt::Action::WaitTillUp do
62
64
  expect(app).to_not receive(:call)
63
65
  expect(ui).to receive(:info).with('Waiting for domain to get an IP address...')
64
66
  expect(ui).to_not receive(:info).with('Waiting for SSH to become available...')
65
- expect(env[:machine].communicate).to_not receive(:ready?)
66
67
  expect {subject.call(env) }.to raise_error(::Fog::Errors::TimeoutError)
67
68
  end
68
69
  end
@@ -338,6 +338,54 @@ describe VagrantPlugins::ProviderLibvirt::Config do
338
338
  end
339
339
  end
340
340
 
341
+ context '@system_uri' do
342
+ [
343
+ # system uri
344
+ [ # transport and hostname
345
+ {:uri => "qemu+ssh://localhost/session"},
346
+ {:uri => "qemu+ssh://localhost/session", :system_uri => "qemu+ssh://localhost/system"},
347
+ ],
348
+ [ # explicitly set
349
+ {:qemu_use_session => true, :system_uri => "custom://remote/system"},
350
+ {:uri => "qemu:///session", :system_uri => "custom://remote/system"},
351
+ ],
352
+ ].each do |inputs, outputs, options|
353
+ opts = {}
354
+ opts.merge!(options) if options
355
+
356
+ it "should handle inputs #{inputs} with env (#{opts[:env]})" do
357
+ # allow some of these to fail for now if marked as such
358
+ if !opts[:allow_failure].nil?
359
+ pending(opts[:allow_failure])
360
+ end
361
+
362
+ if !opts[:setup].nil?
363
+ opts[:setup].apply_binding(binding)
364
+ end
365
+
366
+ inputs.each do |k, v|
367
+ subject.instance_variable_set("@#{k}", v)
368
+ end
369
+
370
+ if !opts[:env].nil?
371
+ opts[:env].each do |k, v|
372
+ fake_env[k] = v
373
+ end
374
+ end
375
+
376
+ subject.finalize!
377
+
378
+ # ensure failed output indicates which settings are incorrect in the failed test
379
+ got = subject.instance_variables.each_with_object({}) do |name, hash|
380
+ if outputs.key?(name.to_s[1..-1].to_sym)
381
+ hash["#{name.to_s[1..-1]}".to_sym] =subject.instance_variable_get(name)
382
+ end
383
+ end
384
+ expect(got).to eq(outputs)
385
+ end
386
+ end
387
+ end
388
+
341
389
  context '@proxy_command' do
342
390
  before(:example) do
343
391
  stub_const("ENV", fake_env)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'fog/libvirt/requests/compute/dhcp_leases'
4
+
3
5
  require 'spec_helper'
4
6
  require 'support/binding_proc'
5
7
  require 'support/sharedcontext'
@@ -8,6 +10,7 @@ require 'vagrant-libvirt/driver'
8
10
 
9
11
  describe VagrantPlugins::ProviderLibvirt::Driver do
10
12
  include_context 'unit'
13
+ include_context 'libvirt'
11
14
 
12
15
  subject { described_class.new(machine) }
13
16
 
@@ -27,6 +30,7 @@ describe VagrantPlugins::ProviderLibvirt::Driver do
27
30
  end
28
31
  EOF
29
32
  end
33
+
30
34
  # need to override the default package iso_env as using a different
31
35
  # name for the test machines above.
32
36
  let(:machine) { iso_env.machine(:test1, :libvirt) }
@@ -36,6 +40,14 @@ describe VagrantPlugins::ProviderLibvirt::Driver do
36
40
  let(:system_connection1) { double("system connection 1") }
37
41
  let(:system_connection2) { double("system connection 2") }
38
42
 
43
+ # make it easier for distros that want to switch the default value for
44
+ # qemu_use_session to true by ensuring it is explicitly false for tests.
45
+ before do
46
+ allow(machine.provider_config).to receive(:qemu_use_session).and_return(false)
47
+ allow(logger).to receive(:info)
48
+ allow(logger).to receive(:debug)
49
+ end
50
+
39
51
  describe '#connection' do
40
52
  it 'should configure a separate connection per machine' do
41
53
  expect(Fog::Compute).to receive(:new).with(
@@ -68,15 +80,15 @@ describe VagrantPlugins::ProviderLibvirt::Driver do
68
80
  # system_uri should be 'qemu+ssh://user@remote1/system'
69
81
  # and not 'qemu:///system'.
70
82
  it 'should configure a separate connection per machine' do
71
- expect(Libvirt).to receive(:open).with('qemu:///system').and_return(system_connection1)
72
- expect(Libvirt).to receive(:open).with('qemu:///system').and_return(system_connection2)
83
+ expect(Libvirt).to receive(:open_read_only).with('qemu+ssh://user@remote1/system').and_return(system_connection1)
84
+ expect(Libvirt).to receive(:open_read_only).with('qemu+ssh://vms@remote2/system').and_return(system_connection2)
73
85
 
74
86
  expect(machine.provider.driver.system_connection).to eq(system_connection1)
75
87
  expect(machine2.provider.driver.system_connection).to eq(system_connection2)
76
88
  end
77
89
 
78
90
  it 'should configure the connection once' do
79
- expect(Libvirt).to receive(:open).with('qemu:///system').and_return(system_connection1)
91
+ expect(Libvirt).to receive(:open_read_only).with('qemu+ssh://user@remote1/system').and_return(system_connection1)
80
92
 
81
93
  expect(machine.provider.driver.system_connection).to eq(system_connection1)
82
94
  expect(machine.provider.driver.system_connection).to eq(system_connection1)
@@ -84,6 +96,129 @@ describe VagrantPlugins::ProviderLibvirt::Driver do
84
96
  end
85
97
  end
86
98
 
99
+ describe '#get_ipaddress' do
100
+ context 'when domain exists' do
101
+ # not used yet, but this is the form that is returned from addresses
102
+ let(:addresses) { {
103
+ :public => ["192.168.122.111"],
104
+ :private => ["192.168.122.111"],
105
+ } }
106
+
107
+ before do
108
+ allow(subject).to receive(:get_domain).and_return(domain)
109
+ end
110
+
111
+ it 'should retrieve the address via domain fog-libvirt API' do
112
+ # ideally should be able to yield a block to wait_for and check that
113
+ # the 'addresses' function on the domain is called correctly.
114
+ expect(domain).to receive(:wait_for).and_return(nil)
115
+ expect(subject.get_ipaddress(machine)).to eq(nil)
116
+ end
117
+
118
+ context 'when qemu_use_agent is enabled' do
119
+ let(:qemu_agent_interfaces) {
120
+ <<-EOF
121
+ {
122
+ "return": [
123
+ {
124
+ "name": "lo",
125
+ "ip-addresses": [
126
+ {
127
+ "ip-address-type": "ipv4",
128
+ "ip-address": "127.0.0.1",
129
+ "prefix": 8
130
+ }
131
+ ],
132
+ "hardware-address": "00:00:00:00:00:00"
133
+ },
134
+ {
135
+ "name": "eth0",
136
+ "ip-addresses": [
137
+ {
138
+ "ip-address-type": "ipv4",
139
+ "ip-address": "192.168.122.42",
140
+ "prefix": 24
141
+ }
142
+ ],
143
+ "hardware-address": "52:54:00:f8:67:98"
144
+ }
145
+ ]
146
+ }
147
+ EOF
148
+ }
149
+
150
+ before do
151
+ allow(machine.provider_config).to receive(:qemu_use_agent).and_return(true)
152
+ end
153
+
154
+ it 'should retrieve the address via the agent' do
155
+ expect(subject).to receive(:connection).and_return(connection)
156
+ expect(libvirt_client).to receive(:lookup_domain_by_uuid).and_return(libvirt_domain)
157
+ expect(libvirt_domain).to receive(:qemu_agent_command).and_return(qemu_agent_interfaces)
158
+ expect(domain).to receive(:mac).and_return("52:54:00:f8:67:98").exactly(2).times
159
+
160
+ expect(subject.get_ipaddress(machine)).to eq("192.168.122.42")
161
+ end
162
+
163
+ context 'when qemu_use_session is enabled' do
164
+ before do
165
+ allow(machine.provider_config).to receive(:qemu_use_session).and_return(true)
166
+ end
167
+
168
+ it 'should still retrieve the address via the agent' do
169
+ expect(subject).to receive(:connection).and_return(connection)
170
+ expect(libvirt_client).to receive(:lookup_domain_by_uuid).and_return(libvirt_domain)
171
+ expect(libvirt_domain).to receive(:qemu_agent_command).and_return(qemu_agent_interfaces)
172
+ expect(domain).to receive(:mac).and_return("52:54:00:f8:67:98").exactly(2).times
173
+
174
+ expect(subject.get_ipaddress(machine)).to eq("192.168.122.42")
175
+ end
176
+ end
177
+ end
178
+
179
+ context 'when qemu_use_session is enabled' do
180
+ let(:networks) { [instance_double('::Fog::Libvirt::Compute::Real')] }
181
+ let(:dhcp_leases) {
182
+ {
183
+ "iface" =>"virbr0",
184
+ "expirytime" =>1636287162,
185
+ "type" =>0,
186
+ "mac" =>"52:54:00:8b:dc:5f",
187
+ "ipaddr" =>"192.168.122.43",
188
+ "prefix" =>24,
189
+ "hostname" =>"vagrant-default_test",
190
+ "clientid" =>"ff:00:8b:dc:5f:00:01:00:01:29:1a:65:42:52:54:00:8b:dc:5f",
191
+ }
192
+ }
193
+
194
+ before do
195
+ allow(machine.provider_config).to receive(:qemu_use_session).and_return(true)
196
+ end
197
+
198
+ it 'should retreive the address via the system dhcp-leases API' do
199
+ expect(domain).to receive(:mac).and_return("52:54:00:8b:dc:5f")
200
+ expect(subject).to receive(:system_connection).and_return(system_connection1)
201
+ expect(system_connection1).to receive(:list_all_networks).and_return(networks)
202
+ expect(networks[0]).to receive(:dhcp_leases).and_return([dhcp_leases])
203
+
204
+ expect(subject.get_ipaddress(machine)).to eq("192.168.122.43")
205
+ end
206
+
207
+ context 'when qemu_use_agent is enabled' do
208
+ before do
209
+ allow(machine.provider_config).to receive(:qemu_use_agent).and_return(true)
210
+ end
211
+
212
+ it 'should retrieve the address via the agent' do
213
+ expect(subject).to receive(:get_ipaddress_from_qemu_agent).and_return("192.168.122.44")
214
+
215
+ expect(subject.get_ipaddress(machine)).to eq("192.168.122.44")
216
+ end
217
+ end
218
+ end
219
+ end
220
+ end
221
+
87
222
  describe '#state' do
88
223
  let(:domain) { double('domain') }
89
224
 
@@ -81,10 +81,12 @@
81
81
  <readonly/>
82
82
  </disk>
83
83
 
84
- <serial type='pty'>
84
+ <serial type='file'>
85
+ <source path='/var/log/vm_consoles/machine.log'/>
85
86
  <target port='0'/>
86
87
  </serial>
87
- <console type='pty'>
88
+ <console type='file'>
89
+ <source path='/var/log/vm_consoles/machine.log'/>
88
90
  <target port='0'/>
89
91
  </console>
90
92
 
@@ -110,9 +112,13 @@
110
112
 
111
113
  <input type='mouse' bus='ps2'/>
112
114
 
113
- <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' keymap='en-us' />
115
+ <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' keymap='en-us' >
116
+ <gl enable='yes' />
117
+ </graphics>
114
118
  <video>
115
- <model type='cirrus' vram='9216' heads='1'/>
119
+ <model type='cirrus' vram='9216' heads='1'>
120
+ <acceleration accel3d='yes'/>
121
+ </model>
116
122
  </video>
117
123
  <rng model='virtio'>
118
124
  <backend model='random'>/dev/random</backend>
@@ -89,6 +89,7 @@ describe 'templates/domain' do
89
89
  target_port: '4242',
90
90
  source_path: '/tmp/foo')
91
91
  domain.random(model: 'random')
92
+ domain.serial(:type => 'file', :source => {:path => '/var/log/vm_consoles/machine.log'})
92
93
  domain.pci(bus: '0x06', slot: '0x12', function: '0x5')
93
94
  domain.pci(domain: '0x0001', bus: '0x03', slot: '0x00', function: '0x0')
94
95
  domain.usb_controller(model: 'nec-xhci', ports: '4')
@@ -111,6 +112,8 @@ describe 'templates/domain' do
111
112
  domain.shares = '1024'
112
113
  domain.cpuset = '1-4,^3,6'
113
114
  domain.nodeset = '1-4,^3,6'
115
+
116
+ domain.video_accel3d = true
114
117
  end
115
118
  let(:test_file) { 'domain_all_settings.xml' }
116
119
  it 'renders template' do
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-libvirt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Stanek
8
8
  - Dima Vasilets
9
9
  - Brian Pitts
10
10
  - Darragh Bailey
11
- autorequire:
11
+ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2021-10-17 00:00:00.000000000 Z
14
+ date: 2021-11-09 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec-core
@@ -252,6 +252,7 @@ files:
252
252
  - spec/unit/action/halt_domain_spec.rb
253
253
  - spec/unit/action/handle_box_image_spec.rb
254
254
  - spec/unit/action/package_domain_spec.rb
255
+ - spec/unit/action/prepare_nfs_settings_spec.rb
255
256
  - spec/unit/action/set_name_of_domain_spec.rb
256
257
  - spec/unit/action/shutdown_domain_spec.rb
257
258
  - spec/unit/action/start_domain_spec.rb
@@ -264,7 +265,6 @@ files:
264
265
  - spec/unit/action_spec.rb
265
266
  - spec/unit/config_spec.rb
266
267
  - spec/unit/driver_spec.rb
267
- - spec/unit/provider_spec.rb
268
268
  - spec/unit/templates/domain_all_settings.xml
269
269
  - spec/unit/templates/domain_custom_cpu_model.xml
270
270
  - spec/unit/templates/domain_defaults.xml
@@ -275,8 +275,9 @@ files:
275
275
  homepage: https://github.com/vagrant-libvirt/vagrant-libvirt
276
276
  licenses:
277
277
  - MIT
278
- metadata: {}
279
- post_install_message:
278
+ metadata:
279
+ source_code_uri: https://github.com/vagrant-libvirt/vagrant-libvirt
280
+ post_install_message:
280
281
  rdoc_options: []
281
282
  require_paths:
282
283
  - lib
@@ -291,51 +292,51 @@ required_rubygems_version: !ruby/object:Gem::Requirement
291
292
  - !ruby/object:Gem::Version
292
293
  version: '0'
293
294
  requirements: []
294
- rubygems_version: 3.0.9
295
- signing_key:
295
+ rubygems_version: 3.0.8
296
+ signing_key:
296
297
  specification_version: 4
297
298
  summary: libvirt provider for Vagrant.
298
299
  test_files:
299
- - spec/support/matchers/have_file_content.rb
300
- - spec/support/binding_proc.rb
301
- - spec/support/environment_helper.rb
302
- - spec/support/libvirt_context.rb
303
300
  - spec/support/temporary_dir.rb
301
+ - spec/support/libvirt_context.rb
302
+ - spec/support/binding_proc.rb
304
303
  - spec/support/sharedcontext.rb
305
- - spec/unit/action/create_domain_spec/default_system_storage_pool.xml
306
- - spec/unit/action/create_domain_spec/default_user_storage_pool.xml
304
+ - spec/support/matchers/have_file_content.rb
305
+ - spec/support/environment_helper.rb
306
+ - spec/unit/action_spec.rb
307
+ - spec/unit/templates/domain_all_settings.xml
308
+ - spec/unit/templates/domain_custom_cpu_model.xml
309
+ - spec/unit/templates/domain_defaults.xml
310
+ - spec/unit/templates/domain_spec.rb
311
+ - spec/unit/templates/tpm/version_1.2.xml
312
+ - spec/unit/templates/tpm/version_2.0.xml
307
313
  - spec/unit/action/create_domain_spec/additional_disks_domain.xml
308
314
  - spec/unit/action/create_domain_spec/default_domain.xml
309
- - spec/unit/action/create_domain_volume_spec/one_disk_in_storage.xml
310
- - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_0.xml
315
+ - spec/unit/action/create_domain_spec/default_system_storage_pool.xml
316
+ - spec/unit/action/create_domain_spec/default_user_storage_pool.xml
317
+ - spec/unit/action/create_domain_spec.rb
318
+ - spec/unit/action/wait_till_up_spec.rb
319
+ - spec/unit/action/package_domain_spec.rb
320
+ - spec/unit/action/forward_ports_spec.rb
321
+ - spec/unit/action/destroy_domain_spec.rb
322
+ - spec/unit/action/halt_domain_spec.rb
323
+ - spec/unit/action/start_domain_spec.rb
324
+ - spec/unit/action/shutdown_domain_spec.rb
325
+ - spec/unit/action/clean_machine_folder_spec.rb
326
+ - spec/unit/action/create_domain_volume_spec.rb
327
+ - spec/unit/action/set_name_of_domain_spec.rb
328
+ - spec/unit/action/prepare_nfs_settings_spec.rb
311
329
  - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_1.xml
330
+ - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_0.xml
312
331
  - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_2.xml
332
+ - spec/unit/action/create_domain_volume_spec/one_disk_in_storage.xml
333
+ - spec/unit/action/start_domain_spec/default_added_tpm_path.xml
313
334
  - spec/unit/action/start_domain_spec/clock_timer_rtc.xml
314
335
  - spec/unit/action/start_domain_spec/default.xml
315
- - spec/unit/action/start_domain_spec/default_added_tpm_path.xml
316
- - spec/unit/action/start_domain_spec/default_added_tpm_version.xml
317
336
  - spec/unit/action/start_domain_spec/existing.xml
318
- - spec/unit/action/clean_machine_folder_spec.rb
319
- - spec/unit/action/forward_ports_spec.rb
320
- - spec/unit/action/set_name_of_domain_spec.rb
321
- - spec/unit/action/wait_till_up_spec.rb
322
- - spec/unit/action/create_domain_volume_spec.rb
323
- - spec/unit/action/start_domain_spec.rb
324
- - spec/unit/action/destroy_domain_spec.rb
325
- - spec/unit/action/halt_domain_spec.rb
326
- - spec/unit/action/create_domain_spec.rb
327
- - spec/unit/action/package_domain_spec.rb
328
- - spec/unit/action/shutdown_domain_spec.rb
337
+ - spec/unit/action/start_domain_spec/default_added_tpm_version.xml
329
338
  - spec/unit/action/handle_box_image_spec.rb
330
- - spec/unit/templates/tpm/version_1.2.xml
331
- - spec/unit/templates/tpm/version_2.0.xml
332
- - spec/unit/templates/domain_custom_cpu_model.xml
333
- - spec/unit/templates/domain_defaults.xml
334
- - spec/unit/templates/domain_spec.rb
335
- - spec/unit/templates/domain_all_settings.xml
336
- - spec/unit/util/byte_number_spec.rb
337
- - spec/unit/provider_spec.rb
338
339
  - spec/unit/config_spec.rb
340
+ - spec/unit/util/byte_number_spec.rb
339
341
  - spec/unit/driver_spec.rb
340
- - spec/unit/action_spec.rb
341
342
  - spec/spec_helper.rb
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
- require 'support/sharedcontext'
3
-
4
- describe 'VagrantPlugins::ProviderLibvirt::Provider' do
5
- require 'vagrant-libvirt/provider'
6
-
7
- include_context 'unit'
8
-
9
- describe '#ssh_info' do
10
- end
11
- end