mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-11 07:55:52 -06:00
s/optical/mediadev/g for many internal routines
Make the move towards generalizing these for not just CDROM media, but also floppy devices (and others in the future).
This commit is contained in:
parent
b9bf03b896
commit
ed911036f1
@ -24,14 +24,20 @@ import virtinst
|
||||
|
||||
import virtManager.uihelpers as uihelpers
|
||||
import virtManager.util as util
|
||||
from virtManager.mediadev import MEDIA_CDROM
|
||||
from virtManager.storagebrowse import vmmStorageBrowser
|
||||
from virtManager.error import vmmErrorDialog
|
||||
|
||||
class vmmChooseCD(gobject.GObject):
|
||||
__gsignals__ = {"cdrom-chosen": (gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
(str, str, str)), # type, source, target
|
||||
}
|
||||
__gsignals__ = {
|
||||
"cdrom-chosen": (gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
(str, str, str)), # type, source, target
|
||||
}
|
||||
|
||||
IS_FLOPPY = 1
|
||||
IS_CDROM = 2
|
||||
|
||||
def __init__(self, config, dev_id_info, connection):
|
||||
self.__gobject_init__()
|
||||
self.window = gtk.glade.XML(config.get_glade_dir() + "/vmm-choose-cd.glade", "vmm-choose-cd", domain="virt-manager")
|
||||
@ -133,10 +139,10 @@ class vmmChooseCD(gobject.GObject):
|
||||
def initialize_opt_media(self):
|
||||
widget = self.window.get_widget("cd-path")
|
||||
warn = self.window.get_widget("cd-path-warn")
|
||||
error = self.conn.optical_error
|
||||
|
||||
uihelpers.init_optical_combo(widget)
|
||||
uihelpers.populate_optical_combo(self.conn, widget)
|
||||
error = self.conn.mediadev_error
|
||||
uihelpers.init_mediadev_combo(widget)
|
||||
uihelpers.populate_mediadev_combo(self.conn, widget, MEDIA_CDROM)
|
||||
|
||||
if error:
|
||||
warn.show()
|
||||
|
@ -79,9 +79,9 @@ class vmmConnection(gobject.GObject):
|
||||
"nodedev-removed": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||
[str, str]),
|
||||
|
||||
"optical-added": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||
"mediadev-added": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||
[object]),
|
||||
"optical-removed": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||
"mediadev-removed": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||
[str]),
|
||||
|
||||
"resources-sampled": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
|
||||
@ -126,7 +126,7 @@ class vmmConnection(gobject.GObject):
|
||||
# Physical network interfaces: name (eth0) -> vmmNetDevice
|
||||
self.netdevs = {}
|
||||
# Physical media devices: vmmMediaDevice.key -> vmmMediaDevice
|
||||
self.opticaldevs = {}
|
||||
self.mediadevs = {}
|
||||
# Connection Storage pools: name -> vmmInterface
|
||||
self.interfaces = {}
|
||||
# Connection Storage pools: UUID -> vmmStoragePool
|
||||
@ -147,9 +147,9 @@ class vmmConnection(gobject.GObject):
|
||||
self.netdev_error = ""
|
||||
self.netdev_use_libvirt = False
|
||||
|
||||
self.optical_initialized = False
|
||||
self.optical_error = ""
|
||||
self.optical_use_libvirt = False
|
||||
self.mediadev_initialized = False
|
||||
self.mediadev_error = ""
|
||||
self.mediadev_use_libvirt = False
|
||||
|
||||
#################
|
||||
# Init routines #
|
||||
@ -206,22 +206,22 @@ class vmmConnection(gobject.GObject):
|
||||
else:
|
||||
logging.debug("Using HAL for netdev enumeration")
|
||||
|
||||
def _init_optical(self):
|
||||
def _init_mediadev(self):
|
||||
if self.is_nodedev_capable():
|
||||
try:
|
||||
self.connect("nodedev-added", self._nodedev_optical_added)
|
||||
self.connect("nodedev-removed", self._nodedev_optical_removed)
|
||||
self.optical_use_libvirt = True
|
||||
self.connect("nodedev-added", self._nodedev_mediadev_added)
|
||||
self.connect("nodedev-removed", self._nodedev_mediadev_removed)
|
||||
self.mediadev_use_libvirt = True
|
||||
except Exception, e:
|
||||
self.optical_error = _("Could not build media "
|
||||
"list via libvirt: %s") % str(e)
|
||||
self.mediadev_error = _("Could not build media "
|
||||
"list via libvirt: %s") % str(e)
|
||||
|
||||
elif self.get_hal_helper():
|
||||
hal_helper = self.get_hal_helper()
|
||||
|
||||
if self.is_remote():
|
||||
self.optical_error = _("Libvirt version does not support "
|
||||
"media listing.")
|
||||
self.mediadev_error = _("Libvirt version does not support "
|
||||
"media listing.")
|
||||
|
||||
else:
|
||||
error = hal_helper.get_init_error()
|
||||
@ -230,20 +230,20 @@ class vmmConnection(gobject.GObject):
|
||||
self._set_hal_remove_sig(hal_helper)
|
||||
|
||||
else:
|
||||
self.optical_error = _("Could not initialize HAL for "
|
||||
"media listing: %s") % error
|
||||
self.mediadev_error = _("Could not initialize HAL for "
|
||||
"media listing: %s") % error
|
||||
else:
|
||||
self.optical_error = _("Libvirt version does not support "
|
||||
"media listing.")
|
||||
self.mediadev_error = _("Libvirt version does not support "
|
||||
"media listing.")
|
||||
|
||||
self.optical_initialized = True
|
||||
if self.optical_error:
|
||||
logging.debug(self.optical_error)
|
||||
self.mediadev_initialized = True
|
||||
if self.mediadev_error:
|
||||
logging.debug(self.mediadev_error)
|
||||
else:
|
||||
if self.optical_use_libvirt:
|
||||
logging.debug("Using libvirt API for optical enumeration")
|
||||
if self.mediadev_use_libvirt:
|
||||
logging.debug("Using libvirt API for mediadev enumeration")
|
||||
else:
|
||||
logging.debug("Using HAL for optical enumeration")
|
||||
logging.debug("Using HAL for mediadev enumeration")
|
||||
|
||||
########################
|
||||
# General data getters #
|
||||
@ -300,9 +300,9 @@ class vmmConnection(gobject.GObject):
|
||||
if name == "vm-added":
|
||||
for uuid in self.vms.keys():
|
||||
self.emit("vm-added", self.uri, uuid)
|
||||
elif name == "optical-added":
|
||||
for dev in self.opticaldevs.values():
|
||||
self.emit("optical-added", dev)
|
||||
elif name == "mediadev-added":
|
||||
for dev in self.mediadevs.values():
|
||||
self.emit("mediadev-added", dev)
|
||||
elif name == "nodedev-added":
|
||||
for key in self.nodedevs.keys():
|
||||
self.emit("nodedev-added", self.get_uri(), key)
|
||||
@ -667,12 +667,13 @@ class vmmConnection(gobject.GObject):
|
||||
# Update listeners #
|
||||
####################
|
||||
|
||||
def _remove_optical(self, key):
|
||||
del(self.opticaldevs[key])
|
||||
self.emit("optical-removed", key)
|
||||
def _add_optical(self, key, dev):
|
||||
self.opticaldevs[key] = dev
|
||||
self.emit("optical-added", dev)
|
||||
# Generic media device helpers
|
||||
def _remove_mediadev(self, key):
|
||||
del(self.mediadevs[key])
|
||||
self.emit("mediadev-removed", key)
|
||||
def _add_mediadev(self, key, dev):
|
||||
self.mediadevs[key] = dev
|
||||
self.emit("mediadev-added", dev)
|
||||
|
||||
def _haldev_removed(self, ignore, hal_path):
|
||||
# Physical net device
|
||||
@ -681,9 +682,9 @@ class vmmConnection(gobject.GObject):
|
||||
del self.netdevs[name]
|
||||
return
|
||||
|
||||
for key, obj in self.opticaldevs.items():
|
||||
for key, obj in self.mediadevs.items():
|
||||
if key == hal_path:
|
||||
self._remove_optical(key)
|
||||
self._remove_mediadev(key)
|
||||
|
||||
def _netdev_added(self, ignore, netdev):
|
||||
name = netdev.get_name()
|
||||
@ -692,15 +693,16 @@ class vmmConnection(gobject.GObject):
|
||||
|
||||
self.netdevs[name] = netdev
|
||||
|
||||
# Optical HAL listener
|
||||
def _optical_added(self, ignore, dev):
|
||||
key = dev.get_key()
|
||||
if self.opticaldevs.has_key(key):
|
||||
if self.mediadevs.has_key(key):
|
||||
return
|
||||
|
||||
self._add_optical(key, dev)
|
||||
self._add_mediadev(key, dev)
|
||||
|
||||
def _nodedev_optical_added(self, ignore1, ignore2, name):
|
||||
if self.opticaldevs.has_key(name):
|
||||
def _nodedev_mediadev_added(self, ignore1, ignore2, name):
|
||||
if self.mediadevs.has_key(name):
|
||||
return
|
||||
|
||||
vobj = self.get_nodedev(name)
|
||||
@ -708,13 +710,13 @@ class vmmConnection(gobject.GObject):
|
||||
if not mediadev:
|
||||
return
|
||||
|
||||
self._add_optical(name, mediadev)
|
||||
self._add_mediadev(name, mediadev)
|
||||
|
||||
def _nodedev_optical_removed(self, ignore1, ignore2, name):
|
||||
if not self.opticaldevs.has_key(name):
|
||||
def _nodedev_mediadev_removed(self, ignore1, ignore2, name):
|
||||
if not self.mediadevs.has_key(name):
|
||||
return
|
||||
|
||||
self._remove_optical(name)
|
||||
self._remove_mediadev(name)
|
||||
|
||||
######################################
|
||||
# Connection closing/opening methods #
|
||||
@ -1340,8 +1342,8 @@ class vmmConnection(gobject.GObject):
|
||||
if not self.netdev_initialized:
|
||||
self._init_netdev()
|
||||
|
||||
if not self.optical_initialized:
|
||||
self._init_optical()
|
||||
if not self.mediadev_initialized:
|
||||
self._init_mediadev()
|
||||
|
||||
def tick_send_signals():
|
||||
"""
|
||||
|
@ -32,6 +32,7 @@ import virtinst
|
||||
|
||||
import virtManager.uihelpers as uihelpers
|
||||
from virtManager import util
|
||||
from virtManager.mediadev import MEDIA_CDROM
|
||||
from virtManager.error import vmmErrorDialog
|
||||
from virtManager.asyncjob import vmmAsyncJob
|
||||
from virtManager.createmeter import vmmCreateMeter
|
||||
@ -244,7 +245,7 @@ class vmmCreate(gobject.GObject):
|
||||
|
||||
# Physical CD-ROM model
|
||||
cd_list = self.window.get_widget("install-local-cdrom-combo")
|
||||
uihelpers.init_optical_combo(cd_list)
|
||||
uihelpers.init_mediadev_combo(cd_list)
|
||||
|
||||
# Networking
|
||||
# [ interface type, device name, label, sensitive ]
|
||||
@ -410,13 +411,14 @@ class vmmCreate(gobject.GObject):
|
||||
cdrom_list = self.window.get_widget("install-local-cdrom-combo")
|
||||
cdrom_warn = self.window.get_widget("install-local-cdrom-warn")
|
||||
|
||||
sigs = uihelpers.populate_optical_combo(self.conn, cdrom_list)
|
||||
sigs = uihelpers.populate_mediadev_combo(self.conn, cdrom_list,
|
||||
MEDIA_CDROM)
|
||||
self.conn_signals.extend(sigs)
|
||||
|
||||
if self.conn.optical_error:
|
||||
if self.conn.mediadev_error:
|
||||
cdrom_warn.show()
|
||||
cdrom_option.set_sensitive(False)
|
||||
util.tooltip_wrapper(cdrom_warn, self.conn.optical_error)
|
||||
util.tooltip_wrapper(cdrom_warn, self.conn.mediadev_error)
|
||||
else:
|
||||
cdrom_warn.hide()
|
||||
|
||||
|
@ -23,6 +23,9 @@ import logging
|
||||
|
||||
import virtinst
|
||||
|
||||
MEDIA_FLOPPY = "floppy"
|
||||
MEDIA_CDROM = "cdrom"
|
||||
|
||||
MEDIA_TIMEOUT = 3
|
||||
|
||||
class vmmMediaDevice(gobject.GObject):
|
||||
@ -38,9 +41,10 @@ class vmmMediaDevice(gobject.GObject):
|
||||
if nodedev.device_type != "storage":
|
||||
return None
|
||||
|
||||
if nodedev.drive_type != "cdrom":
|
||||
if nodedev.drive_type not in [ MEDIA_CDROM, MEDIA_FLOPPY]:
|
||||
return None
|
||||
|
||||
drvtype = nodedev.drive_type
|
||||
path = nodedev.block
|
||||
key = nodedev.name
|
||||
has_media = nodedev.media_available
|
||||
@ -49,13 +53,13 @@ class vmmMediaDevice(gobject.GObject):
|
||||
|
||||
nodedev_obj = conn.vmm.nodeDeviceLookupByName(key)
|
||||
obj = vmmMediaDevice(path, key, has_media, media_label, media_key,
|
||||
nodedev_obj)
|
||||
nodedev_obj, drvtype)
|
||||
obj.enable_poll_for_media()
|
||||
|
||||
return obj
|
||||
|
||||
def __init__(self, path, key, has_media, media_label, media_key,
|
||||
nodedev_obj = None):
|
||||
nodedev_obj = None, media_type = MEDIA_CDROM):
|
||||
self.__gobject_init__()
|
||||
|
||||
self.path = path
|
||||
@ -63,6 +67,7 @@ class vmmMediaDevice(gobject.GObject):
|
||||
self._has_media = has_media
|
||||
self.media_label = media_label
|
||||
self.media_key = media_key
|
||||
self.media_type = media_type
|
||||
|
||||
self.nodedev_obj = nodedev_obj
|
||||
self.poll_signal = None
|
||||
@ -73,6 +78,9 @@ class vmmMediaDevice(gobject.GObject):
|
||||
def get_key(self):
|
||||
return self.key
|
||||
|
||||
def get_media_type(self):
|
||||
return self.media_type
|
||||
|
||||
def has_media(self):
|
||||
return self._has_media
|
||||
def get_media_label(self):
|
||||
|
@ -285,11 +285,11 @@ def generate_macaddr(conn):
|
||||
return newmac
|
||||
|
||||
|
||||
##############################################
|
||||
# Populate optical widget (choosecd, create) #
|
||||
##############################################
|
||||
############################################
|
||||
# Populate media widget (choosecd, create) #
|
||||
############################################
|
||||
|
||||
def init_optical_combo(widget, empty_sensitive=False):
|
||||
def init_mediadev_combo(widget, empty_sensitive=False):
|
||||
# [Device path, pretty label, has_media?, device key, media key,
|
||||
# vmmMediaDevice]
|
||||
model = gtk.ListStore(str, str, bool, str, str)
|
||||
@ -302,16 +302,16 @@ def init_optical_combo(widget, empty_sensitive=False):
|
||||
if not empty_sensitive:
|
||||
widget.add_attribute(text, 'sensitive', 2)
|
||||
|
||||
def populate_optical_combo(conn, widget):
|
||||
def populate_mediadev_combo(conn, widget, devtype):
|
||||
sigs = []
|
||||
|
||||
widget.get_model().clear()
|
||||
|
||||
sigs.append(conn.connect("optical-added", optical_added, widget))
|
||||
sigs.append(conn.connect("optical-removed", optical_removed, widget))
|
||||
sigs.append(conn.connect("mediadev-added", mediadev_added, widget, devtype))
|
||||
sigs.append(conn.connect("mediadev-removed", mediadev_removed, widget))
|
||||
|
||||
widget.set_active(-1)
|
||||
optical_set_default_selection(widget)
|
||||
mediadev_set_default_selection(widget)
|
||||
|
||||
return sigs
|
||||
|
||||
@ -322,7 +322,7 @@ def set_row_from_object(row, obj):
|
||||
row[OPTICAL_DEV_KEY] = obj.get_key()
|
||||
row[OPTICAL_MEDIA_KEY] = obj.get_media_key()
|
||||
|
||||
def optical_removed(ignore_helper, key, widget):
|
||||
def mediadev_removed(ignore_helper, key, widget):
|
||||
model = widget.get_model()
|
||||
active = widget.get_active()
|
||||
idx = 0
|
||||
@ -339,22 +339,25 @@ def optical_removed(ignore_helper, key, widget):
|
||||
|
||||
idx += 1
|
||||
|
||||
optical_set_default_selection(widget)
|
||||
mediadev_set_default_selection(widget)
|
||||
|
||||
def optical_added(ignore_helper, newobj, widget):
|
||||
def mediadev_added(ignore_helper, newobj, widget, devtype):
|
||||
model = widget.get_model()
|
||||
|
||||
newobj.connect("media-added", optical_media_changed, widget)
|
||||
newobj.connect("media-removed", optical_media_changed, widget)
|
||||
if newobj.get_media_type() != devtype:
|
||||
return
|
||||
|
||||
newobj.connect("media-added", mediadev_media_changed, widget)
|
||||
newobj.connect("media-removed", mediadev_media_changed, widget)
|
||||
|
||||
# Brand new device
|
||||
row = [None, None, None, None, None]
|
||||
set_row_from_object(row, newobj)
|
||||
model.append(row)
|
||||
|
||||
optical_set_default_selection(widget)
|
||||
mediadev_set_default_selection(widget)
|
||||
|
||||
def optical_media_changed(newobj, widget):
|
||||
def mediadev_media_changed(newobj, widget):
|
||||
model = widget.get_model()
|
||||
active = widget.get_active()
|
||||
idx = 0
|
||||
@ -374,9 +377,9 @@ def optical_media_changed(newobj, widget):
|
||||
|
||||
idx = idx + 1
|
||||
|
||||
optical_set_default_selection(widget)
|
||||
mediadev_set_default_selection(widget)
|
||||
|
||||
def optical_set_default_selection(widget):
|
||||
def mediadev_set_default_selection(widget):
|
||||
# Set the first active cdrom device as selected, otherwise none
|
||||
model = widget.get_model()
|
||||
idx = 0
|
||||
|
@ -125,7 +125,7 @@
|
||||
<widget class="GtkLabel" id="label36">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">ISO _Location:</property>
|
||||
<property name="label" translatable="yes">_Location:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">iso-path</property>
|
||||
</widget>
|
||||
@ -194,7 +194,7 @@
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label35">
|
||||
<widget class="GtkLabel" id="title-label">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><b>CD Source Device Or File</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
|
Loading…
Reference in New Issue
Block a user