vagrant-libvirt 0.5.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +110 -18
  3. data/lib/vagrant-libvirt/action/clean_machine_folder.rb +2 -0
  4. data/lib/vagrant-libvirt/action/create_domain.rb +8 -1
  5. data/lib/vagrant-libvirt/action/create_domain_volume.rb +5 -0
  6. data/lib/vagrant-libvirt/action/create_network_interfaces.rb +8 -2
  7. data/lib/vagrant-libvirt/action/create_networks.rb +12 -8
  8. data/lib/vagrant-libvirt/action/destroy_domain.rb +2 -0
  9. data/lib/vagrant-libvirt/action/destroy_networks.rb +2 -0
  10. data/lib/vagrant-libvirt/action/forward_ports.rb +7 -5
  11. data/lib/vagrant-libvirt/action/halt_domain.rb +4 -34
  12. data/lib/vagrant-libvirt/action/handle_box_image.rb +3 -3
  13. data/lib/vagrant-libvirt/action/handle_storage_pool.rb +7 -1
  14. data/lib/vagrant-libvirt/action/is_created.rb +2 -0
  15. data/lib/vagrant-libvirt/action/is_running.rb +2 -0
  16. data/lib/vagrant-libvirt/action/is_suspended.rb +2 -0
  17. data/lib/vagrant-libvirt/action/message_already_created.rb +2 -0
  18. data/lib/vagrant-libvirt/action/message_not_created.rb +2 -0
  19. data/lib/vagrant-libvirt/action/message_not_running.rb +2 -0
  20. data/lib/vagrant-libvirt/action/message_not_suspended.rb +2 -0
  21. data/lib/vagrant-libvirt/action/message_will_not_destroy.rb +2 -0
  22. data/lib/vagrant-libvirt/action/package_domain.rb +133 -68
  23. data/lib/vagrant-libvirt/action/prepare_nfs_settings.rb +2 -0
  24. data/lib/vagrant-libvirt/action/prepare_nfs_valid_ids.rb +2 -0
  25. data/lib/vagrant-libvirt/action/prune_nfs_exports.rb +2 -0
  26. data/lib/vagrant-libvirt/action/read_mac_addresses.rb +2 -0
  27. data/lib/vagrant-libvirt/action/remove_libvirt_image.rb +2 -0
  28. data/lib/vagrant-libvirt/action/remove_stale_volume.rb +2 -0
  29. data/lib/vagrant-libvirt/action/resume_domain.rb +2 -0
  30. data/lib/vagrant-libvirt/action/set_boot_order.rb +2 -0
  31. data/lib/vagrant-libvirt/action/set_name_of_domain.rb +3 -1
  32. data/lib/vagrant-libvirt/action/share_folders.rb +2 -0
  33. data/lib/vagrant-libvirt/action/shutdown_domain.rb +49 -0
  34. data/lib/vagrant-libvirt/action/start_domain.rb +26 -17
  35. data/lib/vagrant-libvirt/action/suspend_domain.rb +2 -0
  36. data/lib/vagrant-libvirt/action/wait_till_up.rb +2 -0
  37. data/lib/vagrant-libvirt/action.rb +34 -4
  38. data/lib/vagrant-libvirt/cap/mount_9p.rb +2 -0
  39. data/lib/vagrant-libvirt/cap/mount_virtiofs.rb +2 -0
  40. data/lib/vagrant-libvirt/cap/nic_mac_addresses.rb +2 -0
  41. data/lib/vagrant-libvirt/cap/public_address.rb +2 -0
  42. data/lib/vagrant-libvirt/cap/synced_folder_9p.rb +5 -2
  43. data/lib/vagrant-libvirt/cap/synced_folder_virtiofs.rb +5 -2
  44. data/lib/vagrant-libvirt/config.rb +49 -25
  45. data/lib/vagrant-libvirt/driver.rb +67 -12
  46. data/lib/vagrant-libvirt/errors.rb +2 -0
  47. data/lib/vagrant-libvirt/plugin.rb +2 -0
  48. data/lib/vagrant-libvirt/provider.rb +2 -0
  49. data/lib/vagrant-libvirt/templates/domain.xml.erb +4 -2
  50. data/lib/vagrant-libvirt/templates/public_interface.xml.erb +1 -0
  51. data/lib/vagrant-libvirt/util/collection.rb +2 -0
  52. data/lib/vagrant-libvirt/util/erb_template.rb +2 -0
  53. data/lib/vagrant-libvirt/util/error_codes.rb +2 -0
  54. data/lib/vagrant-libvirt/util/network_util.rb +3 -0
  55. data/lib/vagrant-libvirt/util/nfs.rb +2 -0
  56. data/lib/vagrant-libvirt/util/storage_util.rb +1 -0
  57. data/lib/vagrant-libvirt/util/timer.rb +2 -0
  58. data/lib/vagrant-libvirt/util/ui.rb +1 -0
  59. data/lib/vagrant-libvirt/util.rb +2 -0
  60. data/lib/vagrant-libvirt/version +1 -1
  61. data/lib/vagrant-libvirt/version.rb +2 -0
  62. data/lib/vagrant-libvirt.rb +2 -0
  63. data/locales/en.yml +2 -0
  64. data/spec/spec_helper.rb +2 -0
  65. data/spec/support/binding_proc.rb +2 -0
  66. data/spec/support/environment_helper.rb +2 -0
  67. data/spec/support/libvirt_context.rb +2 -0
  68. data/spec/support/matchers/have_file_content.rb +2 -0
  69. data/spec/support/sharedcontext.rb +3 -0
  70. data/spec/support/temporary_dir.rb +12 -0
  71. data/spec/unit/action/clean_machine_folder_spec.rb +2 -0
  72. data/spec/unit/action/create_domain_spec/additional_disks_domain.xml +7 -0
  73. data/spec/unit/action/create_domain_spec/default_domain.xml +6 -0
  74. data/spec/unit/action/create_domain_spec.rb +62 -30
  75. data/spec/unit/action/create_domain_volume_spec.rb +4 -0
  76. data/spec/unit/action/destroy_domain_spec.rb +8 -2
  77. data/spec/unit/action/forward_ports_spec.rb +2 -0
  78. data/spec/unit/action/halt_domain_spec.rb +30 -57
  79. data/spec/unit/action/handle_box_image_spec.rb +6 -4
  80. data/spec/unit/action/package_domain_spec.rb +304 -0
  81. data/spec/unit/action/set_name_of_domain_spec.rb +2 -0
  82. data/spec/unit/action/shutdown_domain_spec.rb +131 -0
  83. data/spec/unit/action/start_domain_spec/existing.xml +62 -0
  84. data/spec/unit/action/start_domain_spec.rb +18 -28
  85. data/spec/unit/action/wait_till_up_spec.rb +2 -0
  86. data/spec/unit/action_spec.rb +96 -0
  87. data/spec/unit/config_spec.rb +52 -2
  88. data/spec/unit/driver_spec.rb +155 -0
  89. data/spec/unit/templates/domain_all_settings.xml +4 -0
  90. data/spec/unit/templates/domain_spec.rb +2 -0
  91. data/spec/unit/util/byte_number_spec.rb +2 -0
  92. metadata +53 -41
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45b81bd9999cef0982201e37382c06ce3657bfe4442f060864c3f659ffc2ce37
4
- data.tar.gz: e44c22486556883da8170f757cc8c3a29a4a98b07460c4b1098cb4aaed7566b3
3
+ metadata.gz: 9e37a27120aef75fdd73d704321b96c7c881b07fa3cbdd655855300bf11163a3
4
+ data.tar.gz: 4639827cc360b3f06304310f02dffea445f19d2f4b8675a6e0e05a9be3cea307
5
5
  SHA512:
6
- metadata.gz: ca1762baa21c39a9e047128f87cae3decedf38fee218bd741ebe0b40779d95bf306926a53c42038e3d4556f1484edb811868b3f612d37c574382afcf14516788
7
- data.tar.gz: daabf0d91e896deb468a79ea287c52137991a04c9befabeab53e700dbbe580a17ba019da8b817a6e3a8148b81f5a26e86c112c2d0f05ba216595ea4c56a0dac6
6
+ metadata.gz: cb13d39445a95f3514cc1be73bcf6e81ec7924959ec86e6cc712c50050ac8211f6b5beb26bbd42c137020e98143794d7b67aa7241e2461cdf2d1ca5ed2a15c30
7
+ data.tar.gz: b341135cabad7d59963df62e9dd921470a43e4794fb203ff78b893bd058a38af877717f48b25a72135211e72d82082ec444227b97157e365903103240dfb1311
data/README.md CHANGED
@@ -18,7 +18,10 @@ can help a lot :-)
18
18
 
19
19
  * [Features](#features)
20
20
  * [Future work](#future-work)
21
- * [Using Docker based Installation](#using-docker-based-installation)
21
+ * [Using the container image](#using-the-container-image)
22
+ * [Using Docker](#using-docker)
23
+ * [Using Podman](#using-podman)
24
+ * [Extending the Docker image with additional vagrant plugins](#extending-the-docker-image-with-additional-vagrant-plugins)
22
25
  * [Installation](#installation)
23
26
  * [Possible problems with plugin installation on Linux](#possible-problems-with-plugin-installation-on-linux)
24
27
  * [Additional Notes for Fedora and Similar Linux Distributions](#additional-notes-for-fedora-and-similar-linux-distributions)
@@ -99,7 +102,7 @@ can help a lot :-)
99
102
  * Take a look at [open
100
103
  issues](https://github.com/vagrant-libvirt/vagrant-libvirt/issues?state=open).
101
104
 
102
- ## Using Docker based Installation
105
+ ## Using the container image
103
106
 
104
107
  Due to the number of issues encountered around compatibility between the ruby runtime environment
105
108
  that is part of the upstream vagrant installation and the library dependencies of libvirt that
@@ -109,11 +112,31 @@ This should allow users to execute vagrant with vagrant-libvirt without needing
109
112
  the compatibility issues, though you may need to extend the image for your own needs should
110
113
  you make use of additional plugins.
111
114
 
112
- To get the image:
115
+ Note the default image contains the full toolchain required to build and install vagrant-libvirt
116
+ and it's dependencies. There is also a smaller image published with the `-slim` suffix if you
117
+ just need vagrant-libvirt and don't need to install any additional plugins for your environment.
118
+
119
+ If you are connecting to a remote system libvirt, you may omit the
120
+ `-v /var/run/libvirt/:/var/run/libvirt/` mount bind. Some distributions patch the local
121
+ vagrant environment to ensure vagrant-libvirt uses `qemu:///session`, which means you
122
+ may need to set the environment variable `LIBVIRT_DEFAULT_URI` to the same value if
123
+ looking to use this in place of your distribution provided installation.
124
+
125
+ ### Using Docker
126
+
127
+ To get the image with the most recent release:
113
128
  ```bash
114
129
  docker pull vagrantlibvirt/vagrant-libvirt:latest
115
130
  ```
116
131
 
132
+ ---
133
+ **Note** If you want the very latest code you can use the `edge` tag instead.
134
+
135
+ ```bash
136
+ docker pull vagrantlibvirt/vagrant-libvirt:edge
137
+ ```
138
+ ---
139
+
117
140
  Preparing the docker run, only once:
118
141
 
119
142
  ```bash
@@ -126,33 +149,73 @@ docker run -it --rm \
126
149
  -e LIBVIRT_DEFAULT_URI \
127
150
  -v /var/run/libvirt/:/var/run/libvirt/ \
128
151
  -v ~/.vagrant.d:/.vagrant.d \
129
- -v $(pwd):$(pwd) \
130
- -w $(pwd) \
152
+ -v $(realpath "${PWD}"):${PWD} \
153
+ -w $(realpath "${PWD}") \
131
154
  --network host \
132
155
  vagrantlibvirt/vagrant-libvirt:latest \
133
156
  vagrant status
134
157
  ```
135
158
 
136
- It's possible to define an alias in `~/.bashrc`, for example:
159
+ It's possible to define a function in `~/.bashrc`, for example:
137
160
  ```bash
138
- alias vagrant='
139
- mkdir -p ~/.vagrant.d/{boxes,data,tmp}; \
161
+ vagrant(){
140
162
  docker run -it --rm \
141
163
  -e LIBVIRT_DEFAULT_URI \
142
164
  -v /var/run/libvirt/:/var/run/libvirt/ \
143
165
  -v ~/.vagrant.d:/.vagrant.d \
144
- -v $(pwd):$(pwd) \
145
- -w $(pwd) \
166
+ -v $(realpath "${PWD}"):${PWD} \
167
+ -w $(realpath "${PWD}") \
146
168
  --network host \
147
169
  vagrantlibvirt/vagrant-libvirt:latest \
148
- vagrant'
170
+ vagrant $@
171
+ }
172
+
149
173
  ```
150
174
 
151
- Note that if you are connecting to a remote system libvirt, you may omit the
152
- `-v /var/run/libvirt/:/var/run/libvirt/` mount bind. Some distributions patch the local
153
- vagrant environment to ensure vagrant-libvirt uses `qemu:///session`, which means you
154
- may need to set the environment variable `LIBVIRT_DEFAULT_URI` to the same value if
155
- looking to use this in place of your distribution provided installation.
175
+ ### Using Podman
176
+ To run with Podman you need to include
177
+
178
+ ```bash
179
+ --entrypoint /bin/bash \
180
+ --security-opt label=disable \
181
+ -v ~/.vagrant.d/boxes:/vagrant/boxes \
182
+ -v ~/.vagrant.d/data:/vagrant/data \
183
+ ```
184
+
185
+ for example:
186
+
187
+ ```bash
188
+ vagrant(){
189
+ podman run -it --rm \
190
+ -e LIBVIRT_DEFAULT_URI \
191
+ -v /var/run/libvirt/:/var/run/libvirt/ \
192
+ -v ~/.vagrant.d/boxes:/vagrant/boxes \
193
+ -v ~/.vagrant.d/data:/vagrant/data \
194
+ -v $(realpath "${PWD}"):${PWD} \
195
+ -w $(realpath "${PWD}") \
196
+ --network host \
197
+ --entrypoint /bin/bash \
198
+ --security-opt label=disable \
199
+ docker.io/vagrantlibvirt/vagrant-libvirt:latest \
200
+ vagrant $@
201
+ }
202
+ ```
203
+
204
+ Running Podman in rootless mode maps the root user inside the container to your host user so we need to bypass [entrypoint.sh](https://github.com/vagrant-libvirt/vagrant-libvirt/blob/master/entrypoint.sh) and mount persistent storage directly to `/vagrant`.
205
+
206
+ ### Extending the Docker image with additional vagrant plugins
207
+
208
+ By default the image published and used contains the entire tool chain required
209
+ to reinstall the vagrant-libvirt plugin and it's dependencies, as this is the
210
+ default behaviour of vagrant anytime a new plugin is installed. This means it
211
+ should be possible to use a simple `FROM` statement and ask vagrant to install
212
+ additional plugins.
213
+
214
+ ```
215
+ FROM vagrantlibvirt/vagrant-libvirt:latest
216
+
217
+ RUN vagrant plugin install <plugin>
218
+ ```
156
219
 
157
220
  ## Installation
158
221
 
@@ -907,6 +970,23 @@ DHCP server. dnsmasq writes lease information in the `/var/lib/libvirt/dnsmasq`
907
970
  directory. Vagrant-libvirt looks for the MAC address in this file and extracts
908
971
  the corresponding IP address.
909
972
 
973
+ It is also possible to use the Qemu Agent to extract the management interface
974
+ configuration from the booted virtual machine. This is helpful in libvirt
975
+ environments where no local dnsmasq is used for automatic address assigment,
976
+ but external dhcp services via bridged libvirt networks.
977
+
978
+ Prerequisite is to enable the qemu agent channel via ([Libvirt communication
979
+ channels](#libvirt-communication-channels)) and the virtual machine image must
980
+ have the agent pre-installed before deploy. The agent will start automatically
981
+ if it detects an attached channel during boot.
982
+
983
+ * `qemu_use_agent` - false by default, if set to true, attempt to extract configured
984
+ ip address via qemu agent.
985
+
986
+ To use the management network interface with an external dhcp service you need
987
+ to setup a bridged host network manually and define it via
988
+ `management_network_name` in your Vagrantfile.
989
+
910
990
  ## Additional Disks
911
991
 
912
992
  You can create and attach additional disks to a VM via `libvirt.storage :file`.
@@ -1068,13 +1148,14 @@ The USB controller can be configured using `libvirt.usb_controller`, with the fo
1068
1148
  Vagrant.configure("2") do |config|
1069
1149
  config.vm.provider :libvirt do |libvirt|
1070
1150
  # Set up a USB3 controller
1071
- libvirt.usb_controller :model => "nec-xhci"
1151
+ libvirt.usb_controller :model => "qemu-xhci"
1072
1152
  end
1073
1153
  end
1074
1154
  ```
1075
1155
 
1076
1156
  See the [libvirt documentation](https://libvirt.org/formatdomain.html#elementsControllers) for a list of valid models.
1077
1157
 
1158
+ If any USB devices are passed through by setting `libvirt.usb` or `libvirt.redirdev`, a default controller will be added using the model `qemu-xhci` in the absence of a user specified one. This should help ensure more devices work out of the box as the default configured by libvirt is pii3-uhci, which appears to only work for USB 1 devices and does not work as expected when connected via a USB 2 controller, while the xhci stack should work for all versions of USB.
1078
1159
 
1079
1160
  ### USB Device Passthrough
1080
1161
 
@@ -1095,6 +1176,17 @@ The example values above match the device from the following output of `lsusb`:
1095
1176
  Bus 001 Device 002: ID 1234:abcd Example device
1096
1177
  ```
1097
1178
 
1179
+ ```ruby
1180
+ Vagrant.configure("2") do |config|
1181
+ config.vm.provider :libvirt do |libvirt|
1182
+ # pass through specific device based on identifying it
1183
+ libvirt.usbdev :vendor => '0x1234', :product => '0xabcd'
1184
+ # pass through a host device where multiple of the same vendor/product exist
1185
+ libvirt.usbdev :bus => '1', :device => '1'
1186
+ end
1187
+ end
1188
+ ```
1189
+
1098
1190
  Additionally, the following options can be used:
1099
1191
 
1100
1192
  * `startupPolicy` - Is passed through to Libvirt and controls if the device has
@@ -1151,7 +1243,7 @@ In this case, the USB device with `class 0x0b`, `vendor 0x08e6`, `product 0x3437
1151
1243
  Vagrant.configure("2") do |config|
1152
1244
  config.vm.provider :libvirt do |libvirt|
1153
1245
  libvirt.redirdev :type => "spicevmc"
1154
- libvirt.redirfilter :class => "0x0b" :vendor => "0x08e6" :product => "0x3437" :version => "2.00" :allow => "yes"
1246
+ libvirt.redirfilter :class => "0x0b", :vendor => "0x08e6", :product => "0x3437", :version => "2.00", :allow => "yes"
1155
1247
  libvirt.redirfilter :allow => "no"
1156
1248
  end
1157
1249
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'log4r'
2
4
 
3
5
  module VagrantPlugins
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'log4r'
2
4
 
3
5
  module VagrantPlugins
@@ -398,9 +400,14 @@ module VagrantPlugins
398
400
  # Create Libvirt domain.
399
401
  # Is there a way to tell fog to create new domain with already
400
402
  # existing volume? Use domain creation from template..
403
+ xml = to_xml('domain')
404
+ @logger.debug {
405
+ "Creating Domain with XML:\n#{xml}"
406
+ }
407
+
401
408
  begin
402
409
  server = env[:machine].provider.driver.connection.servers.create(
403
- xml: to_xml('domain')
410
+ xml: xml
404
411
  )
405
412
  rescue Fog::Errors::Error => e
406
413
  raise Errors::FogCreateServerError, error_message: e.message
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'log4r'
2
4
 
3
5
  module VagrantPlugins
@@ -76,6 +78,9 @@ module VagrantPlugins
76
78
  else
77
79
  pool_name = config.storage_pool_name
78
80
  end
81
+ @logger.debug {
82
+ "Creating Volume with XML:\n#{xml}"
83
+ }
79
84
  @logger.debug "Using pool #{pool_name} for base box snapshot"
80
85
  domain_volume = env[:machine].provider.driver.connection.volumes.create(
81
86
  xml: xml,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'log4r'
2
4
  require 'vagrant/util/network_ip'
3
5
  require 'vagrant/util/scoped_hash_override'
@@ -128,10 +130,10 @@ module VagrantPlugins
128
130
  end
129
131
 
130
132
  message = "Creating network interface eth#{@iface_number}"
131
- message << " connected to network #{@network_name}."
133
+ message += " connected to network #{@network_name}."
132
134
  if @mac
133
135
  @mac = @mac.scan(/(\h{2})/).join(':')
134
- message << " Using MAC address: #{@mac}"
136
+ message += " Using MAC address: #{@mac}"
135
137
  end
136
138
  @logger.info(message)
137
139
 
@@ -157,6 +159,9 @@ module VagrantPlugins
157
159
  else
158
160
  to_xml(template_name)
159
161
  end
162
+ @logger.debug {
163
+ "Attaching Network Device with XML:\n#{xml}"
164
+ }
160
165
  domain.attach_device(xml)
161
166
  rescue => e
162
167
  raise Errors::AttachDeviceError,
@@ -246,6 +251,7 @@ module VagrantPlugins
246
251
  udp_tunnel={}, pci_bus, pci_slot)
247
252
  Nokogiri::XML::Builder.new do |xml|
248
253
  xml.interface(type: type || 'network') do
254
+ xml.alias(name: "ua-net-#{iface_number}")
249
255
  xml.source(source_options) do
250
256
  xml.local(udp_tunnel) if type == 'udp'
251
257
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'log4r'
2
4
  require 'vagrant/util/network_ip'
3
5
  require 'vagrant/util/scoped_hash_override'
@@ -160,7 +162,7 @@ module VagrantPlugins
160
162
  if @interface_network[:created]
161
163
  # Just check for mismatch error here - if name and ip from
162
164
  # config match together.
163
- if @options[:network_name] != @interface_network[:name]
165
+ if @options[:network_name] != @interface_network[:name] and @qemu_use_agent == false
164
166
  raise Errors::NetworkNameAndAddressMismatch,
165
167
  ip_address: @options[:ip],
166
168
  network_name: @options[:network_name]
@@ -312,8 +314,7 @@ module VagrantPlugins
312
314
 
313
315
  if @options[:dhcp_enabled]
314
316
  # Find out DHCP addresses pool range.
315
- network_address = "#{@interface_network[:network_address]}/"
316
- network_address << (@interface_network[:netmask]).to_s
317
+ network_address = "#{@interface_network[:network_address]}/#{(@interface_network[:netmask]).to_s}"
317
318
  net = @interface_network[:network_address] ? IPAddr.new(network_address) : nil
318
319
 
319
320
  # First is address of network, second is gateway (by default).
@@ -336,8 +337,12 @@ module VagrantPlugins
336
337
  @network_domain_name = @options[:domain_name]
337
338
 
338
339
  begin
340
+ xml = to_xml('private_network')
341
+ @logger.debug {
342
+ "Creating private network with XML:\n#{xml}"
343
+ }
339
344
  @interface_network[:libvirt_network] = \
340
- @libvirt_client.define_network_xml(to_xml('private_network'))
345
+ @libvirt_client.define_network_xml(xml)
341
346
  @logger.debug 'created network'
342
347
  rescue => e
343
348
  raise Errors::CreateNetworkError, error_message: e.message
@@ -345,10 +350,9 @@ module VagrantPlugins
345
350
 
346
351
  created_networks_file = env[:machine].data_dir + 'created_networks'
347
352
 
348
- message = 'Saving information about created network '
349
- message << "#{@interface_network[:name]}, "
350
- message << "UUID=#{@interface_network[:libvirt_network].uuid} "
351
- message << "to file #{created_networks_file}."
353
+ message = 'Saving information about created network ' \
354
+ "#{@interface_network[:name]}, UUID=#{@interface_network[:libvirt_network].uuid} " \
355
+ "to file #{created_networks_file}."
352
356
  @logger.info(message)
353
357
 
354
358
  File.open(created_networks_file, 'a') do |file|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'log4r'
2
4
 
3
5
  module VagrantPlugins
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'log4r'
2
4
  require 'nokogiri'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module ProviderLibvirt
3
5
  module Action
@@ -104,7 +106,7 @@ module VagrantPlugins
104
106
  IdentitiesOnly=#{ssh_info[:keys_only] ? 'yes' : 'no'}
105
107
  ) + ssh_info[:private_key_path].map do |pk|
106
108
  "IdentityFile='\"#{pk}\"'"
107
- end).map { |s| s.prepend('-o ') }.join(' ')
109
+ end).map { |s| "-o #{s}" }.join(' ')
108
110
 
109
111
  options += " -o ProxyCommand=\"#{ssh_info[:proxy_command]}\"" if machine.provider_config.proxy_command
110
112
 
@@ -116,12 +118,12 @@ module VagrantPlugins
116
118
  env[:ui].info 'Requesting sudo for host port(s) <= 1024'
117
119
  r = system('sudo -v')
118
120
  if r
119
- ssh_cmd << 'sudo ' # add sudo prefix
121
+ ssh_cmd += 'sudo ' # add sudo prefix
120
122
  end
121
123
  end
122
124
  end
123
125
 
124
- ssh_cmd << "ssh -n #{options} #{params}"
126
+ ssh_cmd += "ssh -n #{options} #{params}"
125
127
 
126
128
  @logger.debug "Forwarding port with `#{ssh_cmd}`"
127
129
  log_file = ssh_forward_log_file(
@@ -180,10 +182,10 @@ module VagrantPlugins
180
182
  kill_cmd = ''
181
183
 
182
184
  if tag[:port] <= 1024
183
- kill_cmd << 'sudo ' # add sudo prefix
185
+ kill_cmd += 'sudo ' # add sudo prefix
184
186
  end
185
187
 
186
- kill_cmd << "kill #{tag[:pid]}"
188
+ kill_cmd += "kill #{tag[:pid]}"
187
189
  @@lock.synchronize do
188
190
  system(kill_cmd)
189
191
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'log4r'
2
4
 
3
5
  module VagrantPlugins
@@ -11,41 +13,9 @@ module VagrantPlugins
11
13
  end
12
14
 
13
15
  def call(env)
14
- env[:ui].info(I18n.t('vagrant_libvirt.halt_domain'))
15
-
16
- timeout = env[:machine].config.vm.graceful_halt_timeout
17
16
  domain = env[:machine].provider.driver.connection.servers.get(env[:machine].id.to_s)
18
- raise Errors::NoDomainError if domain.nil?
19
-
20
- if env[:force_halt]
21
- domain.poweroff
22
- return @app.call(env)
23
- end
24
-
25
- begin
26
- Timeout.timeout(timeout) do
27
- begin
28
- env[:machine].guest.capability(:halt)
29
- rescue Timeout::Error
30
- raise
31
- rescue
32
- @logger.info('Trying Libvirt graceful shutdown.')
33
- # Read domain object again
34
- dom = env[:machine].provider.driver.connection.servers.get(env[:machine].id.to_s)
35
- if dom.state.to_s == 'running'
36
- dom.shutdown
37
- end
38
- end
39
-
40
- domain.wait_for(timeout) do
41
- !ready?
42
- end
43
- end
44
- rescue Timeout::Error
45
- @logger.info('VM is still running. Calling force poweroff.')
46
- domain.poweroff
47
- rescue
48
- @logger.error('Failed to shutdown cleanly. Calling force poweroff.')
17
+ if env[:machine].state.id == :running
18
+ env[:ui].info(I18n.t('vagrant_libvirt.halt_domain'))
49
19
  domain.poweroff
50
20
  end
51
21
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'log4r'
2
4
  require 'open3'
3
5
  require 'json'
@@ -85,7 +87,6 @@ module VagrantPlugins
85
87
  box_virtual_size = env[:box_volumes][0][:virtual_size]
86
88
  if config.machine_virtual_size
87
89
  config_machine_virtual_size = ByteNumber.from_GB(config.machine_virtual_size)
88
- puts config_machine_virtual_size < box_virtual_size
89
90
  if config_machine_virtual_size < box_virtual_size
90
91
  # Warn that a virtual size less than the box metadata size
91
92
  # is not supported and will be ignored
@@ -180,8 +181,7 @@ module VagrantPlugins
180
181
  raise Vagrant::Errors::BoxNotFound, name: env[:machine].box.name
181
182
  end
182
183
  box_image_size = File.size(box_image_file) # B
183
- message = "Creating volume #{box_volume[:name]}"
184
- message << " in storage pool #{config.storage_pool_name}."
184
+ message = "Creating volume #{box_volume[:name]} in storage pool #{config.storage_pool_name}."
185
185
  @logger.info(message)
186
186
  begin
187
187
  fog_volume = env[:machine].provider.driver.connection.volumes.create(
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'log4r'
2
4
 
3
5
  module VagrantPlugins
@@ -42,8 +44,12 @@ module VagrantPlugins
42
44
  @storage_pool_path = storage_pool_path(env)
43
45
  @storage_pool_uid = storage_uid(env)
44
46
  @storage_pool_gid = storage_gid(env)
47
+ xml = to_xml('default_storage_pool')
48
+ @logger.debug {
49
+ "Creating Storage Pool with XML:\n#{xml}"
50
+ }
45
51
  libvirt_pool = env[:machine].provider.driver.connection.client.define_storage_pool_xml(
46
- to_xml('default_storage_pool')
52
+ xml
47
53
  )
48
54
  libvirt_pool.build
49
55
  libvirt_pool.create
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module ProviderLibvirt
3
5
  module Action
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module ProviderLibvirt
3
5
  module Action
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module ProviderLibvirt
3
5
  module Action
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module ProviderLibvirt
3
5
  module Action
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module ProviderLibvirt
3
5
  module Action
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module ProviderLibvirt
3
5
  module Action
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module ProviderLibvirt
3
5
  module Action
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module ProviderLibvirt
3
5
  module Action