Commit Graph

1455 Commits

Author SHA1 Message Date
byonoy-dne
c4fcfee510
Set undefine flags to keep NVRAM (#1329)
Handle enabling and disabling of NVRAM during start domain.

This patch contains latent support for upstream PR fog-libvirt#102 to support destroy
with NVRAM enabled once that is merged.

Fixes #1027.
2022-05-06 12:43:42 +01:00
Dan Čermák
f734a89681
Replace tabs with spaces in domain_all_settings.xml (#1489)
The xml renderer stopped rendering tabs and now uses spaces instead, which made
the test fail.
2022-05-05 09:37:42 +01:00
Jamie Barber
4e515e6f21
Guest PCI address options for passthrough devices (#1481)
When assigning a pci passthrough device, the domain, bus, slot and
function parameters pertain to the host device address. Add guest_
flavours of these to allow setting the address of the device in the
guest as well.

Fixes: #1475
2022-05-04 09:11:50 +00:00
Rodolfo Olivieri
1939528d7b
Update steps in the addtional notes (#1486)
While trying to use the steps provided in the `Additional Notes for Fedora and
Similar Linux Distributions` I noticed that some of the versions referenced
there were not up-to-date, as well as a missing script call for the krb5.

Signed-off-by: Rodolfo Olivieri <rolivier@redhat.com>
2022-05-04 08:30:58 +00:00
Tim Serong
3bdb1c93e6
Use require for HandleBox, SyncedFolders, WaitForCommunicator (#1485)
Using `autoload` fairly consistently results in 'constant not defined'
errors for each of HandleBox, SyncedFolders, WaitForCommunicator
when using ruby 3.1.  Presumably there's some sort of race condition.
Explicitly using `require` for these three makes the problem go away.
It might be a bit ugly to have those `require` lines right at the
point where those symbols are used, vs. the neat `autoload` section
at the top of the file, but I'm not sure how better to structure this.
Suggestions most welcome :-)

Fixes: #1445
Signed-off-by: Tim Serong <tserong@suse.com>
2022-05-03 19:58:36 +00:00
Dan Čermák
9675167c1c
unrestrict fog-core version to ~> 2 (#1487) 2022-05-02 13:26:14 +01:00
Thomas Wouters
390b437519
Ensure provisioner runs when performing a reload (#1484)
with libvirt-vagrant >= 0.8.0 `vagrant reload` no longer executed the provisioner.
2022-04-27 17:46:54 +01:00
Darragh Bailey
e65aec6b0b
Ensure provisioning executed after networking (#1480)
Provisioning is executed on the out-call action, so it should be added
the call start before the configuration of the network interfaces is
scheduled via a guest capability as it is also executed out the out call
to allow the first part to be performed before the VM is booted and the
latter to be done after it is running.

Fixes: #1479
2022-04-20 13:13:00 +01:00
ebaklund
008e910856
Added fix for issue #1472 (#1473)
Avoid crash caused by power management suspension where fog fails to translate domain state pmsuspended.

Changed the driver.state() function so that it does not crash on undefined domain state. Just return nil :unknown instead.

Added unittests and made existing more general.

Closes #1472
2022-04-04 09:58:10 +01:00
Darragh Bailey
55a220f1c8
Pass ssh command for port forwarding using array (#1469)
Switch to the command as an array format when passing the port
forwarding ssh command to spawn to switch to execution of the ssh
process directly instead of being executed by the default shell.

Fixes: #1467
2022-03-22 07:09:18 +00:00
Darragh Bailey
39084ec86b
Fix older bundle cloning of dependencies via git (#1470)
Bundler for older ruby versions uses anonymous git to clone ruby
dependencies directly from repos. Ensure these all use https by
configuring git to replace the URL automatically.
2022-03-21 13:01:21 +00:00
Darragh Bailey
0f4a97e1dd
From docker only output vagrant to stdout (#1464)
When running the docker container, only output what is returned by
vagrant to stdout, and redirect everything else to stderr to facilitate
anything parsing stdout.

Fixes: #1463
2022-03-12 17:41:27 +00:00
Alex
1b8a70163b
Update README.md (#1458) 2022-03-03 16:45:46 +00:00
Darragh Bailey
192a9e00df
Allow serials to be disabled (#1453)
Facilitate disabling serial devices by allowing for the configuration to
explicitly set serials to an empty array and ignoring adding the default
serial if this is the case.
2022-02-21 16:12:03 +00:00
Darragh Bailey
23ddab1dcf
Move autoloading to start of module (#1451)
Autoloading interaction with threads can cause issues. Follow the best
practice of performing the autoloading early in the hope that this
avoids the issue with a symbol not being fully defined before
another thread attempts to use the symbol in the same file.

Fixes: #1445
2022-02-18 19:21:26 +00:00
Andres Romanos
d11f0baca4
Update README.md (#1441)
Fixed USB Device Passthrough example.

It should use libvirt.usb instead of libvirt.usbdev
2022-02-02 10:19:45 +00:00
Ruben Kerkhof
ef0686da4a
Fix ipv6-only routed networks (#1440)
Trying to create a routed network with just ipv6 fails with:
Error occurred while creating new network: Call to virNetworkDefineXML failed: XML error: Missing required address attribute in network 'test'.

Since an ipv4 address should be optional for this scenario, make it so.

This makes the following configuration work:

  config.vm.network :private_network,
    :libvirt__network_name => "test",
    :libvirt__forward_mode => "route",
    :libvirt__dhcp_enabled => false,
    :libvirt__guest_ipv6 => "yes",
    :libvirt__ipv6_address => "fc00::",
    :libvirt__ipv6_prefix => "64"
2022-01-30 19:48:40 +00:00
Ruben Kerkhof
b3cf54a946
Fix a few typos in unit test (#1437) 2022-01-17 14:45:24 +00:00
Ruben Kerkhof
8eeceb3646
Fix static ipv6 ips on private networks (#1436)
When the :ip is ipv6, set the 'static6' type, so that we select the
correct _static6.erb template to configure the interface in the guest.

With the following configuration, ipv6 works out of the box on CentOS 8:

  (1..2).each do |i|
    config.vm.define "node#{i}" do |node|
      node.vm.hostname = "node#{i}"

      node.vm.network :private_network,
        :ip => "fc00::#{i+9}",
        :netmask => "64",
        :libvirt__dhcp_enabled => false,
        :libvirt__forward_mode => "veryisolated",
        :libvirt__network_name => "test"
    end
  end

Fixes: #914
2022-01-17 14:38:19 +00:00
Ruben Kerkhof
a9e0fefa1d
Change the default amount of video ram to 16MB (#1435)
Libvirt did already change the current 9216kb
to 16384kb when starting a domain so in practice this is a no-op.

The libvirt default was changed in 2014 in 81ba2298b2
2022-01-17 14:10:23 +00:00
Ruben Kerkhof
6ba7dcf178
Make disabling and configuring memballoon possible (#1434)
The memballoon settings didn't have any effect as the variables read in
the template were not defined
2022-01-17 13:20:25 +00:00
blame2020
a1f0b74e92
Fix snippets about podman in README.md (#1427) 2022-01-05 04:10:06 +00:00
Stefano Sasso
76544f0412
Add management_network_keep Option (#1425)
Starting from version 0.7.0 (https://newreleases.io/project/github/vagrant-libvirt/vagrant-libvirt/release/0.7.0), always_destroy is set to true by default for any network.

However, in certain cases, it would be useful to keep the management network, especially when it has been already configured (externally) with Static IP leases.

This option allows to change the always_destroy behaviour for the management network.
2021-12-21 12:45:33 +00:00
Darragh Bailey
15b110da49
Reduce patching for distro default session use (#1424)
Reduce the patching needed should a distro wish to switch the default
from using the system connection by default to using a session
connection by default.

Should now only require patching the default value and a single test
checking the defaults.
2021-12-11 14:58:59 +00:00
Darragh Bailey
62b98dea0b
Cpu mode host-passthrough allows topology and features (#1423)
When cpu mode was set to host-passthrough the template would skip
setting all other settings for the cpu, while it appears from the
documentation that it supports use of feature elements, and testing
confirms that it also supports the topology element.

https://libvirt.org/formatdomain.html#cpu-model-and-topology

Fixes: #975
2021-12-08 19:48:31 +00:00
Darragh Bailey
87ec540994
Rework prevent destroy if provider completed (#1422)
Adjust handling to use a method reference instead of attempting to
update the env value as that only appears to be available to actions
further down the chain and any changes are not visible during recovery
when exercised for real.

By passing a function reference can limit the actions that can be taken
to only allow a single call that will set a flag internal to the clean
up action.

Fixes: #1328
2021-12-04 21:03:53 +00:00
Darragh Bailey
1f9fd6dc2e
Ensure domain removal/halt limited to provider error (#1420)
Switch to dedicated actions to trigger destroy/halt via the recovery
mechanism if the VM bring up has failed to complete the bring up of the
machine.

Fixes: #1328
2021-12-04 16:55:50 +00:00
Darragh Bailey
380b3c2096
Make simplecov a source development dependency only (#1418)
Remove the need for downstream packaging to either require or patch
out simplecov from existing files by making it an optional development
dependency.
2021-12-03 12:50:02 +00:00
Darragh Bailey
27a541bba9
Validate partial mocks (#1417)
Switch to using explicit references to objects to be partially mocked
and remove the need to resolve the string constants as this will catch
more instances of calls to invalid or missing methods.

Rework how the vm is added to the machine for one of the tests as it is
not a method and instead is provided via internal state being exposed
with a helper.
2021-12-03 11:28:21 +00:00
Dan Čermák
5914f0cffd
Allow the connection.client.libversion call (#1416)
When the tests are executed and rsync is not installed on the machine executing
the tests, then vagrant-libvirt will automatically fallback to virtiofs or
9p. Both of these perform the following call to check the libvirt version:

libvirt_version = machine.provider.driver.connection.client.libversion

However, this mock was not setup and thus those tests would fail.

This fixes https://github.com/vagrant-libvirt/vagrant-libvirt/issues/1415
2021-12-03 08:11:06 +00:00
Dan Čermák
97e534b1e7
Double the UDPSocket in cases where there's no network (#1414)
In PrepareNFSSettings.read_host_ip we use a UDPSocket to connect to the host in
question. However, this fails completely if the system executing the tests has
no network adapters enable, like builders in OBS or Koji. If we double the calls
to this, then we no longer face that issue.
2021-12-02 16:16:44 +00:00
Nicolas LE NEZET
e741871fc4
Make destroy network locale independent (#1413)
Make destroy network exceptio rely on e.libvirt_code instead of e.message
2021-12-02 11:33:20 +00:00
andrzej maczuga
2d53c3a850
Support libvirt built-in TFTP server (#1412)
Adds support for libvirt TFTP server, for netboot environments.

(vide: https://libvirt.org/formatnetwork.html#elementsAddress)
2021-11-30 10:11:52 +00:00
Guillaume Penaud
9c18a32952 Allow usage of public/private networks as management networks
This requires that the qemu_use_agent is enabled and at least one
network is defined in the Vagrantfile that is either private or public.

The restriction that qemu_use_agent need be enabled may be removed
subsequently for networks using a static IP address. That should be
considered a subsequent problem.

Fixes: #1204
Fixes: #1124
Fixes: #1057
2021-11-29 17:32:25 +00:00
Darragh Bailey
5daecc6ee3
Emit disk bus for root and additional disks (#1001)
Include bus in disk information outputted.
2021-11-29 14:06:29 +00:00
Haggai Eran
a10351507e
Pass memAccess attribute to <numa> memory backing definitions (#1049)
This can be used to set up shared memory backing e.g. for vhost-user.
2021-11-29 13:44:42 +00:00
Darragh Bailey
d87fabe777
Remove duplicate actions for up and start (#1410)
Consolidate actions around starting the VM into a single place, and
re-order the call to the CreateNetworkInterfaces to allow it to be used
during initial bring up without needing to duplicate the remaining start
actions in the up process.
2021-11-29 13:27:57 +00:00
Thomas
0c7db1a766
Add route option to networking config (#1086)
Make it possible for guest specific templates to render routes.

Pass through the route information.
2021-11-29 13:13:32 +00:00
Darragh Bailey
cf3b81bfc5
Inject default qemu_agent allowing for explicit disable (#1408)
Facilitate the injection of a default channel when qemu_agent is set to
true to make enabling it's use a simple `qemu_agent = true` for most
cases.

Where custom values are needed, they can be provided and the code will
skip adding a corresponding entry, or if necessary the user can add an
entry and mark it disabled similar to how synced folders work.

Closes: #1341
2021-11-26 18:12:21 +00:00
Darragh Bailey
2908888934
Ensure sessions trigger a listing of the network devices (#1409)
List network devices to trigger a side effect to ensure the
qemu-bridge-helper will run correctly for users of the modular daemons.

It is likely that this should be done for sessions to support resolving
the correct virtual bridge device anyway, however that is more involved
and maybe superseded by not needing a network interface should qemu
agent be able to act as a communicator. Or to perform port forwarding
using qemuargs to allow SSH access directly in.

Fixes: #1258
2021-11-25 10:30:37 +00:00
Darragh Bailey
f221daaaaf
Tidy up XML generated (#1407)
To make it easier to see when the XML generated has deviated from
expected, tidy up the emitted XML to use a more consistent formatting
that would be inline with what would be expected to be output by virsh
directly.
2021-11-22 17:29:11 +00:00
Darragh Bailey
d752138d10
Remove duplicate gemspec (#1406)
Fix warning reported by bundler of duplicate gemspec
2021-11-22 10:52:24 +00:00
Darragh Bailey
91401a6559
Restore handling of disk_device domain setting (#1365)
Re-enable handling of the disk_device domain volume setting to ensure it
can be overridden from the default of vda to a value chosen.

Provide a disk resolver to resolve devices after the box has been downloaded
so that initial devices can be correctly allocated and avoid conflicts with
additional disks added that would otherwise get assigned the same device.

Removes hack for destroy domain when more than one disk, as now devices
in the config are only present if provided by the configuration.

Fixes: #1353
2021-11-22 10:02:18 +00:00
Darragh Bailey
f8eff3d7a9
Rework destroy domain for multiple box volumes (#1404)
When destroying domains were there are multiple box volumes to be
removed, need to perform a series of checks to establish that the
correct volumes are being removed.

- check if device aliases are in use
- process the box volume removals first
- detect if disks attached outside of vagrant-libvirt
- prefer aliases for additional disks
- avoid use of devices for multiple disks to detect as currently
  assigned incorrectly.
- fallback to detecting number of box volumes to determine
  point at which additional disks start

Attempts to flag a number of cases where behaviour might be incorrect to
help users spot when vagrant-libvirt may accidentally remove something
it shouldn't.
2021-11-21 11:52:45 +00:00
Brian Cole
5eac9de006
vagrant 2.2.19 (#1399)
https://github.com/hashicorp/vagrant/blob/main/CHANGELOG.md#2219-november-5-2021
was released recently; Update the docker image to consume.
2021-11-16 13:01:07 +00:00
Darragh Bailey
32d1805583
Pin dependency to allow tests to run on older version (#1400)
Upstream transitive dependency has dropped support for older rubies
without updating the minimum ruby version required.

Pin the max version of the dependency for older rubies to allow the
tests to run until the upstream project resolves.
2021-11-16 12:53:16 +00:00
Darragh Bailey
bb267e3910
Derive system URI from default URI (#1398)
To facilitate using session on a remote instance, ensure the system_uri
configuration attribute is by default derived from the default uri
provided or constructed based on other settings, so that it contains any
host and transport settings.
2021-11-08 22:54:45 +00:00
Darragh Bailey
e917a2dbda
Switch back to read-only system connection (#1397)
With the rework to use the default connection to retrieve the domain to
allow running of the qemu agent, no longer necessary to use a read
write system connection, and can revert to a read-only connection that
requires less privileges.

This should remove an occurrence of polkit requesting a password when
bringing a VM up using a session connection.

Fixes: #1342
2021-11-08 22:14:47 +00:00
Darragh Bailey
df55c78010
Reorder qemu agent usage for use with sessions (#1396)
Adjust the order of checks around use of qemu sessions to allow use of
the agent as a priority when enabled, which should remove the need to
retrieve the address from the system connection when enabled.

Additionally adjust the call to the agent to ensure it uses the default
connection to retrieve the correct domain, rather than forcing the
system connection, which will fail to find the domain if it was created
via a user session.

Add tests that validate most of this behaviour, as well as resulting in
some minor fixes around downcasing the mac address for comparisons, and
also using instance mocks with rspec instead of pure doubles to help
catch false positives where mocks are allowing calls that done exist.

Related: #1342
2021-11-08 11:31:04 +00:00
Darragh Bailey
caaf7754c4
Add gem version badge (#1395) 2021-11-04 12:48:37 +00:00