Commit Graph

749 Commits

Author SHA1 Message Date
Darragh Bailey
9f8912d7aa Bugfix some stray machine args after tidy up (#1227)
Clean up the remaining references to the old functions after the
wait-till-up networking code tidy up.
2021-03-17 18:16:06 +00:00
Darragh Bailey
bbbcdaa44b Only set ssh connection params if transport is ssh (#1224)
Skip setting various additional connection params if the transport for
the libvirt connection is not ssh based as these will be ignored and may
cause confusion as to why they do not apply.
2021-03-17 15:36:09 +00:00
Darragh Bailey
4ee40728b3 Make LIBVIRT_DEFAULT_URI a fackball mechanism (#1223)
Switch to only picking up LIBVIRT_DEFAULT_URI if no settings that could
affect the uri have been explicitly set. Some of these may not actually
appear in the URI depending on what is actually set or not set, however
it is important that should only use the env variable if the user has
not explicitly configured options relevant and instead allow them to
configure as needed.
2021-03-17 14:41:14 +00:00
Agorgianitis Loukas
b15489c557 Fix remote libvirt functionality through LIBVIRT_DEFAULT_URI (#1218)
One can now set `LIBVIRT_DEFAULT_URI` to something like 
`qemu+ssh://user@beefy/system` along with `connect_via_ssh` option to 
true and use vagrant on remote machines, without needing to 
duplicate/hardcode remote server username and identity key inside the 
Vagrantfile.

Partial Fixes: #1217
2021-03-17 12:37:16 +00:00
Darragh Bailey
ba4235add9 Change proxy_command to use embedded OpenSSH functionality instead of (#1222)
Solves vagrant not detecting end of ssh connection when a proxy is
used, described in #921

Allows ssh argument population to append arguments only when
respective values are not nil, avoiding creation of invalid
proxy_command when ssh-agent or ssh config based connections are used
2021-03-17 12:19:02 +00:00
Darragh Bailey
c8c590f586 Consolidate ip address retreival to single method (#1199)
Refactor WaitTillUp action to make use of the domain IP address
retrieval code in the driver to ensure a single place to maintain.

Remove references to machine option for driver where already should be
available as an instance variable.
2021-03-13 19:55:17 +00:00
Wong Hoi Sing Edison
978e92eac5 Make a virtual machine disk sparse with virt-sparsify (#1195)
After working with `virt-sysprep`, it is a good idea to make the disk image
sparse with `virt-sparsify`. This reduces the size of the resulting box.

See https://libguestfs.org/virt-sparsify.1.html

Signed-off-by: Wong Hoi Sing Edison <hswong3i@pantarei-design.com>
2021-01-07 10:10:31 +00:00
David Scaife
5471caabe5 Add disk driver options with minor refactor (#1000)
Adds disk driver options: io, copy_on_read, discard and detect_zeroes
for both the primary vm disk and additional disks.

Minor refactor of existing volume_cache to deprecate and replace with a
single call to disk_driver that contains all of the options. Usage of
the volume_cache option will now result in a message to ui that it has
been replaced, as well as a warning that it is ignored if disk_driveris
set.

The old option volume_cache is only used if disk_driver is not present
(even if :cache is not set - in that case, the hypervisor default is
always used).

Resolves #998
2020-12-17 11:03:47 +00:00
zzambers
d0787c803d Add support for clock setup (#1047)
This adds support for setting clock offset and timers.

See https://libvirt.org/formatdomain.html#elementsTime for more info.
2020-12-16 19:19:24 +00:00
Wong Hoi Sing Edison
395ab7141e Fix Broken /etc/machine-id by vagrant package due to virt-sysprep's customize operation (#1184)
virt-sysprep by default enable the `customize` operation, which will 
regenerate the `/etc/machine-id` by the end of the operation. This 
cause all newly created VMs by `vagrant up` coming with idential 
`/etc/machine-id` and so receive conflicted IP from DHCP.

This PR disable `customize` as per 
https://github.com/vagrant-libvirt/vagrant-libvirt/issues/851#issuecomment-520799720
recommendation.

Fixes #851
2020-12-16 12:45:07 +00:00
Edmund Rhudy
a11750cc3b Add support for configuring memballoon-related settings (#1083)
Allow configuration of various memballoon-related settings. It was 
discovered that it may be needed to be able to control the memballoon's 
PCI slot/bus location in order to prevent it from conflicting with 
other explicit PCI location assignments. For example when configuring 
the management network NIC to go to slot 0x05, libvirt would try to put 
the memballoon there as well and resulting in a fatal error.
2020-12-15 17:40:05 +00:00
Jason Tarasovic
1251189145 Add ability to use emulated tpm (#1166)
Qemu has supported tpm 2 and the ability to start swtpm. Additionally 
it expands the tests for the tpm configuration to ensure that only when 
the options cause a change to the domain XML will the domain be updated 
on a subsequent start. This change just allows passing through the 
necessary config.

Vagrant.configure("2") do |config|
  config.vm.provider :libvirt do |libvirt|
    libvirt.tpm_model = "tpm-crb"
    libvirt.tpm_type = "emulator"
    libvirt.tpm_version = "2.0"
  end
end

closes #965
2020-12-15 12:43:46 +00:00
Darragh Bailey
20067be0d2 Support building from git-archive tarballs (#1187)
Adds support for exposing the correct version via export-subst for
git-archive constructed tarballs to make it easier to consume directly
from source.

Will check in the following order of preference:
 - version file
 - format string containing "Tag:"
 - clone remote to describe commit
2020-12-14 18:49:50 +00:00
Darragh Bailey
f51192e80b Provide uid/gid for additional volumes qemu:///session (#1170)
When using qemu:///session, it's necessary to ensure the correct
user/group is passed in when creating additional volume storage as
otherwise the default is to attempt to chown/chgrp it to 0:0 which will
fail.

With this in place and recent changes around uri/qemu_use_session,
remove the checks guarding retrieving the storage pool as it is also
possible for it to be created as expected for the session.

Update create domain tests to check for the correct settings such as
storage path and user/group id's passed to the volume create call for
the additional disks.

Fixes: #986
2020-12-05 15:49:25 +00:00
Darragh Bailey
21f7a796ff Reduce start domain unnecessary domain redefines (#1178)
Various checks in the start domain action were accidentally causing a
redefine right after initial create. Update to provide debug output when
the domain needs to be changed to allow capture of the redefines
occurring in the future and to make it easy for the tests to pick up
where the redefine was triggered by setting an expectation on the log
output.

Include a small fix to avoid running strip on what might be a nil object
returned for elements without any text attributes.

Fix a bug where changes to tpm settings made to the config after an
initial domain creation where there was previously no tpm defined, would
be ignored.

Adds a logger double and updates other tests that trigger log calls.

should fix #1176
2020-12-05 15:24:42 +00:00
Frantisek Sumsal
308ead403e Support the newly-introduced --no-tty Vagrant's option (#1120)
hashicorp/vagrant#11465 introduced a new option --no-tty which silences
progress bars so they don't spam logs when Vagrant is used
non-interactively. First Vagrant version with this change is v2.2.8.

However, existing code needs to be slightly updated to cooperate with
the new option correctly, otherwise the progress bars spam the logs with
empty lines/warnings instead of remaining silent.

Fixes: #1106
2020-11-16 15:32:47 +00:00
Michael Ablassmeier
027910d236 Support setting ovs interface id (#1156)
Support setting the ovs interfaceid parameter

Fixes: #1155
2020-11-16 15:11:59 +00:00
Darragh Bailey
71503ed62e Rudimentary start domain action spec (#1167)
Add default domain start spec test and fix bug triggered by whitespace
mismatch in string comparison that would trigger unexpected domain
undefine and recreate.
2020-11-15 23:28:43 +00:00
Darragh Bailey
966ef2a534 Tag version from git tag (#1161)
Switch to looking up the version from a file with a fall back to get
it directly from git tags if the file isn't available.

The version file is automatically generated by a task of building of the
gem and included in the package release to prevent reading from git.

Should allow the release process to be automated from pushing of a git
tag.
2020-10-23 18:18:52 +01:00
Michael Ablassmeier
70bb392241 Support separate storage pools for additional disks (#1130)
Add support for a pool setting for additional disks, example:

Vagrant.configure("2") do |config|
  config.vm.box = "generic/centos8"
    config.vm.provider :libvirt do |domain|
        domain.storage :file, :size => '20G', :pool=>'default'
        domain.snapshot_pool_name='cache'
    end
end

this allows to place the virtual machines snapshot in the "cache" pool,
while additional disks are created in the "default" storage pool.
2020-10-23 14:39:14 +01:00
Darragh Bailey
06e31d3918 Add rudimentary create domain spec test (#1158)
Provide a simple create domain test that uncovered a bug with an
exception in addition to fixing the tests to avoid unnecessary output
when the code sends messages via the UI.
2020-10-23 14:31:29 +01:00
Darragh Bailey
2f827fa5a3 Update version for release (#1151) 2020-10-03 21:14:00 +01:00
Vít Ondruch
0ecb9cc94f Use Vagrant::Util::TemplateRenderer instead of Erubis. (#1144)
Erubis is dead upstream, therefore it is good idea to avoid its usage.

Also, this allows to drop explicit dependency on Erubis, which is not
specified anywhere and may cause issues when Vagrant changes its
renderer.

Fixes #1142.
2020-10-03 21:04:59 +01:00
Darragh Bailey
d7debb68c6 Merge pull request #1123 from cvoltz/wwn
Add WWN support
2020-08-16 19:49:15 +01:00
Dusty Mabe
41bcae26e4 config: allow for setting URI from environment
Users are allowed to set a LIBVIRT_DEFAULT_URI environment variable that
controls tools (i.e. virsh, virt-install, etc) that communicate with
libvirt. Let's allow for that mechanism to be used here.
2020-08-16 16:37:57 +01:00
Darragh Bailey
d16bdcc1dc Add @uri config tests and minor refactor (#1139)
Test settings modifying the `@uri` and `@qemu_use_session` variables to make
it easier to update and perform an initial minor refactor to reduce some
of the code currently in use to set `@uri`.
2020-08-16 16:27:27 +01:00
Rui Lopes
19cd1d5629 let the user set the domain title and description 2020-08-12 22:06:05 +01:00
Hans-Christoph Steiner
8b712b7715 remove redundant setting of default volume/backingStore mode
According to the docs, for volumes and backingStores: "The mode defaults to
0600 when not provided.  https://libvirt.org/formatstorage.html

Removing this setting here allows the pool configuration to set the default
mode.
2020-07-22 13:45:38 +02:00
Christopher Voltz
437fc3f3b0 Add WWN support
Add the disk attribute wwn to set the WWN of a disk drive.

Signed-off-by: christopher@voltz.us
2020-06-14 20:00:15 -05:00
Zak B. Elep
55abd327eb Add public_address provider capability
Used by vagrant-share plugin to determine local guest address for
forwarding via ngrok.
2020-06-04 17:07:40 +08:00
Zak B. Elep
9e35ec2b05 action/forward_ports.rb: Fix SSH tunnel spawning and PID tracking
- Explicitly disable any SSH multiplexing here so PID tracking of
  tunnels works correctly.

- Using `exec ssh` in the spawn forces Ruby to use a subshell (as exec
  is a shell builtin) instead of spawning the ssh process directly, which
  results in getting the wrong (and dead, as the exec replaces the
  subshell) PID to track and clean up later.

- Run the ssh tunnel command on its own process group, essentially
  daemonizing it and keeping its PID intact even when `vagrant up` command
  is run on shell/consoles without an explicit TTY, such as Emacs Eshell.
2020-05-28 17:26:50 +08:00
Darragh Bailey
aa7ea05540 Bugfix release 0.1.2 (#1112)
Skipping 0.1.1 as accidentally tagged before bumping version
2020-05-12 10:05:32 +01:00
Philippe Vanhaesendonck
4472654ba0 prune_nfs_exports: create Logger instance.
Fix #1110

Signed-off-by: Philippe Vanhaesendonck <philippe.vanhaesendonck@e-bulles.be>
2020-05-12 08:33:39 +02:00
Julio Lajara
f00bc0eaae Add qemu commandline environment variable support. (#961)
Make it easier to tweak some qemu options by allowing passthru of
command line environment variables.

- Also cleans up weird variable indirection used for qemu commandline args
  variable through `qargs` in various constructors.
- Addresses some functionality discussed in #776.
2020-05-10 14:37:31 +01:00
ryanfitzsimon
a83900f1ae Download images with libvirt instead of copying (#928)
Packaging an existing vagrant environment relied on copying the backing
image. Users may not have permission to read this file despite being
able to interact with it through libvirt.

Use ruby-libvirt to download the image instead so any user with libvirt
access can run the package command.
2020-05-10 13:13:56 +01:00
Quinten Johnson
7e966febbd Allow setting of PCI domain (#927) 2020-05-10 11:40:29 +01:00
Quinten Johnson
618c8b251d Allow specification of domain shares (#925)
Weighted priority of the domain relative to others on the host.
2020-05-10 11:24:06 +01:00
Quinten Johnson
d9c5f63410 Allow specification of numa nodeset (#924)
This specifies the physical numa nodes on which the virtual memory can be
placed.
2020-05-10 10:52:46 +01:00
Quinten Johnson
60ef4b03d1 Allow specification of cpuset (#923)
Allows the pinning of vcpus to physical cpus.
2020-04-29 19:08:01 +01:00
Darragh Bailey
47ded9f52e Make sure to require util/nfs for include (#1103) 2020-04-29 17:03:47 +01:00
Paul Elliott
bde81a15a2 Remove NFS exports on domain destroy (#781)
Uncomment NFS prune action

If the user has not configured NFS for any of the synced folders, then
it is likely they are not expecting to be asked for a sudo password on
destroy. Move the test for using NFS to a common module and include in
both the preparing and pruning actions.

Co-authored-by: Darragh Bailey <daragh.bailey@gmail.com>
2020-04-28 16:22:34 +01:00
Chris Crebolder
34d933deea Check for empty result from fog-libvirt volumes
The fog-libvirt volumes filter behaves differently than the others in
that it returns an empty volume object if nothing is found. This has the
potential to change in the future so guard against an empty result as
well by checking if the assigned first element is nil.
2020-04-24 21:10:29 +01:00
Chris Crebolder
86aac4ce9c Use fog-libvirt filters when querying libvirt host
This commit replaces the pattern where the metadata for all volumes,
servers, or pools was downloaded and then searched. Instead a filter
argument is passed to the connection and only the metadata for the named
resource is returned, if it exists. This results in significant speed
increases for libvirt hosts that are offsite or have many volumes.
2020-04-24 21:10:29 +01:00
Michael Ablassmeier
304a2a055c call stale_volume_remove only if configured libvirt pool exists (#1095)
Move message about removing stale volume unless there is one to be
removed.
2020-04-24 19:11:19 +01:00
Darragh Bailey
5e1445f7df Prep for releasing 0.1.0 (#1093)
Start keeping .1 for bugfixes and make it easier for people to pin locally to accept those without picking up major changes
2020-04-23 18:07:09 +01:00
Darragh Bailey
8cea27fd3e Defer to Warden to call recover (#984)
Warden will call the recover method when env[:interrupted] is set, so
just return instead and let it walk the stack to perform cleanup. This
ensures that during the WaitTillUp action that the user setting to
disable destroy_on_error is respected should the exception occur during
looking for the IP address or SSH connection.
2020-04-22 09:13:18 +01:00
Darragh Bailey
30ccf3a0ba Merge pull request #1096 from abbbi/handle_box_image
Fixes issue introduced with #1030
2020-04-21 17:58:28 +01:00
Michael Ablassmeier
59ef20812b fix handle_box_image.rb:89: syntax error 2020-04-21 13:49:29 +02:00
Michael Ablassmeier
d39a9a302a Allow setting of Sysprep options and multiple hyperv features (#1089)
Allow setting of multiple hyperv features and support for virt-sysprep options

Fixes #1039 and #1077
2020-04-21 11:37:03 +01:00
Darragh Bailey
4598cfc280 Merge pull request #974 from electrofelix/match-storage-pool-by-default
Default to storage pool if snapshot pool not defined
2020-03-27 18:34:33 +00:00