vagrant-libvirt 0.4.1 → 0.5.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 +4 -4
- data/README.md +212 -27
- data/lib/vagrant-libvirt/action.rb +6 -0
- data/lib/vagrant-libvirt/action/clean_machine_folder.rb +28 -0
- data/lib/vagrant-libvirt/action/create_domain.rb +26 -10
- data/lib/vagrant-libvirt/action/create_domain_volume.rb +57 -55
- data/lib/vagrant-libvirt/action/create_network_interfaces.rb +0 -3
- data/lib/vagrant-libvirt/action/create_networks.rb +11 -4
- data/lib/vagrant-libvirt/action/destroy_domain.rb +1 -1
- data/lib/vagrant-libvirt/action/forward_ports.rb +36 -37
- data/lib/vagrant-libvirt/action/halt_domain.rb +25 -9
- data/lib/vagrant-libvirt/action/handle_box_image.rb +162 -74
- data/lib/vagrant-libvirt/action/is_running.rb +1 -3
- data/lib/vagrant-libvirt/action/is_suspended.rb +4 -4
- data/lib/vagrant-libvirt/action/wait_till_up.rb +1 -25
- data/lib/vagrant-libvirt/cap/{mount_p9.rb → mount_9p.rb} +2 -2
- data/lib/vagrant-libvirt/cap/mount_virtiofs.rb +37 -0
- data/lib/vagrant-libvirt/cap/{synced_folder.rb → synced_folder_9p.rb} +4 -5
- data/lib/vagrant-libvirt/cap/synced_folder_virtiofs.rb +109 -0
- data/lib/vagrant-libvirt/config.rb +24 -2
- data/lib/vagrant-libvirt/errors.rb +24 -1
- data/lib/vagrant-libvirt/plugin.rb +13 -5
- data/lib/vagrant-libvirt/templates/domain.xml.erb +7 -6
- data/lib/vagrant-libvirt/templates/private_network.xml.erb +1 -1
- data/lib/vagrant-libvirt/util/network_util.rb +21 -3
- data/lib/vagrant-libvirt/version +1 -1
- data/locales/en.yml +12 -0
- data/spec/spec_helper.rb +9 -1
- data/spec/support/matchers/have_file_content.rb +63 -0
- data/spec/unit/action/clean_machine_folder_spec.rb +48 -0
- data/spec/unit/action/create_domain_spec.rb +6 -0
- data/spec/unit/action/create_domain_volume_spec.rb +102 -0
- data/spec/unit/action/create_domain_volume_spec/one_disk_in_storage.xml +21 -0
- data/spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_0.xml +21 -0
- data/spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_1.xml +21 -0
- data/spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_2.xml +21 -0
- data/spec/unit/action/destroy_domain_spec.rb +1 -1
- data/spec/unit/action/forward_ports_spec.rb +202 -0
- data/spec/unit/action/halt_domain_spec.rb +90 -0
- data/spec/unit/action/handle_box_image_spec.rb +363 -0
- data/spec/unit/action/wait_till_up_spec.rb +1 -23
- data/spec/unit/templates/domain_all_settings.xml +8 -0
- data/spec/unit/templates/domain_spec.rb +20 -1
- metadata +41 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af89387fcdeb6518bd31879ac2eaa00373c3af1c02613b389868eb6c656b5f2b
|
4
|
+
data.tar.gz: 82fa3560eb88abac51088e894d8e475bbf4dbcda4b10596b43e7fc41d158945a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53d1714279eaa3ed9c0434b891bad6bc03b4f52a0c2a5aed6e0736cefa89a3f66243ec3d04e2bf1bb707f76169e2f799ffa98e63f3cfdc3c91ee0d56e5332695
|
7
|
+
data.tar.gz: 15ea6d1ce672545f14f3886a6d945f2349c85cca61a63604abf30f5a716b9665c65ea181fd2dcb96c39321567725911b230d22d1c589c888a2b05ec9c7715b13
|
data/README.md
CHANGED
@@ -55,6 +55,7 @@ can help a lot :-)
|
|
55
55
|
* [No box and PXE boot](#no-box-and-pxe-boot)
|
56
56
|
* [SSH Access To VM](#ssh-access-to-vm)
|
57
57
|
* [Forwarded Ports](#forwarded-ports)
|
58
|
+
* [Forwarding the ssh-port](#forwarding-the-ssh-port)
|
58
59
|
* [Synced Folders](#synced-folders)
|
59
60
|
* [QEMU Session Support](#qemu-session-support)
|
60
61
|
* [Customized Graphics](#customized-graphics)
|
@@ -62,7 +63,9 @@ can help a lot :-)
|
|
62
63
|
* [Memory balloon](#memory-balloon)
|
63
64
|
* [Libvirt communication channels](#libvirt-communication-channels)
|
64
65
|
* [Custom command line arguments and environment variables](#custom-command-line-arguments-and-environment-variables)
|
65
|
-
* [Box
|
66
|
+
* [Box Formats](#box-formats)
|
67
|
+
* [Version 1](#version-1)
|
68
|
+
* [Version 2 (Experimental)](#version-2-experimental)
|
66
69
|
* [Create Box](#create-box)
|
67
70
|
* [Package Box from VM](#package-box-from-vm)
|
68
71
|
* [Troubleshooting VMs](#troubleshooting-vms)
|
@@ -83,7 +86,7 @@ can help a lot :-)
|
|
83
86
|
* SSH into domains.
|
84
87
|
* Setup hostname and network interfaces.
|
85
88
|
* Provision domains with any built-in Vagrant provisioner.
|
86
|
-
* Synced folder support via `rsync`, `nfs` or `
|
89
|
+
* Synced folder support via `rsync`, `nfs`, `9p` or `virtiofs`.
|
87
90
|
* Snapshots via [sahara](https://github.com/jedi4ever/sahara).
|
88
91
|
* Package caching via
|
89
92
|
[vagrant-cachier](http://fgrehm.viewdocs.io/vagrant-cachier/).
|
@@ -892,6 +895,8 @@ used by this network are configurable at the provider level.
|
|
892
895
|
* `management_network_pci_slot` - The slot of the PCI device.
|
893
896
|
* `management_network_mac` - MAC address of management network interface.
|
894
897
|
* `management_network_domain` - Domain name assigned to the management network.
|
898
|
+
* `management_network_mtu` - MTU size of management network. If not specified,
|
899
|
+
the Libvirt default (1500) will be used.
|
895
900
|
|
896
901
|
You may wonder how vagrant-libvirt knows the IP address a VM received. Libvirt
|
897
902
|
doesn't provide a standard way to find out the IP address of a running domain.
|
@@ -1256,6 +1261,8 @@ Vagrant.configure("2") do |config|
|
|
1256
1261
|
libvirt.hyperv_feature :name => 'relaxed', :state => 'on'
|
1257
1262
|
# Enable virtual APIC
|
1258
1263
|
libvirt.hyperv_feature :name => 'vapic', :state => 'on'
|
1264
|
+
# Enable spinlocks (requires retries to be specified)
|
1265
|
+
libvirt.hyperv_feature :name => 'spinlocks', :state => 'on', :retries => '8191'
|
1259
1266
|
end
|
1260
1267
|
end
|
1261
1268
|
```
|
@@ -1412,40 +1419,157 @@ Default is `eth0`.
|
|
1412
1419
|
|
1413
1420
|
`config.vm.network :forwarded_port, guest: 80, host: 2000, host_ip: "0.0.0.0"`
|
1414
1421
|
|
1422
|
+
### Forwarding the ssh-port
|
1423
|
+
|
1424
|
+
Vagrant-libvirt now supports forwarding the standard ssh-port on port 2222 from
|
1425
|
+
the localhost to allow for consistent provisioning steps/ports to be used when
|
1426
|
+
defining across multiple providers.
|
1427
|
+
|
1428
|
+
To enable, set the following:
|
1429
|
+
```ruby
|
1430
|
+
Vagrant.configure("2") do |config|
|
1431
|
+
config.vm.provider :libvirt do |libvirt|
|
1432
|
+
# Enable forwarding of forwarded_port with id 'ssh'.
|
1433
|
+
libvirt.forward_ssh_port = true
|
1434
|
+
end
|
1435
|
+
end
|
1436
|
+
```
|
1437
|
+
|
1438
|
+
Previously by default libvirt skipped the forwarding of the ssh-port because
|
1439
|
+
you can access the machine directly. In the future it is expected that this
|
1440
|
+
will be enabled by default once autocorrect support is added to handle port
|
1441
|
+
collisions for multi machine environments gracefully.
|
1442
|
+
|
1415
1443
|
## Synced Folders
|
1416
1444
|
|
1417
|
-
Vagrant automatically syncs the project folder on the host to `/vagrant` in
|
1418
|
-
additional synced folders.
|
1445
|
+
Vagrant automatically syncs the project folder on the host to `/vagrant` in
|
1446
|
+
the guest. You can also configure additional synced folders.
|
1419
1447
|
|
1420
|
-
|
1421
|
-
|
1448
|
+
**SECURITY NOTE:** for remote Libvirt, nfs synced folders requires a bridged
|
1449
|
+
public network interface and you must connect to Libvirt via ssh.
|
1422
1450
|
|
1423
|
-
|
1424
|
-
it an setting the type, e.g.
|
1451
|
+
**NFS**
|
1425
1452
|
|
1426
|
-
|
1427
|
-
|
1428
|
-
|
1453
|
+
`vagrant-libvirt` supports
|
1454
|
+
[NFS](https://www.vagrantup.com/docs/synced-folders/nfs) as default with
|
1455
|
+
bidirectional synced folders.
|
1429
1456
|
|
1430
|
-
|
1457
|
+
Example with NFS:
|
1431
1458
|
|
1432
|
-
```
|
1433
|
-
|
1459
|
+
``` ruby
|
1460
|
+
Vagrant.configure("2") do |config|
|
1461
|
+
config.vm.synced_folder "./", "/vagrant"
|
1462
|
+
end
|
1434
1463
|
```
|
1435
1464
|
|
1436
|
-
|
1465
|
+
**RSync**
|
1437
1466
|
|
1438
|
-
|
1439
|
-
|
1467
|
+
`vagrant-libvirt` supports
|
1468
|
+
[rsync](https://www.vagrantup.com/docs/synced-folders/rsync) with
|
1469
|
+
unidirectional synced folders.
|
1470
|
+
|
1471
|
+
Example with rsync:
|
1472
|
+
|
1473
|
+
``` ruby
|
1474
|
+
Vagrant.configure("2") do |config|
|
1475
|
+
config.vm.synced_folder "./", "/vagrant", type: "rsync"
|
1476
|
+
end
|
1440
1477
|
```
|
1441
1478
|
|
1479
|
+
**9P**
|
1480
|
+
|
1481
|
+
`vagrant-libvirt` supports [VirtFS](http://www.linux-kvm.org/page/VirtFS) ([9p
|
1482
|
+
or Plan 9](https://en.wikipedia.org/wiki/9P_\(protocol\))) with bidirectional
|
1483
|
+
synced folders.
|
1484
|
+
|
1485
|
+
Difference between NFS and 9p is explained
|
1486
|
+
[here](https://unix.stackexchange.com/questions/240281/virtfs-plan-9-vs-nfs-as-tool-for-share-folder-for-virtual-machine).
|
1487
|
+
|
1442
1488
|
For 9p shares, a `mount: false` option allows to define synced folders without
|
1443
1489
|
mounting them at boot.
|
1444
1490
|
|
1445
|
-
|
1491
|
+
Example for `accessmode: "squash"` with 9p:
|
1446
1492
|
|
1447
|
-
|
1448
|
-
|
1493
|
+
``` ruby
|
1494
|
+
Vagrant.configure("2") do |config|
|
1495
|
+
config.vm.synced_folder "./", "/vagrant", type: "9p", disabled: false, accessmode: "squash", owner: "1000"
|
1496
|
+
end
|
1497
|
+
```
|
1498
|
+
|
1499
|
+
Example for `accessmode: "mapped"` with 9p:
|
1500
|
+
|
1501
|
+
``` ruby
|
1502
|
+
Vagrant.configure("2") do |config|
|
1503
|
+
config.vm.synced_folder "./", "/vagrant", type: "9p", disabled: false, accessmode: "mapped", mount: false
|
1504
|
+
end
|
1505
|
+
```
|
1506
|
+
|
1507
|
+
Further documentation on using 9p can be found in [kernel
|
1508
|
+
docs](https://www.kernel.org/doc/Documentation/filesystems/9p.txt) and in
|
1509
|
+
[QEMU
|
1510
|
+
wiki](https://wiki.qemu.org/Documentation/9psetup#Starting_the_Guest_directly).
|
1511
|
+
|
1512
|
+
Please do note that 9p depends on support in the guest and not all distros
|
1513
|
+
come with the 9p module by default.
|
1514
|
+
|
1515
|
+
**Virtio-fs**
|
1516
|
+
|
1517
|
+
`vagrant-libvirt` supports [Virtio-fs](https://virtio-fs.gitlab.io/) with
|
1518
|
+
bidirectional synced folders.
|
1519
|
+
|
1520
|
+
For virtiofs shares, a `mount: false` option allows to define synced folders
|
1521
|
+
without mounting them at boot.
|
1522
|
+
|
1523
|
+
So far, passthrough is the only supported access mode and it requires running
|
1524
|
+
the virtiofsd daemon as root.
|
1525
|
+
|
1526
|
+
QEMU needs to allocate the backing memory for all the guest RAM as shared
|
1527
|
+
memory, e.g. [Use file-backed
|
1528
|
+
memory](https://libvirt.org/kbase/virtiofs.html#host-setup) by enable
|
1529
|
+
`memory_backing_dir` option in `/etc/libvirt/qemu.conf`:
|
1530
|
+
|
1531
|
+
``` shell
|
1532
|
+
memory_backing_dir = "/dev/shm"
|
1533
|
+
```
|
1534
|
+
|
1535
|
+
Example for Libvirt \>= 6.2.0 (e.g. Ubuntu 20.10 with Linux 5.8.0 + QEMU 5.0 +
|
1536
|
+
Libvirt 6.6.0, i.e. NUMA nodes required) with virtiofs:
|
1537
|
+
|
1538
|
+
``` ruby
|
1539
|
+
Vagrant.configure("2") do |config|
|
1540
|
+
config.vm.provider :libvirt do |libvirt|
|
1541
|
+
libvirt.cpus = 2
|
1542
|
+
libvirt.numa_nodes = [{ :cpus => "0-1", :memory => 8192, :memAccess => "shared" }]
|
1543
|
+
libvirt.memorybacking :access, :mode => "shared"
|
1544
|
+
end
|
1545
|
+
config.vm.synced_folder "./", "/vagrant", type: "virtiofs"
|
1546
|
+
end
|
1547
|
+
```
|
1548
|
+
|
1549
|
+
Example for Libvirt \>= 6.9.0 (e.g. Ubuntu 21.04 with Linux 5.11.0 + QEMU 5.2 +
|
1550
|
+
Libvirt 7.0.0, or Ubuntu 20.04 + [PPA
|
1551
|
+
enabled](https://launchpad.net/~savoury1/+archive/ubuntu/virtualisation)) with
|
1552
|
+
virtiofs:
|
1553
|
+
|
1554
|
+
``` ruby
|
1555
|
+
Vagrant.configure("2") do |config|
|
1556
|
+
config.vm.provider :libvirt do |libvirt|
|
1557
|
+
libvirt.cpus = 2
|
1558
|
+
libvirt.memory = 8192
|
1559
|
+
libvirt.memorybacking :access, :mode => "shared"
|
1560
|
+
end
|
1561
|
+
config.vm.synced_folder "./", "/vagrant", type: "virtiofs"
|
1562
|
+
end
|
1563
|
+
```
|
1564
|
+
|
1565
|
+
Further documentation on using virtiofs can be found in [official
|
1566
|
+
HowTo](https://virtio-fs.gitlab.io/index.html#howto) and in [Libvirt
|
1567
|
+
KB](https://libvirt.org/kbase/virtiofs.html).
|
1568
|
+
|
1569
|
+
Please do note that virtiofs depends on:
|
1570
|
+
|
1571
|
+
- Host: Linux \>= 5.4, QEMU \>= 4.2 and Libvirt \>= 6.2 (e.g. Ubuntu 20.10)
|
1572
|
+
- Guest: Linux \>= 5.4 (e.g. Ubuntu 20.04)
|
1449
1573
|
|
1450
1574
|
## QEMU Session Support
|
1451
1575
|
|
@@ -1652,7 +1776,11 @@ Vagrant.configure("2") do |config|
|
|
1652
1776
|
end
|
1653
1777
|
```
|
1654
1778
|
|
1655
|
-
## Box
|
1779
|
+
## Box Formats
|
1780
|
+
|
1781
|
+
### Version 1
|
1782
|
+
|
1783
|
+
This is the original format that most boxes currently use.
|
1656
1784
|
|
1657
1785
|
You can view an example box in the
|
1658
1786
|
[`example_box/directory`](https://github.com/vagrant-libvirt/vagrant-libvirt/tree/master/example_box).
|
@@ -1666,6 +1794,45 @@ The box is a tarball containing:
|
|
1666
1794
|
* `Vagrantfile` that does default settings for the provider-specific
|
1667
1795
|
configuration for this provider
|
1668
1796
|
|
1797
|
+
|
1798
|
+
### Version 2 (Experimental)
|
1799
|
+
|
1800
|
+
Due to the limitation of only being able to handle a single disk with the version 1 format, a new
|
1801
|
+
format was added to support boxes that need to specify multiple disks. This is still currently
|
1802
|
+
experimental and as such support for packaging has yet to be added. There is a script in the tools
|
1803
|
+
folder (tools/create_box_with_two_disks.sh) that should provide a guideline on how to create such
|
1804
|
+
a box for those that wish to experiment and provide early feedback.
|
1805
|
+
|
1806
|
+
At it's most basic, it expects an array of disks to allow a specific order to be presented. Disks
|
1807
|
+
will be attached in this order and as such assume device names base on this within the VM. The
|
1808
|
+
'path' attribute is required, and is expected to be relative to the base of the box. This should
|
1809
|
+
allow placing the disk images within a nested directory within the box if it useful for those
|
1810
|
+
with a larger number of disks. The name allows overriding the target volume name that will be
|
1811
|
+
used in the libvirt storage pool. Note that vagrant-libvirt will still prefix the volume name
|
1812
|
+
with `#{box_name}_vagrant_box_image_#{box_version}_` to avoid accidental clashes with other boxes.
|
1813
|
+
|
1814
|
+
Format and virtual size need no longer be specified as they are now retrieved directly from the
|
1815
|
+
provided image using `qemu-img info ...`.
|
1816
|
+
|
1817
|
+
Example format:
|
1818
|
+
```json
|
1819
|
+
{
|
1820
|
+
'disks': [
|
1821
|
+
{
|
1822
|
+
'path': 'disk1.img'
|
1823
|
+
},
|
1824
|
+
{
|
1825
|
+
'path': 'disk2.img',
|
1826
|
+
'name': 'secondary_disk'
|
1827
|
+
},
|
1828
|
+
{
|
1829
|
+
'path': 'disk3.img'
|
1830
|
+
}
|
1831
|
+
],
|
1832
|
+
'provider': 'libvirt'
|
1833
|
+
}
|
1834
|
+
```
|
1835
|
+
|
1669
1836
|
## Create Box
|
1670
1837
|
|
1671
1838
|
If creating a box from a modified vagrant-libvirt machine, ensure that
|
@@ -1782,14 +1949,32 @@ $ bundle install
|
|
1782
1949
|
Once you have the dependencies, verify the unit tests pass with `rspec`:
|
1783
1950
|
|
1784
1951
|
```shell
|
1785
|
-
$
|
1952
|
+
$ export VAGRANT_HOME=$(mktemp -d)
|
1953
|
+
$ bundle exec rspec --fail-fast --color --format documentation
|
1786
1954
|
```
|
1787
1955
|
|
1788
|
-
If those pass, you're ready to start developing the plugin.
|
1789
|
-
|
1790
|
-
`
|
1791
|
-
|
1792
|
-
|
1956
|
+
If those pass, you're ready to start developing the plugin.
|
1957
|
+
|
1958
|
+
Setting `VAGRANT_HOME` is to avoid issues with conflicting with other
|
1959
|
+
plugins/gems or data already present under `~/.vagrant.d`.
|
1960
|
+
|
1961
|
+
Additionally if you wish to test against a specific version of vagrant you
|
1962
|
+
can control the version using the following before running the tests:
|
1963
|
+
|
1964
|
+
```shell
|
1965
|
+
$ export VAGRANT_VERSION=v2.2.14
|
1966
|
+
```
|
1967
|
+
|
1968
|
+
**Note** rvm is used by the maintainers to help provide an environment to test
|
1969
|
+
against multiple ruby versions that align with the ones used by vagrant for
|
1970
|
+
their embedded ruby depending on the release. You can see what version is used
|
1971
|
+
by looking at the current [unit tests](.github/workflows/unit-tests.yml)
|
1972
|
+
workflow.
|
1973
|
+
|
1974
|
+
You can test the plugin without installing it into your Vagrant environment by
|
1975
|
+
just creating a `Vagrantfile` in the top level of this directory (it is
|
1976
|
+
gitignored) that uses it. You can add the following line to your Vagrantfile
|
1977
|
+
while in development to ensure vagrant checks that the plugin is installed:
|
1793
1978
|
|
1794
1979
|
```ruby
|
1795
1980
|
Vagrant.configure("2") do |config|
|
@@ -49,6 +49,7 @@ module VagrantPlugins
|
|
49
49
|
|
50
50
|
b2.use StartDomain
|
51
51
|
b2.use WaitTillUp
|
52
|
+
b2.use WaitForCommunicator, [:running]
|
52
53
|
|
53
54
|
b2.use ForwardPorts
|
54
55
|
b2.use SetHostname
|
@@ -107,6 +108,7 @@ module VagrantPlugins
|
|
107
108
|
# Machine should gain IP address when comming up,
|
108
109
|
# so wait for dhcp lease and store IP into machines data_dir.
|
109
110
|
b3.use WaitTillUp
|
111
|
+
b3.use WaitForCommunicator, [:running]
|
110
112
|
|
111
113
|
b3.use ForwardPorts
|
112
114
|
b3.use PrepareNFSSettings
|
@@ -179,6 +181,7 @@ module VagrantPlugins
|
|
179
181
|
# Try to remove stale volumes anyway
|
180
182
|
b2.use SetNameOfDomain
|
181
183
|
b2.use RemoveStaleVolume if env[:machine].config.vm.box
|
184
|
+
b2.use CleanMachineFolder, quiet: true
|
182
185
|
b2.use MessageNotCreated unless env[:result]
|
183
186
|
|
184
187
|
next
|
@@ -191,6 +194,7 @@ module VagrantPlugins
|
|
191
194
|
b3.use PruneNFSExports
|
192
195
|
b3.use DestroyDomain
|
193
196
|
b3.use DestroyNetworks
|
197
|
+
b3.use CleanMachineFolder
|
194
198
|
else
|
195
199
|
b3.use MessageWillNotDestroy
|
196
200
|
end
|
@@ -324,6 +328,7 @@ module VagrantPlugins
|
|
324
328
|
autoload :CreateDomainVolume, action_root.join('create_domain_volume')
|
325
329
|
autoload :CreateNetworkInterfaces, action_root.join('create_network_interfaces')
|
326
330
|
autoload :CreateNetworks, action_root.join('create_networks')
|
331
|
+
autoload :CleanMachineFolder, action_root.join('clean_machine_folder')
|
327
332
|
autoload :DestroyDomain, action_root.join('destroy_domain')
|
328
333
|
autoload :DestroyNetworks, action_root.join('destroy_networks')
|
329
334
|
autoload :ForwardPorts, action_root.join('forward_ports')
|
@@ -366,6 +371,7 @@ module VagrantPlugins
|
|
366
371
|
autoload :SyncedFolders, 'vagrant/action/builtin/synced_folders'
|
367
372
|
autoload :SyncedFolderCleanup, 'vagrant/action/builtin/synced_folder_cleanup'
|
368
373
|
autoload :ProvisionerCleanup, 'vagrant/action/builtin/provisioner_cleanup'
|
374
|
+
autoload :WaitForCommunicator, 'vagrant/action/builtin/wait_for_communicator'
|
369
375
|
end
|
370
376
|
end
|
371
377
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module ProviderLibvirt
|
5
|
+
module Action
|
6
|
+
class CleanMachineFolder
|
7
|
+
|
8
|
+
def initialize(app, env, options=nil)
|
9
|
+
@logger = Log4r::Logger.new('vagrant_libvirt::action::create_domain')
|
10
|
+
@app = app
|
11
|
+
@ui = env[:ui]
|
12
|
+
@quiet = (options || {}).fetch(:quiet, false)
|
13
|
+
end
|
14
|
+
|
15
|
+
def call(env)
|
16
|
+
machine_folder = env[:machine].data_dir
|
17
|
+
|
18
|
+
@ui.info("Deleting the machine folder") unless @quiet
|
19
|
+
|
20
|
+
@logger.debug("Recursively removing: #{machine_folder}")
|
21
|
+
FileUtils.rm_rf(machine_folder, :secure => true)
|
22
|
+
|
23
|
+
@app.call(env)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -92,6 +92,7 @@ module VagrantPlugins
|
|
92
92
|
# Storage
|
93
93
|
@storage_pool_name = config.storage_pool_name
|
94
94
|
@snapshot_pool_name = config.snapshot_pool_name
|
95
|
+
@domain_volumes = []
|
95
96
|
@disks = config.disks
|
96
97
|
@cdroms = config.cdroms
|
97
98
|
|
@@ -141,19 +142,28 @@ module VagrantPlugins
|
|
141
142
|
else
|
142
143
|
pool_name = @storage_pool_name
|
143
144
|
end
|
144
|
-
@logger.debug "Search for
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
145
|
+
@logger.debug "Search for volumes in pool: #{pool_name}"
|
146
|
+
env[:box_volumes].each_index do |index|
|
147
|
+
suffix_index = index > 0 ? "_#{index}" : ''
|
148
|
+
domain_volume = env[:machine].provider.driver.connection.volumes.all(
|
149
|
+
name: "#{@name}#{suffix_index}.img"
|
150
|
+
).find { |x| x.pool_name == pool_name }
|
151
|
+
raise Errors::DomainVolumeExists if domain_volume.nil?
|
152
|
+
@domain_volumes.push({
|
153
|
+
:dev => (index+1).vdev.to_s,
|
154
|
+
:cache => @domain_volume_cache,
|
155
|
+
:bus => @disk_bus,
|
156
|
+
:path => domain_volume.path,
|
157
|
+
:virtual_size => env[:box_volumes][index][:virtual_size]
|
158
|
+
})
|
159
|
+
end
|
150
160
|
end
|
151
161
|
|
152
162
|
# If we have a box, take the path from the domain volume and set our storage_prefix.
|
153
163
|
# If not, we dump the storage pool xml to get its defined path.
|
154
164
|
# the default storage prefix is typically: /var/lib/libvirt/images/
|
155
165
|
if env[:machine].config.vm.box
|
156
|
-
storage_prefix = File.dirname(@
|
166
|
+
storage_prefix = File.dirname(@domain_volumes[0][:path]) + '/' # steal
|
157
167
|
else
|
158
168
|
storage_prefix = get_disk_storage_prefix(env, @storage_pool_name)
|
159
169
|
end
|
@@ -188,7 +198,7 @@ module VagrantPlugins
|
|
188
198
|
path: disk[:absolute_path],
|
189
199
|
capacity: disk[:size],
|
190
200
|
owner: storage_uid(env),
|
191
|
-
group:
|
201
|
+
group: storage_gid(env),
|
192
202
|
#:allocation => ?,
|
193
203
|
pool_name: disk_pool_name
|
194
204
|
)
|
@@ -227,7 +237,11 @@ module VagrantPlugins
|
|
227
237
|
env[:ui].info(" -- Feature: #{feature}")
|
228
238
|
end
|
229
239
|
@features_hyperv.each do |feature|
|
230
|
-
|
240
|
+
if feature[:name] == 'spinlocks'
|
241
|
+
env[:ui].info(" -- Feature (HyperV): name=#{feature[:name]}, state=#{feature[:state]}, retries=#{feature[:retries]}")
|
242
|
+
else
|
243
|
+
env[:ui].info(" -- Feature (HyperV): name=#{feature[:name]}, state=#{feature[:state]}")
|
244
|
+
end
|
231
245
|
end
|
232
246
|
env[:ui].info(" -- Clock offset: #{@clock_offset}")
|
233
247
|
@clock_timers.each do |timer|
|
@@ -250,7 +264,9 @@ module VagrantPlugins
|
|
250
264
|
env[:ui].info(" -- Base box: #{env[:machine].box.name}")
|
251
265
|
end
|
252
266
|
env[:ui].info(" -- Storage pool: #{@storage_pool_name}")
|
253
|
-
|
267
|
+
@domain_volumes.each do |volume|
|
268
|
+
env[:ui].info(" -- Image(#{volume[:device]}): #{volume[:path]}, #{volume[:virtual_size]}G")
|
269
|
+
end
|
254
270
|
|
255
271
|
if not @disk_driver_opts.empty?
|
256
272
|
env[:ui].info(" -- Disk driver opts: #{@disk_driver_opts.reject { |k,v| v.nil? }.map { |k,v| "#{k}='#{v}'"}.join(' ')}")
|