vagrant-libvirt 0.0.36 → 0.0.37
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/.coveralls.yml +1 -0
- data/Gemfile +1 -0
- data/README.md +171 -13
- data/lib/vagrant-libvirt/action/create_domain.rb +44 -19
- data/lib/vagrant-libvirt/action/create_domain_volume.rb +12 -12
- data/lib/vagrant-libvirt/action/create_network_interfaces.rb +37 -39
- data/lib/vagrant-libvirt/action/create_networks.rb +34 -34
- data/lib/vagrant-libvirt/action/destroy_domain.rb +7 -8
- data/lib/vagrant-libvirt/action/destroy_networks.rb +12 -13
- data/lib/vagrant-libvirt/action/forward_ports.rb +21 -23
- data/lib/vagrant-libvirt/action/halt_domain.rb +8 -9
- data/lib/vagrant-libvirt/action/handle_box_image.rb +28 -27
- data/lib/vagrant-libvirt/action/handle_storage_pool.rb +8 -8
- data/lib/vagrant-libvirt/action/is_created.rb +1 -1
- data/lib/vagrant-libvirt/action/is_running.rb +2 -2
- data/lib/vagrant-libvirt/action/is_suspended.rb +4 -4
- data/lib/vagrant-libvirt/action/message_already_created.rb +2 -2
- data/lib/vagrant-libvirt/action/message_not_created.rb +2 -2
- data/lib/vagrant-libvirt/action/message_not_running.rb +2 -2
- data/lib/vagrant-libvirt/action/message_not_suspended.rb +2 -2
- data/lib/vagrant-libvirt/action/package_domain.rb +6 -5
- data/lib/vagrant-libvirt/action/prepare_nfs_settings.rb +7 -6
- data/lib/vagrant-libvirt/action/prepare_nfs_valid_ids.rb +2 -2
- data/lib/vagrant-libvirt/action/prune_nfs_exports.rb +3 -3
- data/lib/vagrant-libvirt/action/read_mac_addresses.rb +8 -10
- data/lib/vagrant-libvirt/action/remove_libvirt_image.rb +4 -4
- data/lib/vagrant-libvirt/action/remove_stale_volume.rb +8 -7
- data/lib/vagrant-libvirt/action/resume_domain.rb +5 -5
- data/lib/vagrant-libvirt/action/set_boot_order.rb +70 -27
- data/lib/vagrant-libvirt/action/set_name_of_domain.rb +10 -12
- data/lib/vagrant-libvirt/action/share_folders.rb +16 -18
- data/lib/vagrant-libvirt/action/start_domain.rb +59 -64
- data/lib/vagrant-libvirt/action/suspend_domain.rb +5 -5
- data/lib/vagrant-libvirt/action/wait_till_up.rb +24 -26
- data/lib/vagrant-libvirt/action.rb +18 -23
- data/lib/vagrant-libvirt/cap/mount_p9.rb +11 -10
- data/lib/vagrant-libvirt/cap/nic_mac_addresses.rb +1 -1
- data/lib/vagrant-libvirt/cap/synced_folder.rb +20 -19
- data/lib/vagrant-libvirt/config.rb +164 -136
- data/lib/vagrant-libvirt/driver.rb +10 -13
- data/lib/vagrant-libvirt/errors.rb +4 -3
- data/lib/vagrant-libvirt/plugin.rb +4 -6
- data/lib/vagrant-libvirt/provider.rb +23 -24
- data/lib/vagrant-libvirt/templates/domain.xml.erb +14 -1
- data/lib/vagrant-libvirt/templates/private_network.xml.erb +4 -0
- data/lib/vagrant-libvirt/util/collection.rb +0 -3
- data/lib/vagrant-libvirt/util/erb_template.rb +6 -10
- data/lib/vagrant-libvirt/util/error_codes.rb +32 -33
- data/lib/vagrant-libvirt/util/network_util.rb +29 -21
- data/lib/vagrant-libvirt/util.rb +3 -4
- data/lib/vagrant-libvirt/version.rb +1 -1
- data/locales/en.yml +3 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/environment_helper.rb +5 -7
- data/spec/support/libvirt_context.rb +13 -11
- data/spec/support/sharedcontext.rb +9 -10
- data/spec/unit/action/destroy_domain_spec.rb +38 -37
- data/spec/unit/action/set_name_of_domain_spec.rb +4 -4
- data/spec/unit/action/wait_till_up_spec.rb +45 -46
- data/spec/unit/config_spec.rb +106 -0
- data/spec/unit/templates/domain_all_settings.xml +125 -0
- data/spec/unit/templates/domain_defaults.xml +44 -0
- data/spec/unit/templates/domain_spec.rb +69 -0
- data/tools/create_box.sh +8 -2
- metadata +12 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 133c3e62a88c8fe90de33598ebafdaadb7a8fcfc
|
4
|
+
data.tar.gz: efc8ee6514b87be1309957af7a9bf57f15daa893
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5dcc7e341830feb2a3ac402539ef4e9447eb234caa6cda31f62a35bb677be58e0a89b6ed27d84a683c09857f8b4580978d61c89409e9955c676bd0b42c4a3e15
|
7
|
+
data.tar.gz: 2e1f97ec49aaf4c71131fd2eedf524e707b42814b943a38fb88a201ef8061244f4287e1adad8700d7f1267d4c4c6a83e2262327734e6d3b569b74629ebcc5e48
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Vagrant Libvirt Provider
|
2
|
+
|
3
|
+
[](https://gitter.im/vagrant-libvirt/vagrant-libvirt?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
2
4
|
[](https://travis-ci.org/vagrant-libvirt/vagrant-libvirt)
|
5
|
+
[](https://coveralls.io/github/vagrant-libvirt/vagrant-libvirt?branch=master)
|
3
6
|
|
4
7
|
This is a [Vagrant](http://www.vagrantup.com) plugin that adds an
|
5
8
|
[Libvirt](http://libvirt.org) provider to Vagrant, allowing Vagrant to
|
@@ -8,6 +11,23 @@ control and provision machines via Libvirt toolkit.
|
|
8
11
|
**Note:** Actual version is still a development one. Feedback is welcome and
|
9
12
|
can help a lot :-)
|
10
13
|
|
14
|
+
## QA status
|
15
|
+
|
16
|
+
We periodically test basic functionality for vagrant-libvirt on various distributions.
|
17
|
+
In the table below, build passing means that specific version combination of Vagrant + Vagrant-libvirt was installed correctly and `vagrant up` is working. Click the badge to see the log.
|
18
|
+
|
19
|
+
|Vagrant|Vagrant-libvirt|ubuntu-12.04|ubuntu-14.04|ubuntu-16.04|debian-8|centos-6|centos-7|fedora-21|fedora-22|fedora-23|fedora-24|arch|
|
20
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
21
|
+
|1.9.1|master|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=ubuntu-12.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=ubuntu-14.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=ubuntu-16.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=debian-8/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=centos-6/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=centos-7/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=fedora-21/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=fedora-22/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=fedora-23/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=fedora-24/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.9.1,distro=arch/lastBuild/consoleText)|
|
22
|
+
|1.9.1|0.0.37|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=ubuntu-12.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=ubuntu-14.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=ubuntu-16.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=debian-8/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=centos-6/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=centos-7/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=fedora-21/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=fedora-22/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=fedora-23/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=fedora-24/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.9.1,distro=arch/lastBuild/consoleText)|
|
23
|
+
|1.9.1|0.0.35|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=ubuntu-12.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=ubuntu-14.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=ubuntu-16.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=debian-8/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=centos-6/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=centos-7/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=fedora-21/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=fedora-22/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=fedora-23/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=fedora-24/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.9.1,distro=arch/lastBuild/consoleText)|
|
24
|
+
|1.8.7|master|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=ubuntu-12.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=ubuntu-14.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=ubuntu-16.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=debian-8/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=centos-6/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=centos-7/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=fedora-21/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=fedora-22/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=fedora-23/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=fedora-24/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=master,qa_vagrant_version=1.8.7,distro=arch/lastBuild/consoleText)|
|
25
|
+
|1.8.7|0.0.37|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=ubuntu-12.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=ubuntu-14.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=ubuntu-16.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=debian-8/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=centos-6/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=centos-7/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=fedora-21/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=fedora-22/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=fedora-23/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=fedora-24/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.37,qa_vagrant_version=1.8.7,distro=arch/lastBuild/consoleText)|
|
26
|
+
|1.8.7|0.0.35|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=ubuntu-12.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=ubuntu-14.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=ubuntu-16.04/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=debian-8/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=centos-6/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=centos-7/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=fedora-21/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=fedora-22/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=fedora-23/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=fedora-24/lastBuild/consoleText)|[](https://jenkins.infernix.net/job/vagrant-libvirt-qa/qa_vagrant_libvirt_version=0.0.35,qa_vagrant_version=1.8.7,distro=arch/lastBuild/consoleText)|
|
27
|
+
|
28
|
+
## Index
|
29
|
+
|
30
|
+
|
11
31
|
- [Features](#features)
|
12
32
|
- [Future work](#future-work)
|
13
33
|
- [Installation](#installation)
|
@@ -30,6 +50,7 @@ can help a lot :-)
|
|
30
50
|
- [CDROMs](#cdroms)
|
31
51
|
- [Input](#input)
|
32
52
|
- [PCI device passthrough](#pci-device-passthrough)
|
53
|
+
- [USB Redirector Devices](#usb-redirector-devices)
|
33
54
|
- [Random number generator passthrough](#random-number-generator-passthrough)
|
34
55
|
- [CPU Features](#cpu-features)
|
35
56
|
- [No box and PXE boot](#no-box-and-pxe-boot)
|
@@ -80,6 +101,35 @@ kvm type virtual machines with `virsh` or `virt-manager`.
|
|
80
101
|
Next, you must have [Vagrant
|
81
102
|
installed](http://docs.vagrantup.com/v2/installation/index.html).
|
82
103
|
Vagrant-libvirt supports Vagrant 1.5, 1.6, 1.7 and 1.8.
|
104
|
+
*We only test with the upstream version!* If you decide to install your distros
|
105
|
+
version and you run into problems, as a first step you should switch to upstream.
|
106
|
+
|
107
|
+
Now you need to make sure your have all the build dependencies installed for
|
108
|
+
vagrant-libvirt. This depends on your distro. An overview:
|
109
|
+
|
110
|
+
* Ubuntu 12.04/14.04/16.04, Debian:
|
111
|
+
```shell
|
112
|
+
apt-get build-dep vagrant ruby-libvirt
|
113
|
+
apt-get install qemu libvirt-bin ebtables dnsmasq
|
114
|
+
apt-get install libxslt-dev libxml2-dev libvirt-dev zlib1g-dev ruby-dev
|
115
|
+
```
|
116
|
+
|
117
|
+
(It is possible some users will already have libraries from the third line installed, but this is the way to make it work OOTB.)
|
118
|
+
|
119
|
+
* CentOS 6, 7, Fedora 21:
|
120
|
+
```shell
|
121
|
+
yum install qemu libvirt libvirt-devel ruby-devel gcc qemu-kvm
|
122
|
+
```
|
123
|
+
|
124
|
+
* Fedora 22 and up:
|
125
|
+
```shell
|
126
|
+
dnf -y install qemu libvirt libvirt-devel ruby-devel gcc
|
127
|
+
```
|
128
|
+
|
129
|
+
* Arch linux: please read the related [ArchWiki](https://wiki.archlinux.org/index.php/Vagrant#vagrant-libvirt) page.
|
130
|
+
```shell
|
131
|
+
pacman -S vagrant
|
132
|
+
```
|
83
133
|
|
84
134
|
Now you're ready to install vagrant-libvirt using standard [Vagrant
|
85
135
|
plugin](http://docs.vagrantup.com/v2/plugins/usage.html) installation methods.
|
@@ -93,11 +143,9 @@ $ vagrant plugin install vagrant-libvirt
|
|
93
143
|
In case of problems with building nokogiri and ruby-libvirt gem, install
|
94
144
|
missing development libraries for libxslt, libxml2 and libvirt.
|
95
145
|
|
96
|
-
On Ubuntu, Debian, ...
|
97
146
|
|
98
|
-
|
99
|
-
|
100
|
-
```
|
147
|
+
On Ubuntu, Debian, make sure you are running all three of the `apt` commands above with `sudo`.
|
148
|
+
|
101
149
|
|
102
150
|
On RedHat, Centos, Fedora, ...
|
103
151
|
|
@@ -106,6 +154,8 @@ $ sudo dnf install libxslt-devel libxml2-devel libvirt-devel \
|
|
106
154
|
libguestfs-tools-c ruby-devel gcc
|
107
155
|
```
|
108
156
|
|
157
|
+
On Arch linux it is recommended to follow [steps from ArchWiki](https://wiki.archlinux.org/index.php/Vagrant#vagrant-libvirt).
|
158
|
+
|
109
159
|
If have problem with installation - check your linker. It should be `ld.gold`:
|
110
160
|
|
111
161
|
```shell
|
@@ -114,6 +164,11 @@ sudo alternatives --set ld /usr/bin/ld.gold
|
|
114
164
|
sudo ln -fs /usr/bin/ld.gold /usr/bin/ld
|
115
165
|
```
|
116
166
|
|
167
|
+
If you have issues building ruby-libvirt, try the following:
|
168
|
+
```shell
|
169
|
+
CONFIGURE_ARGS='with-ldflags=-L/opt/vagrant/embedded/lib with-libvirt-include=/usr/include/libvirt with-libvirt-lib=/usr/lib' GEM_HOME=~/.vagrant.d/gems GEM_PATH=$GEM_HOME:/opt/vagrant/embedded/gems PATH=/opt/vagrant/embedded/bin:$PATH vagrant plugin install vagrant-libvirt
|
170
|
+
```
|
171
|
+
|
117
172
|
## Vagrant Project Preparation
|
118
173
|
|
119
174
|
### Add Box
|
@@ -233,8 +288,9 @@ end
|
|
233
288
|
mode](https://libvirt.org/formatdomain.html#elementsCPU). Defaults to
|
234
289
|
'host-model' if not set. Allowed values: host-model, host-passthrough,
|
235
290
|
custom.
|
236
|
-
* `cpu_model` - CPU Model. Defaults to 'qemu64' if not set
|
237
|
-
only be used when setting
|
291
|
+
* `cpu_model` - CPU Model. Defaults to 'qemu64' if not set and `cpu_mode` is
|
292
|
+
`custom` and to '' otherwise. This can really only be used when setting
|
293
|
+
`cpu_mode` to `custom`.
|
238
294
|
* `cpu_fallback` - Whether to allow libvirt to fall back to a CPU model close
|
239
295
|
to the specified model if features in the guest CPU are not supported on the
|
240
296
|
host. Defaults to 'allow' if not set. Allowed values: `allow`, `forbid`.
|
@@ -267,7 +323,7 @@ end
|
|
267
323
|
* `keymap` - Set keymap for vm. default: en-us
|
268
324
|
* `kvm_hidden` - [Hide the hypervisor from the
|
269
325
|
guest](https://libvirt.org/formatdomain.html#elementsFeatures). Useful for
|
270
|
-
GPU passthrough on stubborn drivers. Default is false.
|
326
|
+
[GPU passthrough](#pci-device-passthrough) on stubborn drivers. Default is false.
|
271
327
|
* `video_type` - Sets the graphics card type exposed to the guest. Defaults to
|
272
328
|
"cirrus". [Possible
|
273
329
|
values](http://libvirt.org/formatdomain.html#elementsVideo) are "vga",
|
@@ -321,6 +377,10 @@ end
|
|
321
377
|
for use by the [qemu guest
|
322
378
|
agent](http://wiki.libvirt.org/page/Qemu_guest_agent) and the Spice/QXL
|
323
379
|
graphics type.
|
380
|
+
* `mgmt_attach` - Decide if VM has interface in mgmt network. If set to 'false'
|
381
|
+
it is not possible to communicate with VM through `vagrant ssh` or run
|
382
|
+
provisioning. Setting to 'false' is only possible when VM doesn't use box.
|
383
|
+
Defaults set to 'true'.
|
324
384
|
|
325
385
|
Specific domain settings can be set for each domain separately in multi-VM
|
326
386
|
environment. Example below shows a part of Vagrantfile, where specific options
|
@@ -419,6 +479,12 @@ An examples of network interface definitions:
|
|
419
479
|
# default is 127.0.0.1 if omitted
|
420
480
|
# :libvirt__tunnel_ip => '127.0.0.1',
|
421
481
|
:libvirt__tunnel_port => '11111'
|
482
|
+
# network with ipv6 support
|
483
|
+
test_vm1.vm.network :private_network,
|
484
|
+
:ip => "10.20.5.42",
|
485
|
+
:libvirt__guest_ipv6 => "yes",
|
486
|
+
:libvirt__ipv6_address => "2001:db8:ca2:6::1",
|
487
|
+
:libvirt__ipv6_prefix => "64"
|
422
488
|
|
423
489
|
# Guest 2
|
424
490
|
config.vm.define :test_vm2 do |test_vm2|
|
@@ -427,6 +493,12 @@ An examples of network interface definitions:
|
|
427
493
|
# default is 127.0.0.1 if omitted
|
428
494
|
# :libvirt__tunnel_ip => '127.0.0.1',
|
429
495
|
:libvirt__tunnel_port => '11111'
|
496
|
+
# network with ipv6 support
|
497
|
+
test_vm2.vm.network :private_network,
|
498
|
+
:ip => "10.20.5.45",
|
499
|
+
:libvirt__guest_ipv6 => "yes",
|
500
|
+
:libvirt__ipv6_address => "2001:db8:ca2:6::1",
|
501
|
+
:libvirt__ipv6_prefix => "64"
|
430
502
|
|
431
503
|
|
432
504
|
# Public Network
|
@@ -517,7 +589,9 @@ starts with `libvirt__` string. Here is a list of those options:
|
|
517
589
|
* `:libvirt__guest_ipv6` - Enable or disable guest-to-guest IPv6 communication.
|
518
590
|
See [here](https://libvirt.org/formatnetwork.html#examplesPrivate6), and
|
519
591
|
[here](http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=705e67d40b09a905cd6a4b8b418d5cb94eaa95a8)
|
520
|
-
for for more information.
|
592
|
+
for for more information. *Note: takes either 'yes' or 'no' for value*
|
593
|
+
* `:libvirt__ipv6_address` - Define ipv6 address, require also prefix.
|
594
|
+
* `:libvirt__ipv6_prefix` - Define ipv6 prefix. generate string `<ip family="ipv6" address="address" prefix="prefix" >`
|
521
595
|
* `:libvirt__iface_name` - Define a name for the private network interface.
|
522
596
|
With this feature one can [simulate physical link
|
523
597
|
failures](https://github.com/vagrant-libvirt/vagrant-libvirt/pull/498)
|
@@ -526,6 +600,8 @@ starts with `libvirt__` string. Here is a list of those options:
|
|
526
600
|
* `:model_type` - parameter specifies the model of the network adapter when you
|
527
601
|
create a domain value by default virtio KVM believe possible values, see the
|
528
602
|
documentation for libvirt
|
603
|
+
* `:autostart` - Automatic startup of network by the libvirt daemon.
|
604
|
+
If not specified the default is 'false'.
|
529
605
|
|
530
606
|
When the option `:libvirt__dhcp_enabled` is to to 'false' it shouldn't matter
|
531
607
|
whether the virtual network contains a DHCP server or not and vagrant-libvirt
|
@@ -555,20 +631,25 @@ virtual network.
|
|
555
631
|
|
556
632
|
vagrant-libvirt uses a private network to perform some management operations on
|
557
633
|
VMs. All VMs will have an interface connected to this network and an IP address
|
558
|
-
dynamically assigned by libvirt
|
559
|
-
|
560
|
-
provider level.
|
634
|
+
dynamically assigned by libvirt unless you set `:mgmt_attach` to 'false'.
|
635
|
+
This is in addition to any networks you configure. The name and address
|
636
|
+
used by this network are configurable at the provider level.
|
561
637
|
|
562
638
|
* `management_network_name` - Name of libvirt network to which all VMs will be
|
563
639
|
connected. If not specified the default is 'vagrant-libvirt'.
|
564
640
|
* `management_network_address` - Address of network to which all VMs will be
|
565
641
|
connected. Must include the address and subnet mask. If not specified the
|
566
642
|
default is '192.168.121.0/24'.
|
643
|
+
* `management_network_mode` - Network mode for the libvirt management network.
|
644
|
+
Specify one of veryisolated, none, nat or route options. Further documentated
|
645
|
+
under [Private Networks](#private-network-options)
|
567
646
|
* `management_network_guest_ipv6` - Enable or disable guest-to-guest IPv6
|
568
647
|
communication. See
|
569
648
|
[here](https://libvirt.org/formatnetwork.html#examplesPrivate6), and
|
570
649
|
[here](http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=705e67d40b09a905cd6a4b8b418d5cb94eaa95a8)
|
571
650
|
for for more information.
|
651
|
+
* `management_network_autostart` - Automatic startup of mgmt network, if not
|
652
|
+
specified the default is 'false'.
|
572
653
|
|
573
654
|
You may wonder how vagrant-libvirt knows the IP address a VM received. Libvirt
|
574
655
|
doesn't provide a standard way to find out the IP address of a running domain.
|
@@ -657,7 +738,7 @@ You can specify multiple inputs to the VM via `libvirt.input`. Available
|
|
657
738
|
options are listed below. Note that both options are required:
|
658
739
|
|
659
740
|
* `type` - The type of the input
|
660
|
-
* `bus` - The
|
741
|
+
* `bus` - The bus of the input
|
661
742
|
|
662
743
|
```ruby
|
663
744
|
Vagrant.configure("2") do |config|
|
@@ -702,6 +783,62 @@ Vagrant.configure("2") do |config|
|
|
702
783
|
end
|
703
784
|
```
|
704
785
|
|
786
|
+
Note! Above options affect configuration only at domain creation. It won't change VM behaviour on `vagrant reload` after domain was created.
|
787
|
+
|
788
|
+
Don't forget to [set](#domain-specific-options) `kvm_hidden` option to `true` especially if you are passthroughing NVIDIA GPUs. Otherwise GPU is visible from VM but cannot be operated.
|
789
|
+
|
790
|
+
## USB Redirector Devices
|
791
|
+
You can specify multiple redirect devices via `libvirt.redirdev`. There are two types, `tcp` and `spicevmc` supported, for forwarding USB-devices to the guest. Available options are listed below.
|
792
|
+
|
793
|
+
* `type` - The type of the USB redirector device. (`tcp` or `spicevmc`)
|
794
|
+
* `host` - The host where the device is attached to. (mandatory for type `tcp`)
|
795
|
+
* `port` - The port where the device is listening. (mandatory for type `tcp`)
|
796
|
+
|
797
|
+
```ruby
|
798
|
+
Vagrant.configure("2") do |config|
|
799
|
+
config.vm.provider :libvirt do |libvirt|
|
800
|
+
# add two devices using spicevmc channel
|
801
|
+
(1..2).each do
|
802
|
+
libvirt.redirdev :type => "spicevmc"
|
803
|
+
end
|
804
|
+
# add device, provided by localhost:4000
|
805
|
+
libvirt.redirdev :type => "tcp", :host => "localhost", :port => "4000"
|
806
|
+
end
|
807
|
+
end
|
808
|
+
```
|
809
|
+
|
810
|
+
### Filter for USB Redirector Devices
|
811
|
+
You can define filter for redirected devices. These filters can be positiv or negative, by setting the mandatory option `allow=yes` or `allow=no`. All available options are listed below. Note the option `allow` is mandatory.
|
812
|
+
|
813
|
+
* `class` - The device class of the USB device. A list of device classes is available on [Wikipedia](https://en.wikipedia.org/wiki/USB#Device_classes).
|
814
|
+
* `vendor` - The vendor of the USB device.
|
815
|
+
* `product` - The product id of the USB device.
|
816
|
+
* `version` - The version of the USB device. Note that this is the version of `bcdDevice`
|
817
|
+
* `allow` - allow or disallow redirecting this device. (mandatory)
|
818
|
+
|
819
|
+
You can extract that information from output of `lsusb` command. Every line contains the information in format `Bus [<bus>] Device [<device>]: ID [<vendor>:[<product>]`. The `version` can be extracted from the detailed output of the device using `lsusb -D /dev/usb/[<bus>]/[<device>]`. For example:
|
820
|
+
|
821
|
+
```shell
|
822
|
+
# get bcdDevice from
|
823
|
+
$: lsusb
|
824
|
+
Bus 001 Device 009: ID 08e6:3437 Gemalto (was Gemplus) GemPC Twin SmartCard Reader
|
825
|
+
|
826
|
+
$: lsusb -D /dev/bus/usb/001/009 | grep bcdDevice
|
827
|
+
bcdDevice 2.00
|
828
|
+
```
|
829
|
+
|
830
|
+
In this case, the USB device with `class 0x0b`, `vendor 0x08e6`, `product 0x3437` and `bcdDevice version 2.00` is allowed to be redirected to the guest. All other devices will be refused.
|
831
|
+
|
832
|
+
```ruby
|
833
|
+
Vagrant.configure("2") do |config|
|
834
|
+
config.vm.provider :libvirt do |libvirt|
|
835
|
+
libvirt.redirdev :type => "spicevmc"
|
836
|
+
libvirt.redirfilter :class => "0x0b" :vendor => "0x08e6" :product => "0x3437" :version => "2.00" :allow => "yes"
|
837
|
+
libvirt.redirfilter :allow => "no"
|
838
|
+
end
|
839
|
+
end
|
840
|
+
```
|
841
|
+
|
705
842
|
## Random number generator passthrough
|
706
843
|
|
707
844
|
You can pass through `/dev/random` to your VM by configuring the domain like this:
|
@@ -805,6 +942,25 @@ Vagrant.configure("2") do |config|
|
|
805
942
|
end
|
806
943
|
```
|
807
944
|
|
945
|
+
Example for vm with 2 networks and only 1 is bootable and has dhcp server in this subnet, for example foreman with dhcp server
|
946
|
+
Name of network "foreman_managed" is key for define boot order
|
947
|
+
```ruby
|
948
|
+
config.vm.define :pxeclient do |pxeclient|
|
949
|
+
pxeclient.vm.network :private_network,ip: '10.0.0.5',
|
950
|
+
libvirt__network_name: "foreman_managed",
|
951
|
+
libvirt__dhcp_enabled: false,
|
952
|
+
libvirt__host_ip: '10.0.0.1'
|
953
|
+
|
954
|
+
pxeclient.vm.provider :libvirt do |domain|
|
955
|
+
domain.memory = 1000
|
956
|
+
boot_network = {'network' => 'foreman_managed'}
|
957
|
+
domain.storage :file, :size => '100G', :type => 'qcow2'
|
958
|
+
domain.boot boot_network
|
959
|
+
domain.boot 'hd'
|
960
|
+
end
|
961
|
+
end
|
962
|
+
```
|
963
|
+
|
808
964
|
## SSH Access To VM
|
809
965
|
|
810
966
|
vagrant-libvirt supports vagrant's [standard ssh
|
@@ -842,7 +998,7 @@ config.vm.synced_folder './', '/vagrant', type: 'rsync'
|
|
842
998
|
or
|
843
999
|
|
844
1000
|
```shell
|
845
|
-
config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmode: "squash", owner: "
|
1001
|
+
config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmode: "squash", owner: "1000"
|
846
1002
|
```
|
847
1003
|
|
848
1004
|
or
|
@@ -854,6 +1010,8 @@ config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmod
|
|
854
1010
|
For 9p shares, a `mount: false` option allows to define synced folders without
|
855
1011
|
mounting them at boot.
|
856
1012
|
|
1013
|
+
Further documentation on using 9p can be found [here](https://www.kernel.org/doc/Documentation/filesystems/9p.txt). Please do note that 9p depends on support in the guest and not all distros come with the 9p module by default.
|
1014
|
+
|
857
1015
|
**SECURITY NOTE:** for remote libvirt, nfs synced folders requires a bridged
|
858
1016
|
public network interface and you must connect to libvirt via ssh.
|
859
1017
|
|
@@ -12,7 +12,7 @@ module VagrantPlugins
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def _disk_name(name, disk)
|
15
|
-
"#{name}-#{disk[:device]}.#{disk[:type]}"
|
15
|
+
"#{name}-#{disk[:device]}.#{disk[:type]}" # disk name
|
16
16
|
end
|
17
17
|
|
18
18
|
def _disks_print(disks)
|
@@ -55,10 +55,10 @@ module VagrantPlugins
|
|
55
55
|
@graphics_autoport = config.graphics_autoport
|
56
56
|
@graphics_port = config.graphics_port
|
57
57
|
@graphics_ip = config.graphics_ip
|
58
|
-
@graphics_passwd =
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
@graphics_passwd = if config.graphics_passwd.to_s.empty?
|
59
|
+
''
|
60
|
+
else
|
61
|
+
"passwd='#{config.graphics_passwd}'"
|
62
62
|
end
|
63
63
|
@video_type = config.video_type
|
64
64
|
@video_vram = config.video_vram
|
@@ -89,8 +89,12 @@ module VagrantPlugins
|
|
89
89
|
# USB device passthrough
|
90
90
|
@usbs = config.usbs
|
91
91
|
|
92
|
+
# Redirected devices
|
93
|
+
@redirdevs = config.redirdevs
|
94
|
+
@redirfilters = config.redirfilters
|
95
|
+
|
92
96
|
# RNG device passthrough
|
93
|
-
@rng =config.rng
|
97
|
+
@rng = config.rng
|
94
98
|
|
95
99
|
config = env[:machine].provider_config
|
96
100
|
@domain_type = config.driver
|
@@ -104,7 +108,8 @@ module VagrantPlugins
|
|
104
108
|
x.pool_name == @storage_pool_name
|
105
109
|
end
|
106
110
|
domain_volume = ProviderLibvirt::Util::Collection.find_matching(
|
107
|
-
actual_volumes,"#{@name}.img"
|
111
|
+
actual_volumes, "#{@name}.img"
|
112
|
+
)
|
108
113
|
raise Errors::DomainVolumeExists if domain_volume.nil?
|
109
114
|
@domain_volume_path = domain_volume.path
|
110
115
|
end
|
@@ -113,12 +118,12 @@ module VagrantPlugins
|
|
113
118
|
# If not, we dump the storage pool xml to get its defined path.
|
114
119
|
# the default storage prefix is typically: /var/lib/libvirt/images/
|
115
120
|
if env[:machine].config.vm.box
|
116
|
-
storage_prefix = File.dirname(@domain_volume_path) + '/'
|
121
|
+
storage_prefix = File.dirname(@domain_volume_path) + '/' # steal
|
117
122
|
else
|
118
123
|
storage_pool = env[:machine].provider.driver.connection.client.lookup_storage_pool_by_name(@storage_pool_name)
|
119
124
|
raise Errors::NoStoragePool if storage_pool.nil?
|
120
125
|
xml = Nokogiri::XML(storage_pool.xml_desc)
|
121
|
-
storage_prefix = xml.xpath(
|
126
|
+
storage_prefix = xml.xpath('/pool/target/path').inner_text.to_s + '/'
|
122
127
|
end
|
123
128
|
|
124
129
|
@disks.each do |disk|
|
@@ -144,10 +149,11 @@ module VagrantPlugins
|
|
144
149
|
path: disk[:absolute_path],
|
145
150
|
capacity: disk[:size],
|
146
151
|
#:allocation => ?,
|
147
|
-
pool_name: @storage_pool_name
|
152
|
+
pool_name: @storage_pool_name
|
153
|
+
)
|
148
154
|
rescue Fog::Errors::Error => e
|
149
155
|
raise Errors::FogDomainVolumeCreateError,
|
150
|
-
|
156
|
+
error_message: e.message
|
151
157
|
end
|
152
158
|
else
|
153
159
|
disk[:preexisting] = true
|
@@ -157,9 +163,7 @@ module VagrantPlugins
|
|
157
163
|
# Output the settings we're going to use to the user
|
158
164
|
env[:ui].info(I18n.t('vagrant_libvirt.creating_domain'))
|
159
165
|
env[:ui].info(" -- Name: #{@name}")
|
160
|
-
if @uuid != ''
|
161
|
-
env[:ui].info(" -- Forced UUID: #{@uuid}")
|
162
|
-
end
|
166
|
+
env[:ui].info(" -- Forced UUID: #{@uuid}") if @uuid != ''
|
163
167
|
env[:ui].info(" -- Domain type: #{@domain_type}")
|
164
168
|
env[:ui].info(" -- Cpus: #{@cpus}")
|
165
169
|
@cpu_features.each do |cpu_feature|
|
@@ -189,7 +193,7 @@ module VagrantPlugins
|
|
189
193
|
env[:ui].info(" -- Boot device: #{device}")
|
190
194
|
end
|
191
195
|
|
192
|
-
|
196
|
+
unless @disks.empty?
|
193
197
|
env[:ui].info(" -- Disks: #{_disks_print(@disks)}")
|
194
198
|
end
|
195
199
|
|
@@ -201,7 +205,7 @@ module VagrantPlugins
|
|
201
205
|
env[:ui].info(msg)
|
202
206
|
end
|
203
207
|
|
204
|
-
|
208
|
+
unless @cdroms.empty?
|
205
209
|
env[:ui].info(" -- CDROMS: #{_cdroms_print(@cdroms)}")
|
206
210
|
end
|
207
211
|
|
@@ -222,7 +226,7 @@ module VagrantPlugins
|
|
222
226
|
env[:ui].info(" -- PCI passthrough: #{pci[:bus]}:#{pci[:slot]}.#{pci[:function]}")
|
223
227
|
end
|
224
228
|
|
225
|
-
|
229
|
+
unless @rng[:model].nil?
|
226
230
|
env[:ui].info(" -- RNG device model: #{@rng[:model]}")
|
227
231
|
end
|
228
232
|
|
@@ -235,6 +239,26 @@ module VagrantPlugins
|
|
235
239
|
env[:ui].info(" -- USB passthrough: #{usb_dev.join(', ')}")
|
236
240
|
end
|
237
241
|
|
242
|
+
unless @redirdevs.empty?
|
243
|
+
env[:ui].info(' -- Redirected Devices: ')
|
244
|
+
@redirdevs.each do |redirdev|
|
245
|
+
msg = " -> bus=usb, type=#{redirdev[:type]}"
|
246
|
+
env[:ui].info(msg)
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
unless @redirfilters.empty?
|
251
|
+
env[:ui].info(' -- USB Device filter for Redirected Devices: ')
|
252
|
+
@redirfilters.each do |redirfilter|
|
253
|
+
msg = " -> class=#{redirfilter[:class]}, "
|
254
|
+
msg += "vendor=#{redirfilter[:vendor]}, "
|
255
|
+
msg += "product=#{redirfilter[:product]}, "
|
256
|
+
msg += "version=#{redirfilter[:version]}, "
|
257
|
+
msg += "allow=#{redirfilter[:allow]}"
|
258
|
+
env[:ui].info(msg)
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
238
262
|
env[:ui].info(" -- Command line : #{@cmd_line}")
|
239
263
|
|
240
264
|
# Create libvirt domain.
|
@@ -242,9 +266,10 @@ module VagrantPlugins
|
|
242
266
|
# existing volume? Use domain creation from template..
|
243
267
|
begin
|
244
268
|
server = env[:machine].provider.driver.connection.servers.create(
|
245
|
-
xml: to_xml('domain')
|
269
|
+
xml: to_xml('domain')
|
270
|
+
)
|
246
271
|
rescue Fog::Errors::Error => e
|
247
|
-
raise Errors::FogCreateServerError, error_message:
|
272
|
+
raise Errors::FogCreateServerError, error_message: e.message
|
248
273
|
end
|
249
274
|
|
250
275
|
# Immediately save the ID since it is created at this point.
|
@@ -3,20 +3,19 @@ require 'log4r'
|
|
3
3
|
module VagrantPlugins
|
4
4
|
module ProviderLibvirt
|
5
5
|
module Action
|
6
|
-
|
7
6
|
# Create a snapshot of base box image. This new snapshot is just new
|
8
7
|
# cow image with backing storage pointing to base box image. Use this
|
9
8
|
# image as new domain volume.
|
10
9
|
class CreateDomainVolume
|
11
10
|
include VagrantPlugins::ProviderLibvirt::Util::ErbTemplate
|
12
11
|
|
13
|
-
def initialize(app,
|
14
|
-
@logger = Log4r::Logger.new(
|
12
|
+
def initialize(app, _env)
|
13
|
+
@logger = Log4r::Logger.new('vagrant_libvirt::action::create_domain_volume')
|
15
14
|
@app = app
|
16
15
|
end
|
17
16
|
|
18
17
|
def call(env)
|
19
|
-
env[:ui].info(I18n.t(
|
18
|
+
env[:ui].info(I18n.t('vagrant_libvirt.creating_domain_volume'))
|
20
19
|
|
21
20
|
# Get config options.
|
22
21
|
config = env[:machine].provider_config
|
@@ -26,33 +25,34 @@ module VagrantPlugins
|
|
26
25
|
|
27
26
|
# Verify the volume doesn't exist already.
|
28
27
|
domain_volume = ProviderLibvirt::Util::Collection.find_matching(
|
29
|
-
env[:machine].provider.driver.connection.volumes.all, @name
|
28
|
+
env[:machine].provider.driver.connection.volumes.all, @name
|
29
|
+
)
|
30
30
|
raise Errors::DomainVolumeExists if domain_volume
|
31
31
|
|
32
32
|
# Get path to backing image - box volume.
|
33
33
|
box_volume = ProviderLibvirt::Util::Collection.find_matching(
|
34
|
-
env[:machine].provider.driver.connection.volumes.all, env[:box_volume_name]
|
34
|
+
env[:machine].provider.driver.connection.volumes.all, env[:box_volume_name]
|
35
|
+
)
|
35
36
|
@backing_file = box_volume.path
|
36
37
|
|
37
38
|
# Virtual size of image. Take value worked out by HandleBoxImage
|
38
|
-
@capacity = env[:box_virtual_size] #G
|
39
|
+
@capacity = env[:box_virtual_size] # G
|
39
40
|
|
40
41
|
# Create new volume from xml template. Fog currently doesn't support
|
41
42
|
# volume snapshots directly.
|
42
43
|
begin
|
43
44
|
domain_volume = env[:machine].provider.driver.connection.volumes.create(
|
44
|
-
:
|
45
|
-
:
|
45
|
+
xml: to_xml('volume_snapshot'),
|
46
|
+
pool_name: config.storage_pool_name
|
47
|
+
)
|
46
48
|
rescue Fog::Errors::Error => e
|
47
49
|
raise Errors::FogDomainVolumeCreateError,
|
48
|
-
|
50
|
+
error_message: e.message
|
49
51
|
end
|
50
52
|
|
51
53
|
@app.call(env)
|
52
54
|
end
|
53
55
|
end
|
54
|
-
|
55
56
|
end
|
56
57
|
end
|
57
58
|
end
|
58
|
-
|