def ok(self, ignore1=None, ignore2=None): if self.widget("iso-image").get_active(): path = self.widget("iso-path").get_text() else: path = self.mediacombo.get_path() if path == "" or path is None: return self.err.val_err(_("Invalid Media Path"), _("A media path must be specified.")) names = DeviceDisk.path_in_use_by(self.disk.conn, path) if names: res = self.err.yes_no( _('Disk "%s" is already in use by other guests %s') % (path, names), _("Do you really want to use the disk?")) if not res: return False vmmAddStorage.check_path_search(self, self.conn, path) try: self.disk.path = path except Exception as e: return self.err.val_err(_("Invalid Media Path"), e) self.emit("cdrom-chosen", self.disk, path) self.close()
def _populate_vols(self): list_widget = self.widget("vol-list") pool = self._current_pool() vols = pool and pool.get_volumes() or [] model = list_widget.get_model() list_widget.get_selection().unselect_all() model.clear() vadj = self.widget("vol-scroll").get_vadjustment() vscroll_percent = vadj.get_value() // max(vadj.get_upper(), 1) for vol in vols: key = vol.get_connkey() try: path = vol.get_target_path() name = vol.get_pretty_name(pool.get_type()) cap = str(vol.get_capacity()) sizestr = vol.get_pretty_capacity() fmt = vol.get_format() or "" except Exception: logging.debug( "Error getting volume info for '%s', " "hiding it", key, exc_info=True) continue namestr = None try: if path: names = DeviceDisk.path_in_use_by(vol.conn.get_backend(), path) namestr = ", ".join(names) if not namestr: namestr = None except Exception: logging.exception("Failed to determine if storage volume in " "use.") sensitive = True if self._vol_sensitive_cb: sensitive = self._vol_sensitive_cb(fmt) row = [None] * VOL_NUM_COLUMNS row[VOL_COLUMN_KEY] = key row[VOL_COLUMN_NAME] = name row[VOL_COLUMN_SIZESTR] = sizestr row[VOL_COLUMN_CAPACITY] = cap row[VOL_COLUMN_FORMAT] = fmt row[VOL_COLUMN_INUSEBY] = namestr row[VOL_COLUMN_SENSITIVE] = sensitive model.append(row) def _reset_vscroll_position(): vadj.set_value(vadj.get_upper() * vscroll_percent) self.idle_add(_reset_vscroll_position)
def _populate_vols(self): list_widget = self.widget("vol-list") pool = self._current_pool() vols = pool and pool.get_volumes() or [] model = list_widget.get_model() list_widget.get_selection().unselect_all() model.clear() vadj = self.widget("vol-scroll").get_vadjustment() vscroll_percent = vadj.get_value() // max(vadj.get_upper(), 1) for vol in vols: key = vol.get_connkey() try: path = vol.get_target_path() name = vol.get_pretty_name(pool.get_type()) cap = str(vol.get_capacity()) sizestr = vol.get_pretty_capacity() fmt = vol.get_format() or "" except Exception: logging.debug("Error getting volume info for '%s', " "hiding it", key, exc_info=True) continue namestr = None try: if path: names = DeviceDisk.path_in_use_by(vol.conn.get_backend(), path) namestr = ", ".join(names) if not namestr: namestr = None except Exception: logging.exception("Failed to determine if storage volume in " "use.") sensitive = True if self._vol_sensitive_cb: sensitive = self._vol_sensitive_cb(fmt) row = [None] * VOL_NUM_COLUMNS row[VOL_COLUMN_KEY] = key row[VOL_COLUMN_NAME] = name row[VOL_COLUMN_SIZESTR] = sizestr row[VOL_COLUMN_CAPACITY] = cap row[VOL_COLUMN_FORMAT] = fmt row[VOL_COLUMN_INUSEBY] = namestr row[VOL_COLUMN_SENSITIVE] = sensitive model.append(row) def _reset_vscroll_position(): vadj.set_value(vadj.get_upper() * vscroll_percent) self.idle_add(_reset_vscroll_position)
def testFirmwareRename(app, dom): from virtinst import cli, DeviceDisk win = app.topwin dom.destroy() # First we refresh the 'nvram' pool, so we can reliably # check if nvram files are created/deleted as expected conn = cli.getConnection(app.conn.getURI()) origname = dom.name() nvramdir = conn.get_libvirt_data_root_dir() + "/qemu/nvram" fakedisk = DeviceDisk(conn) fakedisk.set_source_path(nvramdir + "/FAKE-UITEST-FILE") nvram_pool = fakedisk.get_parent_pool() nvram_pool.refresh() origpath = "%s/%s_VARS.fd" % (nvramdir, origname) newname = "uitests-firmware-efi-renamed" newpath = "%s/%s_VARS.fd" % (nvramdir, newname) assert DeviceDisk.path_definitely_exists(app.conn, origpath) assert not DeviceDisk.path_definitely_exists(app.conn, newpath) # Now do the actual UI clickage win.find("Details", "radio button").click() win.find("Hypervisor Details", "label") win.find("Overview", "table cell").click() newname = "uitests-firmware-efi-renamed" win.find("Name:", "text").set_text(newname) appl = win.find("config-apply") appl.click() lib.utils.check(lambda: not appl.sensitive) # Confirm window was updated app.find_window("%s on" % newname) # Confirm nvram paths were altered as expected assert not DeviceDisk.path_definitely_exists(app.conn, origpath) assert DeviceDisk.path_definitely_exists(app.conn, newpath)
def _make_guest(conn=None, os_variant=None): if not conn: conn = utils.URIs.open_testdriver_cached() g = virtinst.Guest(conn) g.type = "kvm" g.name = "TestGuest" g.memory = int(200 * 1024) g.maxmemory = int(400 * 1024) g.uuid = "12345678-1234-1234-1234-123456789012" gdev = virtinst.DeviceGraphics(conn) gdev.type = "vnc" gdev.keymap = "ja" g.add_device(gdev) g.features.pae = False g.vcpus = 5 g.emulator = "/usr/lib/xen/bin/qemu-dm" g.os.arch = "i686" g.os.os_type = "hvm" if os_variant: g.set_os_name(os_variant) # Floppy disk path = "/dev/default-pool/testvol1.img" d = DeviceDisk(conn) d.path = path d.device = d.DEVICE_FLOPPY d.validate() g.add_device(d) # File disk path = "/dev/default-pool/new-test-suite.img" d = virtinst.DeviceDisk(conn) d.path = path if d.wants_storage_creation(): parent_pool = d.get_parent_pool() vol_install = virtinst.DeviceDisk.build_vol_install(conn, os.path.basename(path), parent_pool, .0000001, True) d.set_vol_install(vol_install) d.validate() g.add_device(d) # Block disk path = "/dev/disk-pool/diskvol1" d = virtinst.DeviceDisk(conn) d.path = path d.validate() g.add_device(d) # Network device dev = virtinst.DeviceInterface(conn) dev.macaddr = "22:22:33:44:55:66" dev.type = virtinst.DeviceInterface.TYPE_VIRTUAL dev.source = "default" g.add_device(dev) return g
def testDiskNumbers(self): # Various testing our target generation self.assertEqual("a", DeviceDisk.num_to_target(1)) self.assertEqual("b", DeviceDisk.num_to_target(2)) self.assertEqual("z", DeviceDisk.num_to_target(26)) self.assertEqual("aa", DeviceDisk.num_to_target(27)) self.assertEqual("ab", DeviceDisk.num_to_target(28)) self.assertEqual("az", DeviceDisk.num_to_target(52)) self.assertEqual("ba", DeviceDisk.num_to_target(53)) self.assertEqual("zz", DeviceDisk.num_to_target(27 * 26)) self.assertEqual("aaa", DeviceDisk.num_to_target(27 * 26 + 1)) self.assertEqual(DeviceDisk.target_to_num("hda"), 0) self.assertEqual(DeviceDisk.target_to_num("hdb"), 1) self.assertEqual(DeviceDisk.target_to_num("sdz"), 25) self.assertEqual(DeviceDisk.target_to_num("sdaa"), 26) self.assertEqual(DeviceDisk.target_to_num("vdab"), 27) self.assertEqual(DeviceDisk.target_to_num("vdaz"), 51) self.assertEqual(DeviceDisk.target_to_num("xvdba"), 52) self.assertEqual(DeviceDisk.target_to_num("xvdzz"), 26 * (25 + 1) + 25) self.assertEqual(DeviceDisk.target_to_num("xvdaaa"), 26 * 26 * 1 + 26 * 1 + 0) disk = virtinst.DeviceDisk(self.conn) disk.bus = "ide" self.assertEqual("hda", disk.generate_target([])) self.assertEqual("hdb", disk.generate_target(["hda"])) self.assertEqual("hdc", disk.generate_target(["hdb", "sda"])) self.assertEqual("hdb", disk.generate_target(["hda", "hdd"])) disk.bus = "virtio-scsi" self.assertEqual("sdb", disk.generate_target(["sda", "sdg", "sdi"], 0)) self.assertEqual("sdh", disk.generate_target(["sda", "sdg"], 1))
def testDiskNumbers(self): # Various testing our target generation # # Note: using single quotes in strings to avoid # codespell flagging the 'ba' assert self.assertEqual('a', DeviceDisk.num_to_target(1)) self.assertEqual('b', DeviceDisk.num_to_target(2)) self.assertEqual('z', DeviceDisk.num_to_target(26)) self.assertEqual('aa', DeviceDisk.num_to_target(27)) self.assertEqual('ab', DeviceDisk.num_to_target(28)) self.assertEqual('az', DeviceDisk.num_to_target(52)) self.assertEqual('ba', DeviceDisk.num_to_target(53)) self.assertEqual('zz', DeviceDisk.num_to_target(27 * 26)) self.assertEqual('aaa', DeviceDisk.num_to_target(27 * 26 + 1)) self.assertEqual(DeviceDisk.target_to_num('hda'), 0) self.assertEqual(DeviceDisk.target_to_num('hdb'), 1) self.assertEqual(DeviceDisk.target_to_num('sdz'), 25) self.assertEqual(DeviceDisk.target_to_num('sdaa'), 26) self.assertEqual(DeviceDisk.target_to_num('vdab'), 27) self.assertEqual(DeviceDisk.target_to_num('vdaz'), 51) self.assertEqual(DeviceDisk.target_to_num('xvdba'), 52) self.assertEqual(DeviceDisk.target_to_num('xvdzz'), 26 * (25 + 1) + 25) self.assertEqual(DeviceDisk.target_to_num('xvdaaa'), 26 * 26 * 1 + 26 * 1 + 0) disk = virtinst.DeviceDisk(self.conn) disk.bus = 'ide' self.assertEqual('hda', disk.generate_target([])) self.assertEqual('hdb', disk.generate_target(['hda'])) self.assertEqual('hdc', disk.generate_target(['hdb', 'sda'])) self.assertEqual('hdb', disk.generate_target(['hda', 'hdd']))
def test_disk_numtotarget(): # Various testing our target generation # # Note: using single quotes in strings to avoid # codespell flagging the 'ba' assert assert DeviceDisk.num_to_target(1) == 'a' assert DeviceDisk.num_to_target(2) == 'b' assert DeviceDisk.num_to_target(26) == 'z' assert DeviceDisk.num_to_target(27) == 'aa' assert DeviceDisk.num_to_target(28) == 'ab' assert DeviceDisk.num_to_target(52) == 'az' assert DeviceDisk.num_to_target(53) == 'ba' assert DeviceDisk.num_to_target(27 * 26) == 'zz' assert DeviceDisk.num_to_target(27 * 26 + 1) == 'aaa' assert DeviceDisk.target_to_num('hda') == 0 assert DeviceDisk.target_to_num('hdb') == 1 assert DeviceDisk.target_to_num('sdz') == 25 assert DeviceDisk.target_to_num('sdaa') == 26 assert DeviceDisk.target_to_num('vdab') == 27 assert DeviceDisk.target_to_num('vdaz') == 51 assert DeviceDisk.target_to_num('xvdba') == 52 assert DeviceDisk.target_to_num('xvdzz') == 26 * (25 + 1) + 25 assert DeviceDisk.target_to_num('xvdaaa') == 26 * 26 * 1 + 26 * 1 + 0 conn = utils.URIs.open_testdefault_cached() disk = virtinst.DeviceDisk(conn) disk.bus = 'ide' assert disk.generate_target([]) == 'hda' assert disk.generate_target(['hda']) == 'hdb' assert disk.generate_target(['hdb', 'sda']) == 'hdc' assert disk.generate_target(['hda', 'hdd']) == 'hdb'
def testDiskNumbers(self): # Various testing our target generation self.assertEqual("a", DeviceDisk.num_to_target(1)) self.assertEqual("b", DeviceDisk.num_to_target(2)) self.assertEqual("z", DeviceDisk.num_to_target(26)) self.assertEqual("aa", DeviceDisk.num_to_target(27)) self.assertEqual("ab", DeviceDisk.num_to_target(28)) self.assertEqual("az", DeviceDisk.num_to_target(52)) self.assertEqual("ba", DeviceDisk.num_to_target(53)) self.assertEqual("zz", DeviceDisk.num_to_target(27 * 26)) self.assertEqual("aaa", DeviceDisk.num_to_target(27 * 26 + 1)) self.assertEqual(DeviceDisk.target_to_num("hda"), 0) self.assertEqual(DeviceDisk.target_to_num("hdb"), 1) self.assertEqual(DeviceDisk.target_to_num("sdz"), 25) self.assertEqual(DeviceDisk.target_to_num("sdaa"), 26) self.assertEqual(DeviceDisk.target_to_num("vdab"), 27) self.assertEqual(DeviceDisk.target_to_num("vdaz"), 51) self.assertEqual(DeviceDisk.target_to_num("xvdba"), 52) self.assertEqual(DeviceDisk.target_to_num("xvdzz"), 26 * (25 + 1) + 25) self.assertEqual(DeviceDisk.target_to_num("xvdaaa"), 26 * 26 * 1 + 26 * 1 + 0) disk = virtinst.DeviceDisk(self.conn) disk.bus = "ide" self.assertEqual("hda", disk.generate_target([])) self.assertEqual("hdb", disk.generate_target(["hda"])) self.assertEqual("hdc", disk.generate_target(["hdb", "sda"])) self.assertEqual("hdb", disk.generate_target(["hda", "hdd"])) disk.bus = "virtio-scsi" self.assertEqual("sdb", disk.generate_target(["sda", "sdg", "sdi"], 0)) self.assertEqual("sdh", disk.generate_target(["sda", "sdg"], 1))