Example #1
0
        pool = conn.get_pool(uuid)

        name = pool.get_name()
        typ = Storage.StoragePool.get_pool_type_desc(pool.get_type())
        label = "%s\n<span size='small'>%s</span>" % (name, typ)

        model.append([uuid, label, pool.is_active(), per])

    _iter = model.get_iter_first()
    if _iter:
        pool_list.get_selection().select_iter(_iter)
    pool_list.get_selection().emit("changed")

def get_pool_size_percent(conn, uuid):
    pool = conn.get_pool(uuid)
    cap = pool.get_capacity()
    alloc = pool.get_allocation()
    if not cap or alloc is None:
        per = 0
    else:
        per = int(((float(alloc) / float(cap)) * 100))
    return "<span size='small' color='#484848'>%s%%</span>" % int(per)

vmmGObjectUI.type_register(vmmHost)
vmmHost.signal_new(vmmHost, "action-show-help", [str])
vmmHost.signal_new(vmmHost, "action-exit-app", [])
vmmHost.signal_new(vmmHost, "action-view-manager", [])
vmmHost.signal_new(vmmHost, "action-restore-domain", [str])
vmmHost.signal_new(vmmHost, "host-closed", [])
vmmHost.signal_new(vmmHost, "host-opened", [])
        asyncjob.job_canceled = True
        return

    def _async_migrate(self, asyncjob, origvm, origdconn, migrate_uri, rate,
                       live, secure, max_downtime):
        meter = asyncjob.get_meter()

        srcconn = util.dup_conn(origvm.conn)
        dstconn = util.dup_conn(origdconn)

        vminst = srcconn.vmm.lookupByName(origvm.get_name())
        vm = vmmDomain(srcconn, vminst, vminst.UUID())

        logging.debug("Migrating vm=%s from %s to %s", vm.get_name(),
                      srcconn.get_uri(), dstconn.get_uri())

        timer = None
        if max_downtime != 0:
            # 0 means that the spin box migrate-max-downtime does not
            # be enabled.
            current_thread = threading.currentThread()
            timer = self.timeout_add(100, self._async_set_max_downtime, vm,
                                     max_downtime, current_thread)

        vm.migrate(dstconn, migrate_uri, rate, live, secure, meter=meter)
        if timer:
            self.idle_add(gobject.source_remove, timer)


vmmGObjectUI.type_register(vmmMigrateDialog)
            return str1
        if str1:
            str1 += delim
        str1 += str2
        return str1

    if ro:
        info = append_str(info, _("Storage is read-only."))
    elif not vol and not os.access(path, os.W_OK):
        info = append_str(info, _("No write access to path."))

    if shared:
        info = append_str(info, _("Storage is marked as shareable."))

    try:
        names = virtinst.VirtualDisk.path_in_use_by(conn.vmm, path)

        if len(names) > 1:
            namestr = ""
            names.remove(vm_name)
            for name in names:
                namestr = append_str(namestr, name, delim="\n- ")
            info = append_str(info, _("Storage is in use by the following "
                                      "virtual machines:\n- %s " % namestr))
    except Exception, e:
        logging.exception("Failed checking disk conflict: %s", str(e))

    return (not info, info)

vmmGObjectUI.type_register(vmmDeleteDialog)
            return str1
        if str1:
            str1 += delim
        str1 += str2
        return str1

    if ro:
        info = append_str(info, _("Storage is read-only."))
    elif not vol and not os.access(path, os.W_OK):
        info = append_str(info, _("No write access to path."))

    if shared:
        info = append_str(info, _("Storage is marked as shareable."))

    try:
        names = virtinst.VirtualDisk.path_in_use_by(conn.vmm, path)

        if len(names) > 1:
            namestr = ""
            names.remove(vm_name)
            for name in names:
                namestr = append_str(namestr, name, delim="\n- ")
            info = append_str(info, _("Storage is in use by the following " "virtual machines:\n- %s " % namestr))
    except Exception, e:
        logging.exception("Failed checking disk conflict: %s", str(e))

    return (not info, info)


vmmGObjectUI.type_register(vmmDeleteDialog)
            elif self.can_resolve_local == None:
                try:
                    socket.getaddrinfo(host, None)
                except:
                    logging.debug("Couldn't resolve host '%s'. Stripping " "'.local' and retrying.", host)
                    self.can_resolve_local = False
                    host = self.check_resolve_host(host[:-6])
                else:
                    self.can_resolve_local = True

        else:
            if self.can_resolve_hostname == False:
                host = ""
            elif self.can_resolve_hostname == None:
                try:
                    socket.getaddrinfo(host, None)
                except:
                    logging.debug(
                        "Couldn't resolve host '%s'. Disabling " "host name resolution, only using IP addr", host
                    )
                    self.can_resolve_hostname = False
                else:
                    self.can_resolve_hostname = True

        return host


vmmGObjectUI.type_register(vmmConnect)
vmmConnect.signal_new(vmmConnect, "completed", [str, bool])
vmmConnect.signal_new(vmmConnect, "cancelled", [])
        cap = self.widget("vol-capacity").get_value()

        try:
            self.vol = self.vol_class(name=volname,
                                      allocation=(alloc * 1024 * 1024),
                                      capacity=(cap * 1024 * 1024),
                                      pool=self.parent_pool.pool)
            if fmt:
                self.vol.format = fmt
        except ValueError, e:
            return self.val_err(_("Volume Parameter Error"), e)
        return True

    def show_err(self, info, details=None):
        async = not self.topwin.get_modal()
        self.err.show_err(info, details, async=async)

    def val_err(self, info, details):
        modal = self.topwin.get_modal()
        ret = False
        try:
            self.topwin.set_modal(False)
            ret = self.err.val_err(info, details, async=not modal)
        finally:
            self.topwin.set_modal(modal)

        return ret

vmmGObjectUI.type_register(vmmCreateVolume)
vmmCreateVolume.signal_new(vmmCreateVolume, "vol-created", [])
Example #7
0
                    socket.getaddrinfo(host, None)
                except:
                    logging.debug(
                        "Couldn't resolve host '%s'. Stripping "
                        "'.local' and retrying.", host)
                    self.can_resolve_local = False
                    host = self.check_resolve_host(host[:-6])
                else:
                    self.can_resolve_local = True

        else:
            if self.can_resolve_hostname == False:
                host = ""
            elif self.can_resolve_hostname == None:
                try:
                    socket.getaddrinfo(host, None)
                except:
                    logging.debug(
                        "Couldn't resolve host '%s'. Disabling "
                        "host name resolution, only using IP addr", host)
                    self.can_resolve_hostname = False
                else:
                    self.can_resolve_hostname = True

        return host


vmmGObjectUI.type_register(vmmConnect)
vmmConnect.signal_new(vmmConnect, "completed", [str, bool])
vmmConnect.signal_new(vmmConnect, "cancelled", [])
    def show(self, parent):
        logging.debug("Showing vmaffinity create new VM-Host affinity rule window.")       
        self.topwin.set_transient_for(parent)
        self.topwin.present()


    def _cleanup(self):        
        self.reset_state() 
    
    def allVMClist_row_selected(self, clist, row, column, event, data=None):
        self.selectedAllVMRow = row
        self.selectedAllVMColumn = column
        self.show_error_message()

    def affinedVMClist_row_selected(self, clist, row, column, event, data=None):
        self.selectedAffinedVMRow = row
        self.selectedAffinedVMColumn = column

    def show_error_message(self, data):
        
        self.warningLabel.set_visible(True)
        self.warningLabel.set_text(data)
        #self.warningLabel.set_text("you selected : " + str(self.selectedAffinedVMRow) + str(self.selectedAffinedColumn))
    
    def hide_error_message(self):
    
        self.warningLabel.set_text("")
        self.warningLabel.set_visible(False)

vmmGObjectUI.type_register(vmaffinityCreateHostAffinityRule)
        
    def show(self, parent):
        logging.debug("Showing vmaffinity delete affinity rule window")       
        self.topwin.set_transient_for(parent)
        self.topwin.present()


    def close(self, src_ignore=None, src2_ignore=None):
        
        logging.debug("Closing vmaffinity delete affinity rule window")
        self.topwin.hide()
        
        self.reset_state()
 
        return 1
               
    def _cleanup(self):
        self.reset_state()
    
    def show_error_message(self, data):
        
        self.errorLabel.set_visible(True)
        self.errorLabel.set_text(data)       
    
    def hide_error_message(self):
        self.errorLabel.set_text("")
        self.errorLabel.set_visible(False)
  
vmmGObjectUI.type_register(vmaffinityDeleteRule)
    
            namestr = None

            try:
                if path:
                    names = virtinst.VirtualDisk.path_in_use_by(
                                                self.conn.vmm, path)
                    namestr = ", ".join(names)
                    if not namestr:
                        namestr = None
            except:
                logging.exception("Failed to determine if storage volume in "
                                  "use.")

            if dironly and fmt != 'dir':
                sensitive = False
            elif not self.rhel6_defaults:
                if fmt == "vmdk":
                    sensitive = False

            model.append([key, vol.get_name(), vol.get_pretty_capacity(),
                          fmt, namestr, sensitive])

    def show_err(self, info, details=None):
        self.err.show_err(info,
                          details=details,
                          async=False)

vmmGObjectUI.type_register(vmmStorageBrowser)
vmmStorageBrowser.signal_new(vmmStorageBrowser, "storage-browse-finish", [str])

class vmaffinityAbout(vmmGObjectUI):
    def __init__(self):
        vmmGObjectUI.__init__(self, "vmaffinity-about.ui", "vmaffinity-about")
        self.window.connect_signals(
            {"on_vmaffinity-about_delete_event": self.close, "on_vmaffinity-about_response": self.close}
        )

    def show(self):
        logging.debug("Showing vmaffinity about")
        self.topwin.present()

    def close(self, data1=None, data2=None):
        logging.debug("Closing vmaffinity about")
        self.topwin.hide()
        self.reset_state()
        return 1

    def reset_state(self):
        vmmGObjectUI.__init__(self, "vmaffinity-about.ui", "vmaffinity-about")
        self.window.connect_signals(
            {"on_vmaffinity-about_delete_event": self.close, "on_vmaffinity-about_response": self.close}
        )

    def _cleanup(self):
        pass


vmmGObjectUI.type_register(vmaffinityAbout)
    def validate(self, page_num):
        if page_num == PAGE_NAME:
            return self.validate_name()
        elif page_num == PAGE_IPV4:
            return self.validate_ipv4()
        elif page_num == PAGE_DHCP:
            return self.validate_dhcp()
        elif page_num == PAGE_FORWARDING:
            return self.validate_forwarding()
        return True

    def show_help(self, src_ignore):
        # help to show depends on the notebook page, yahoo
        page = self.widget("create-pages").get_current_page()
        if page == PAGE_INTRO:
            self.emit("action-show-help", "virt-manager-create-net-intro")
        elif page == PAGE_NAME:
            self.emit("action-show-help", "virt-manager-create-net-name")
        elif page == PAGE_IPV4:
            self.emit("action-show-help", "virt-manager-create-net-ipv4")
        elif page == PAGE_DHCP:
            self.emit("action-show-help", "virt-manager-create-net-dhcp")
        elif page == PAGE_FORWARDING:
            self.emit("action-show-help", "virt-manager-create-net-forwarding")
        elif page == PAGE_SUMMARY:
            self.emit("action-show-help", "virt-manager-create-net-sumary")

vmmGObjectUI.type_register(vmmCreateNetwork)
vmmCreateNetwork.signal_new(vmmCreateNetwork, "action-show-help", [str])
            # Open a seperate connection to install on since this is async
            logging.debug("Threading off connection to clone VM.")
            newconn = util.dup_conn(self.conn).vmm
            meter = asyncjob.get_meter()

            self.clone_design.orig_connection = newconn
            for d in self.clone_design.clone_virtual_disks:
                d.conn = newconn

            self.clone_design.setup()
            CloneManager.start_duplicate(self.clone_design, meter)
        finally:
            self.orig_vm.set_cloning(False)

    def change_storage_browse(self, ignore):
        def callback(src_ignore, txt):
            self.widget("change-storage-new").set_text(txt)

        if self.storage_browser == None:
            self.storage_browser = vmmStorageBrowser(self.conn)
            self.storage_browser.connect("storage-browse-finish", callback)

        self.storage_browser.show(self.topwin, self.conn)

    def show_help(self, ignore1=None):
        # Nothing yet
        return

vmmGObjectUI.type_register(vmmCloneVM)
vmmCloneVM.signal_new(vmmCloneVM, "action-show-help", [str])
Example #14
0
            warn.hide()

        self.widget("physical-media").set_sensitive(not bool(error))

        if self.media_type == MEDIA_FLOPPY:
            self.widget("physical-media").set_label(_("Floppy D_rive"))
            self.widget("iso-image").set_label(_("Floppy _Image"))

    def set_storage_path(self, src_ignore, path):
        self.widget("iso-path").set_text(path)

    def _browse_file(self):
        if self.storage_browser == None:
            self.storage_browser = vmmStorageBrowser(self.conn)
            self.storage_browser.connect("storage-browse-finish",
                                         self.set_storage_path)

        rhel6 = self.vm.rhel6_defaults()
        self.storage_browser.rhel6_defaults = rhel6

        if self.media_type == MEDIA_FLOPPY:
            self.storage_browser.set_browse_reason(
                                    self.config.CONFIG_DIR_FLOPPY_MEDIA)
        else:
            self.storage_browser.set_browse_reason(
                                    self.config.CONFIG_DIR_ISO_MEDIA)
        self.storage_browser.show(self.topwin, self.conn)

vmmGObjectUI.type_register(vmmChooseCD)
vmmChooseCD.signal_new(vmmChooseCD, "cdrom-chosen", [object, str])
        error, details = progWin.run()

        self.topwin.set_sensitive(True)
        self.topwin.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.TOP_LEFT_ARROW))

        if error:
            error = _("Error creating interface: '%s'") % error
            self.err.show_err(error,
                              details=details)
        else:
            # FIXME: Hmm, shouldn't we emit a signal here rather than do this?
            self.conn.tick(noStatsUpdate=True)
            self.close()

    def do_install(self, asyncjob, activate):
        meter = asyncjob.get_meter()
        error = None
        details = None

        self.interface.conn = util.dup_conn(self.conn).vmm

        self.interface.install(meter, create=activate)
        logging.debug("Install completed")

    def show_help(self, ignore):
        # No help available yet.
        pass

vmmGObjectUI.type_register(vmmCreateInterface)
vmmCreateInterface.signal_new(vmmCreateInterface, "action-show-help", [str])
Example #16
0
        data = obj.disk_io_vector_limit(40, self.max_disk_rate)
        cell.set_property('data_array', data)

    def network_traffic_img(self, column_ignore, cell, model, _iter, data):
        obj = model.get_value(_iter, ROW_HANDLE)
        if obj is None:
            return

        if not hasattr(obj, "conn"):
            return

        data = obj.network_traffic_vector_limit(40, self.max_net_rate)
        cell.set_property('data_array', data)


vmmGObjectUI.type_register(vmmManager)
vmmManager.signal_new(vmmManager, "action-show-connect", [])
vmmManager.signal_new(vmmManager, "action-show-vm", [str, str])
vmmManager.signal_new(vmmManager, "action-show-about", [])
vmmManager.signal_new(vmmManager, "action-show-host", [str])
vmmManager.signal_new(vmmManager, "action-show-preferences", [])
vmmManager.signal_new(vmmManager, "action-show-create", [str])
vmmManager.signal_new(vmmManager, "action-suspend-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-resume-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-run-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-shutdown-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-reboot-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-destroy-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-save-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-connect", [str])
vmmManager.signal_new(vmmManager, "action-show-help", [str])
        logging.debug("Showing vmaffinity create new affinity rule window")       
        self.topwin.set_transient_for(parent)
        self.topwin.present()


    def _cleanup(self):
        
        self.reset_state() 
    
    def allVMClist_row_selected(self, clist, row, column, event, data=None):
        self.selectedAllVMRow = row
        self.selectedAllVMColumn = column
        self.show_error_message()

    def groupVMClist_row_selected(self, clist, row, column, event, data=None):
        self.selectedGroupVMRow = row
        self.selectedGroupVMColumn = column

    def show_error_message(self, data):
        
        self.warningLabel.set_visible(True)
        self.warningLabel.set_text(data)
        #self.warningLabel.set_text("you selected : " + str(self.selectedGroupVMRow) + str(self.selectedGroupVMColumn))
    
    def hide_error_message(self):
    
        self.warningLabel.set_text("")
        self.warningLabel.set_visible(False)

vmmGObjectUI.type_register(vmaffinityCreateNewRule)
            try:
                if path:
                    names = virtinst.VirtualDisk.path_in_use_by(
                        self.conn.vmm, path)
                    namestr = ", ".join(names)
                    if not namestr:
                        namestr = None
            except:
                logging.exception("Failed to determine if storage volume in "
                                  "use.")

            if dironly and fmt != 'dir':
                sensitive = False
            elif not self.rhel6_defaults:
                if fmt == "vmdk":
                    sensitive = False

            model.append([
                key,
                vol.get_name(),
                vol.get_pretty_capacity(), fmt, namestr, sensitive
            ])

    def show_err(self, info, details=None):
        self.err.show_err(info, details=details, async=False)


vmmGObjectUI.type_register(vmmStorageBrowser)
vmmStorageBrowser.signal_new(vmmStorageBrowser, "storage-browse-finish", [str])
            doc = self._build_doc_str("build", docstr)
        self.widget("pool-info2").set_markup(doc)

    def update_doc_changed(self, ignore1, param, infobox):
        # Wrapper for update_doc and 'changed' signal
        self.update_doc(None, None, param, infobox)

    def _build_doc_str(self, param, docstr=None):
        doc = ""
        doctmpl = "<i><u>%s</u>: %s</i>"
        prettyname = param.replace("_", " ").capitalize()

        if docstr:
            doc = doctmpl % (prettyname, docstr)
        elif hasattr(self._pool_class, param):
            doc = doctmpl % (prettyname,
                             getattr(self._pool_class, param).__doc__)

        return doc

    def _browse_file(self, dialog_name, startfolder=None, foldermode=False):
        mode = gtk.FILE_CHOOSER_ACTION_OPEN
        if foldermode:
            mode = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER

        return util.browse_local(self.topwin, dialog_name, self.conn,
                                 dialog_type=mode,
                                 start_folder=startfolder)

vmmGObjectUI.type_register(vmmCreatePool)
Example #20
0
        name = pool.get_name()
        typ = Storage.StoragePool.get_pool_type_desc(pool.get_type())
        label = "%s\n<span size='small'>%s</span>" % (name, typ)

        model.append([uuid, label, pool.is_active(), per])

    _iter = model.get_iter_first()
    if _iter:
        pool_list.get_selection().select_iter(_iter)
    pool_list.get_selection().emit("changed")


def get_pool_size_percent(conn, uuid):
    pool = conn.get_pool(uuid)
    cap = pool.get_capacity()
    alloc = pool.get_allocation()
    if not cap or alloc is None:
        per = 0
    else:
        per = int(((float(alloc) / float(cap)) * 100))
    return "<span size='small' color='#484848'>%s%%</span>" % int(per)


vmmGObjectUI.type_register(vmmHost)
vmmHost.signal_new(vmmHost, "action-show-help", [str])
vmmHost.signal_new(vmmHost, "action-exit-app", [])
vmmHost.signal_new(vmmHost, "action-view-manager", [])
vmmHost.signal_new(vmmHost, "action-restore-domain", [str])
vmmHost.signal_new(vmmHost, "host-closed", [])
vmmHost.signal_new(vmmHost, "host-opened", [])
        data = obj.disk_io_vector_limit(40, self.max_disk_rate)
        cell.set_property('data_array', data)

    def network_traffic_img(self, column_ignore, cell, model, _iter, data):
        obj = model.get_value(_iter, ROW_HANDLE)
        if obj is None:
            return

        if not hasattr(obj, "conn"):
            return

        data = obj.network_traffic_vector_limit(40, self.max_net_rate)
        cell.set_property('data_array', data)

vmmGObjectUI.type_register(vmmManager)
vmmManager.signal_new(vmmManager, "action-show-connect", [])
vmmManager.signal_new(vmmManager, "action-show-vm", [str, str])
vmmManager.signal_new(vmmManager, "action-show-about", [])
vmmManager.signal_new(vmmManager, "action-show-host", [str])
vmmManager.signal_new(vmmManager, "action-show-preferences", [])
vmmManager.signal_new(vmmManager, "action-show-create", [str])
vmmManager.signal_new(vmmManager, "action-suspend-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-resume-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-run-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-shutdown-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-reboot-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-destroy-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-save-domain", [str, str])
vmmManager.signal_new(vmmManager, "action-connect", [str])
vmmManager.signal_new(vmmManager, "action-show-help", [str])
    def allGroupsClist_row_selected(self, clist, row, column, event, data=None):
        self.selectedGroupRow = row
        self.selectedGroupColumn = column
        
        #TODO: Sandeep - Get key value, selected group name, fetch the value object
        # clear selectedVMs clist and append new list, clear text view and append new desc.
        
        # Clear current contents
        self.VMsInGroupClist.clear()
        self.selectedRuleDesTextview.get_buffer().set_text("")
        
        # Get group details object.
        selectedGroupName = self.allGroupsClist.get_text(row,column)
        selectedGroupDetails = self.allGroupDictionary[selectedGroupName]
        
        # get description
        desc = ""
        if selectedGroupDetails.getDescription() != None:
        	desc = selectedGroupDetails.getDescription()
        	
        self.selectedRuleDesTextview.get_buffer().set_text(desc)
        # get list of virtual machines in the group
        memberVMs = selectedGroupDetails.getVMList()
        
        for vm in memberVMs:
            self.VMsInGroupClist.append([vm])
        
        
vmmGObjectUI.type_register(vmaffinityViewRules)        
Example #23
0
def on_url(about, link):
    ignore = about
    if hasattr(gtk, "show_uri"):
        gtk.show_uri(None, link, gtk.get_current_event_time())
gtk.about_dialog_set_url_hook(on_url)

class vmmAbout(vmmGObjectUI):
    def __init__(self):
        vmmGObjectUI.__init__(self, "vmm-about.ui", "vmm-about")

        self.window.connect_signals({
            "on_vmm_about_delete_event": self.close,
            "on_vmm_about_response": self.close,
            })

    def show(self):
        logging.debug("Showing about")
        self.topwin.set_version(self.config.get_appversion())
        self.topwin.present()

    def close(self, ignore1=None, ignore2=None):
        logging.debug("Closing about")
        self.topwin.hide()
        return 1

    def _cleanup(self):
        pass

vmmGObjectUI.type_register(vmmAbout)
    	
    	self.VMsInUpdatedGroupClist.select_row(0,0)
    	return
    
    
    def get_allVMsInMachine(self):
         	
        # List all inactive domains:
        connection = libvirt.open('qemu:///system')
        
        allVMsInMachine = []
        allVMsInMachine = connection.listDefinedDomains()
        
        #List all active domains:
        tempList = connection.listDomainsID()
        for id1 in tempList:
        	dom = connection.lookupByID(id1)
        	allVMsInMachine.append(dom.name())        
        
        return allVMsInMachine
    
    def findremainingvms(self, fulllist, oldlist):
	    
	    for vm in oldlist:
		    if fulllist.count(vm)==1:
		        fulllist.remove(vm)
	    
	    return fulllist
	    
vmmGObjectUI.type_register(vmaffinityManageRules)
Example #25
0
        try:
            self.vol = self.vol_class(name=volname,
                                      allocation=(alloc * 1024 * 1024),
                                      capacity=(cap * 1024 * 1024),
                                      pool=self.parent_pool.pool)
            if fmt:
                self.vol.format = fmt
        except ValueError, e:
            return self.val_err(_("Volume Parameter Error"), e)
        return True

    def show_err(self, info, details=None):
        async = not self.topwin.get_modal()
        self.err.show_err(info, details, async=async)

    def val_err(self, info, details):
        modal = self.topwin.get_modal()
        ret = False
        try:
            self.topwin.set_modal(False)
            ret = self.err.val_err(info, details, async=not modal)
        finally:
            self.topwin.set_modal(modal)

        return ret


vmmGObjectUI.type_register(vmmCreateVolume)
vmmCreateVolume.signal_new(vmmCreateVolume, "vol-created", [])
            # we are inside a scrollwindow, it shouldn't cause issues.
            scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
            self.viewer.display.set_size_request(desktop_w, desktop_h)
            return

        # Make sure we never show scrollbars when scaling
        scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)

        # Make sure there is no hard size requirement so we can scale down
        self.viewer.display.set_size_request(-1, -1)

        # Make sure desktop aspect ratio is maintained
        if align_ratio > desktop_ratio:
            desktop_w = int(req.height * desktop_ratio)
            desktop_h = req.height
            dx = (req.width - desktop_w) / 2

        else:
            desktop_w = req.width
            desktop_h = int(req.width / desktop_ratio)
            dy = (req.height - desktop_h) / 2

        viewer_alloc = gtk.gdk.Rectangle(x=dx,
                                         y=dy,
                                         width=desktop_w,
                                         height=desktop_h)

        self.viewer.display.size_allocate(viewer_alloc)

vmmGObjectUI.type_register(vmmConsolePages)
    def validate(self, page_num):
        if page_num == PAGE_NAME:
            return self.validate_name()
        elif page_num == PAGE_IPV4:
            return self.validate_ipv4()
        elif page_num == PAGE_DHCP:
            return self.validate_dhcp()
        elif page_num == PAGE_FORWARDING:
            return self.validate_forwarding()
        return True

    def show_help(self, src_ignore):
        # help to show depends on the notebook page, yahoo
        page = self.widget("create-pages").get_current_page()
        if page == PAGE_INTRO:
            self.emit("action-show-help", "virt-manager-create-net-intro")
        elif page == PAGE_NAME:
            self.emit("action-show-help", "virt-manager-create-net-name")
        elif page == PAGE_IPV4:
            self.emit("action-show-help", "virt-manager-create-net-ipv4")
        elif page == PAGE_DHCP:
            self.emit("action-show-help", "virt-manager-create-net-dhcp")
        elif page == PAGE_FORWARDING:
            self.emit("action-show-help", "virt-manager-create-net-forwarding")
        elif page == PAGE_SUMMARY:
            self.emit("action-show-help", "virt-manager-create-net-sumary")


vmmGObjectUI.type_register(vmmCreateNetwork)
vmmCreateNetwork.signal_new(vmmCreateNetwork, "action-show-help", [str])
        asyncjob.job_canceled = True
        return

    def _async_migrate(self, asyncjob,
                       origvm, origdconn, migrate_uri, rate, live,
                       secure, max_downtime):
        meter = asyncjob.get_meter()

        srcconn = util.dup_conn(origvm.conn)
        dstconn = util.dup_conn(origdconn)

        vminst = srcconn.vmm.lookupByName(origvm.get_name())
        vm = vmmDomain(srcconn, vminst, vminst.UUID())

        logging.debug("Migrating vm=%s from %s to %s", vm.get_name(),
                      srcconn.get_uri(), dstconn.get_uri())

        timer = None
        if max_downtime != 0:
            # 0 means that the spin box migrate-max-downtime does not
            # be enabled.
            current_thread = threading.currentThread()
            timer = self.timeout_add(100, self._async_set_max_downtime,
                                     vm, max_downtime, current_thread)

        vm.migrate(dstconn, migrate_uri, rate, live, secure, meter=meter)
        if timer:
            self.idle_add(gobject.source_remove, timer)

vmmGObjectUI.type_register(vmmMigrateDialog)
Example #29
0
            logging.debug("Threading off connection to clone VM.")
            newconn = util.dup_conn(self.conn).vmm
            meter = asyncjob.get_meter()

            self.clone_design.orig_connection = newconn
            for d in self.clone_design.clone_virtual_disks:
                d.conn = newconn

            self.clone_design.setup()
            CloneManager.start_duplicate(self.clone_design, meter)
        finally:
            self.orig_vm.set_cloning(False)

    def change_storage_browse(self, ignore):
        def callback(src_ignore, txt):
            self.widget("change-storage-new").set_text(txt)

        if self.storage_browser == None:
            self.storage_browser = vmmStorageBrowser(self.conn)
            self.storage_browser.connect("storage-browse-finish", callback)

        self.storage_browser.show(self.topwin, self.conn)

    def show_help(self, ignore1=None):
        # Nothing yet
        return


vmmGObjectUI.type_register(vmmCloneVM)
vmmCloneVM.signal_new(vmmCloneVM, "action-show-help", [str])