It fixes this exception while removing a VM:
Traceback (most recent call last):
File "virt-manager/virtManager/details.py", line 1438, in refresh_vm_state
self.change_run_text(vm.hasSavedImage())
File "virt-manager/virtManager/domain.py", line 1238, in hasSavedImage
return self._backend.hasManagedSaveImage(0)
File "/usr/local/lib/python2.7/site-packages/libvirt.py", line 852, in hasManagedSaveImage
if ret == -1: raise libvirtError ('virDomainHasManagedSaveImage() failed', dom=self)
libvirt.libvirtError: Domain not found: no domain with matching uuid
'7c3eebec-9b22-48ea-b9a2-3341840d0476' (test)
Traceback (most recent call last):
File "virt-manager/virtManager/manager.py", line 885, in vm_status_changed
self.vm_selected()
File "virt-manager/virtManager/manager.py", line 1009, in vm_selected
self.change_run_text(vm.hasSavedImage())
File "virt-manager/virtManager/domain.py", line 1238, in hasSavedImage
return self._backend.hasManagedSaveImage(0)
File "/usr/local/lib/python2.7/site-packages/libvirt.py", line 852, in hasManagedSaveImage
if ret == -1: raise libvirtError ('virDomainHasManagedSaveImage() failed', dom=self)
libvirt.libvirtError: Domain not found: no domain with matching uuid
'7c3eebec-9b22-48ea-b9a2-3341840d0476' (test)
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This adds initial UI for managing snapshots: list, run/revert, delete,
add, and redefining (for changing <description>) supported, but currently
only for internal snapshots. The UI is mostly in its final form except for
some bells and whistles.
The real remaining question is what do we want to advertise and support.
Internal (qcow2) snapshots are by far the simplest to manage, very
mature, and already have the semantics we want.
However most recent libvirt and qemu work has been to facilitate
external snapshots, which are more extensible and can be performed
live, and with qemu-ga coordination for extra safety. However
they make things much harder for virt-manager at the moment.
Until we have a plan, this work should be considered experimental
and not be relied upon.
This simple patch fixes three issues:
1) We used only one list of storage formats. However, we are able to
use some formats which we cannot create. This patch adds a list
called 'no_create_formats' and moves such formats (currently only
one) into it and uses new parameter 'create' which describes
whether such formats should be removed or not.
2) When creating new storage with the above fixed, we need to set the
combobox's text to "" in order not to change it to "raw". This
was already done in reset_state(), but we need it also when
toggle_storage_select() happens and it doesn't hurt in
set_initial_state(), so I abstracted the implementation into
populate_disk_format_combo().
3) It's a bit unrelated, but when bus of a domain disk gets changed
(in details.py), the address was not cleaned up properly ('target'
attribute was still kept), so I fixed up the VirtualDeviceAddress
as well.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=907289
Some ARM bits we are about to add would substantially complicate the
current setup, so move all the logic into guest.py where we can be
more flexible. I think this is closer to what libosinfo will give us
as well.
Some callbacks could try to access a domain that was just deleted and
not accessible anymore. Detect these cases and don't propagate the
exception.
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
When a new volume is created for a storage, automatically select it;
most likely it is what the user will choose to use.
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
(crobinso: util is gone now, replace with uihelpers)
It fixes this error:
Traceback (most recent call last):
File "virt-manager/virtManager/host.py", line 973, in copy_vol_path
clipboard.set_text(target_path)
File "/usr/lib/python2.7/site-packages/gi/types.py", line 113, in function
return info.invoke(*args, **kwargs)
TypeError: set_text() takes exactly 3 arguments (2 given)
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
It fixes this error:
Traceback (most recent call last):
File "virt-manager/virtManager/storagebrowse.py", line 271, in pool_selected
pool = self.current_pool()
File "virt-manager/virtManager/storagebrowse.py", line 238, in current_pool
return self.conn.get_pool(row[0])
File "virt-manager/virtManager/connection.py", line 645, in get_pool
return self.pools[uuid]
KeyError: 'bd9fd5ec-a35c-d84a-b9b2-2aca98f733c3'
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Set the connection used by vmmCreateVolume everytime the window is made
visible. This fixes a case where volumes could be added to the wrong
pool if the same vmmCreateVolume window was already used on a different
connection.
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
The commit b044dd renamed vmmStoragePool.uuid to vmmStoragePool._uuid,
causing this error:
Traceback (most recent call last):
File "virtManager/storagebrowse.py", line 280, in refresh_current_pool
self.refresh_storage_pool(None, cp.get_uuid())
File "virtManager/storagebrowse.py", line 243, in refresh_storage_pool
if curpool.uuid != uuid:
AttributeError: 'vmmStoragePool' object has no attribute 'uuid'
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
_close_serial_tab triggers the switch-page event and that can provoke a
refresh of the window. This causes an error everytime the details window
is pointing to a domain that was just deleted.
Solves: https://bugzilla.redhat.com/show_bug.cgi?id=985291
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
In case of connection failure, the user can either maintain the connection
or modify it.
Split up `add_connection_to_ui' into `make_conn' and `register_conn'
to handle separately the object creation and its registration in the
list of connections (ui and conf).
Solves: https://bugzilla.redhat.com/show_bug.cgi?id=617386
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Now when a password is used a check box must be explicitely selected.
This enable the possibility to set an empty password "".
Solves: https://bugzilla.redhat.com/show_bug.cgi?id=749718
Signed-off-by: Giuseppe Scrivano <gscrivano@gnu.org>
(crobinso: fix minor pylint violation)
We separate all the provisioning bits to diskbackend.py. VirtualDisk
users now need to explicitly opt in to storage creation by using
set_create_storage().
validation is no longer done automatically, users must call the
validation() command.
__init__ drops all extra parameters.
This will eventually get us to a point where we can unify the manual
XML building and XML parsing machinery, and get consistent validation
behavior between devices.
- Make sure to set menu item to unsensitive when console closes
- Avoid dep on latest spice-gtk git for channel_type_from_string
- Create usbwidget every time it's requested, like virt-viewer does
- Minor style fixes
It's kind of needy to be doing a pool.refresh every 3 seconds, and really
I'm fine with telling people they have to close and reopen the wizard to
get up2date host size reporting.
These calls save us a few API lookups, but are not supported by all
libvirt versions.
Since these bits were getting quite large, move them all to a separate
pollhelpers file.
However listAllInterfaces is returning an empty list for now, so we
disable the check: https://bugzilla.redhat.com/show_bug.cgi?id=982014
The goal here is to reduce the amount of tick() polling that we do by default.
For things like pools, networks, and interfaces, the constant polling is
not very helpful and causes CPU churn and slowness for remote connections.
Switch to a more on demand style. Pages that want new information for
these objects now request a priority tick that only refreshes the info
we want.
This isn't perfect, but neither was the previous solution in the face of
things like XML updates behind our back. The real solution here is libvirt
event support across the board.
Since we might not poll stats info until a decent amount of time after
this timestamp, it messes up VM stats reporting.
Our usage still isn't correct because we use a later timestamp for
calculating total host usage. We could fix it by averaging out the
timestamp of each VM but I don't care that much at the moment.
This is a step towards supporting listAll*() API and domain events.
We still proxy these signals through vmmConnection so that we don't
need to rework the dependent code yet.
This base connection object will be used to simplify the API in various
places, reduce libvirt API calls, and better share code between virtinst
and virt-manager. For now it just centralizes connection opening.
This also exposed various places where our handling for older libvirt
was busted, so raise our minimum host version to 0.6.0, the first
version that supports threaded client requests.
Add "Redirect USB device" option in console viewer. Initialize and
embed UsbDeviceWidget object from SpiceClientGtk into a dialog to
let user choose available USB devices for redirection.
Throw an error message if USB connection failed.
Auto-redirection is enable by default.
There is race between creating usbredir channel and calling
has_usb_redirection() when initializing spice session like
happening on virt-viwer. So adding a new signal handler
on_details_menu_virtual_manager_activate() to recheck the
status of usbredir channel, set "Redirect USB device" option
sensitive if it is availiable.
Previously one could set the icon field of a tree model to None, but
with Gtk3 and older versions of pygobject3 this would fail.
Use can_set_row_none to test for this condition and work around it.
The previous traceback was:
Traceback (most recent call last):
File "/home/rjones/d/virt-manager/virtManager/manager.py", line 981, in vm_inspection_changed
self.get_inspection_icon_pixbuf(vm, 16, 16)
File "/usr/lib64/python2.7/site-packages/gi/overrides/Gtk.py", line 1152, in __setitem__
self.model.set_value(self.iter, key, value)
File "/usr/lib64/python2.7/site-packages/gi/overrides/Gtk.py", line 1298, in set_value
Gtk.TreeStore.set_value(self, treeiter, column, value)
File "/usr/lib64/python2.7/site-packages/gi/types.py", line 47, in function
return info.invoke(*args, **kwargs)
TypeError: Argument 3 does not allow None as a value
This is a hack. Should libvirt have a way to mark these VMs?
Note you'll only come across this problem if you run virt-manager as
root with libguestfs >= 1.20 on Fedora >= 18 (libguestfs using libvirt).
Add "Select USB devices to redirect" option in console viewer
Initialize and embed UsbDeviceWidget object from SpiceClientGtk into
a dialog to let use choose available USB devices for redirection.
Throw an error message if USB connection failed.
When Virtio SCSI disk was added to machine with default-model SCSI
controller, the new Virtio SCSI controller had the same index as the
default one (so the domain wouldn't start or with newer libvirt even
define).
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=950330
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Our use of nested mainloops is still kinda wonky and a proper solution
will take some decent effort. Deal with the fact that a main loop
might exit before the thread completes, and the thread will try to
talk to resources that no longer exist.
If an idle handler raises an exception, it isn't unregistered and loops
forever. This is a regression from previous pygobject and pygtk:
https://bugzilla.gnome.org/show_bug.cgi?id=702552
Work around this for now with our own wrappers.
Now that virt-manager requires very modern versions of gtk, it's
quite unlikely that we will even run on a system with an old
libguestfs version, so don't bother checking versions.
- Fix screenshot after gtk3 conversion
- Report errors to the user if something goes wrong
- Drop the 'screenshot saved' success dialog
- Capture the screenshot data before asking for the file path, so things
aren't out of date.
- Give a default recommended screenshot path to save.
First bit fixes:
https://bugzilla.redhat.com/show_bug.cgi?id=969410
When LXC guest was shut down while its console was open, virt-manager
got stuck in a loop due to the fact that the readable event was not
properly removed from the callback. Mimicking the behavior from
libvirt's tolls/console.c file, this patch properly closes the console
in case stream.recv() returns empty string.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=968896
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
When a VM is undefined, whether explicitly through virt-manager or behind
our back, we close and cleanup any associated vmmDetails windows. However
there's a race here: if the details window is the last remaining top
level window, cleanup() is called twice which tracebacks.
Fix this by dispatching the exit_app routine in an idle callback, to
avoid racing with any window delete routines.
Reported-by: Leonardo Garcia <lagarcia@br.ibm.com>
The syntax for static route support is defined by the
new <route> subelement which has the form:
<route family='xx' address='xx' prefix='n' gateway='gg' metric='m'/>
This patch builds on the previous patches for adding IPv6 support and
extending the virtual network support.
The static route support code has been recently added to libvirt and will
be included in libvirt 1.0.6.
.
Signed-off-by: Gene Czarcinski <gene@czarc.net>
This patch introduces 'pre-start' signal and registers
nodedev checking handler to check duplicate USB devices.
If virt-manager can not identify unique usb device any more
before domain startup, it will throw a tip error to tell it
is time to reattach host USB devices to get updated bus/addr info.
When there are multiple usb devices with same vendor/product
in the host device list, the bus/addr is going to be used when
attaching one of usb devices.
Currently is_dup flag is only useful to VirtualHostDeviceUSB.
I put get_nodedevs_number() in connection.py, so the startup
hooks can use it.
host-model is a bit more scary then previous behavior, since the
model of an existing VM can transparently change across libvirt
upgrade or HW upgrade. This will probably be improved at the libvirt
level, but for now revert.
This reverts commit 17f43e47fb.
Although the code in lookup_nodedev() is general to deal with
hostdev, it has to seperate USB device from PCI device there.
For PCI device, the domain/bus/slot/function is hex.
For USB device, the bus/device is decimal.
This fix makes the label use hostdev pretty_name:
+------------------------------------------------------+
| Physical USB Device |
| Device: 006:032 RSA RSA SecureID (R) Authenticator |
(crobinso: fix some pylint)
Remote sound works fine these days. If people want to turn the
preference off, they probably want to do it in all cases, and can
'customize before install' to alter the rest.
If the host-model is selected, disable the cpu model drop down
and features list. They still show what exact configuration the
host-model is using.
For the old libvirt which doesn't support <cpu mode='host-model'/>
virt-manager still copy cpu configs from caps XML to domain XML.
(crobinso: Fix some minor pylint)
UPDATE_CPU flag exists after v0.8.0, so libvirt that
supports HOST_MODEL should support UPDATE_CPU,
the earliest version we are going to check is v0.9.10.
After all these changes, it fixes the invisible scrollbar issue. It
was some combination of do_style_set and something else, but I didn't
bother narrowing it down.
Was originally added with hopes for being used in an ovirt related
product, but was more or less a code dump, and the author has been
allocated to other things. He confirmed it's okay to remove.
That, and it's currently broken, and we've had approximately 0 user
feedback since it was committed.
This unfortunately has a decent amount of fallout: add a wrapper class
in config.py that reduces much of the churn.
Another big piece is that gsettings can't accept arbitrary paths like
gconf would, everything needs to be described in the schema.
Also do a bunch more RPM spec modernizing