Ejemplo n.º 1
0
 def parseFile(self, filename):
     """Parse a results file into this object."""
     # See whether we need to work around xm-test's dodgy XML
     count = 0
     f = file(filename, "r")
     line = f.readline()
     try:
         line2 = f.readline()
     except:
         line2 = ""
     f.close()
     if re.search(r"<results>", line) or \
             (re.search(r"<\?xml version", line) and
              re.search(r"<results>", line2)):
         # Well formed XML, well, maybe...
         fn = xenrt.TEC().tempFile()
         fin = file(filename, "r")
         fout = file(fn, "w")
         while True:
             line = fin.readline()
             if not line:
                 break
             line = re.sub(r"(&[^\s&<>]*)", encodeAmpersand, line)
             fout.write(line)
         fout.close()
         fin.close()
         x = xml.dom.minidom.parse(fn)
         for n in x.childNodes:
             if n.nodeType == n.ELEMENT_NODE and n.localName == "results":
                 count = count + self.processResultsNode(n)
     else:
         # Read the whole file in and wrap
         text = "<wrapper>\n"
         tr = ""
         for i in range(256):
             if i < 32:
                 tr = tr + " "
             elif i < 128:
                 tr = tr + chr(i)
             else:
                 tr = tr + " "
         f = file(filename, "r")
         data = f.read()
         f.close()
         # Remove any control characters (from log files mainly)
         text = text + string.translate(data, tr)
         text = text + "</wrapper>\n"
         x = xml.dom.minidom.parseString(text)
         for n in x.childNodes:
             if n.nodeType == n.ELEMENT_NODE and n.localName == "wrapper":
                 for i in n.childNodes:
                     if i.nodeType == i.ELEMENT_NODE and \
                            i.localName == "results":
                         count = count + self.processResultsNode(i)
     return count
Ejemplo n.º 2
0
    def run(self, arglist=None):
        # Create the clones, recording how long it takes to do so
        self.clones = self.createMPSVMs(self.numdesktops, self.goldvm)
        self.configureAllVMs()

        # Set up log files for REQ226
        bootwatcherLogfile = libperf.createLogName("bootwatcher")
        starterLogfile = libperf.createLogName("starter")
        shutdownwatcherLogfile = libperf.createLogName("shutdownwatcher")
        xenrt.TEC().comment("bootwatcher logfile: %s" % bootwatcherLogfile)
        xenrt.TEC().comment("starter logfile: %s" % starterLogfile)
        xenrt.TEC().comment("shutdownwatcher logfile: %s" %
                            shutdownwatcherLogfile)

        # Begin to collect stats from NetApp, for REQ246,248
        self.startNetAppStatGather()

        # Start watching for shutdowns
        sdw = ShutdownWatcher(self, len(self.clones), shutdownwatcherLogfile)
        sdw.start()
        xenrt.TEC().logverbose("started shutdownwatcher")

        # Now start the VMs, for REQ226
        numthreads = len(self.normalHosts)
        self.timeStartVMs(
            numthreads,
            self.clones,
            starterLogfile,
            bootwatcherLogfile,
            awaitParam=None)  # awaitParam=None -> don't use a BootWatcher

        # Wait for all the VMs to shut down
        # TODO this is broken
        sdw.join()
        xenrt.TEC().logverbose("shutdownwatcher has completed")
        if sdw.error:
            raise xenrt.XRTError("shutdownwatcher completed with error")

        # Now gather the final stats from the NetApp, for REQ246,248
        stats = self.finishNetAppStatGather()
        netappLogFile = libperf.createLogName("netapp")
        libperf.outputToResultsFile(netappLogFile, stats)
Ejemplo n.º 3
0
 def run(self):
     # create guest
     if self.vm_type == "win7":
         xenrt.TEC().logverbose("Creating a Windows 7 guest on host %s" %
                                self.host.getName())
         self.guest = self.host.createGenericWindowsGuest(
             distro="win7-x64", vcpus=self.num_vm_vcpus)
         # added for Boston MS3
         self.guest.unenlightenedShutdown()
         self.guest.poll('DOWN')
     else:
         xenrt.TEC().logverbose(
             "Creating a generic Linux guest on bridge %s on host %s" %
             (self.comm_bridge, self.host.getName()))
         self.guest = self.host.createGenericLinuxGuest(
             start=False, bridge=self.comm_bridge, vcpus=self.num_vm_vcpus)
     # setup networking
     trans_vif_uuid = self.createVif(self.trans_bridge, "1")
     dummy_vif_uuid = self.createVif(self.dummy_bridge, "2")
     self.guest.start()
     if self.vm_type == "win7":
         self.guest.xmlrpcExec("netsh firewall set opmode disable")
         ipconfig_all = self.guest.xmlrpcExec("ipconfig /all",
                                              returndata=True)
         trans_mac = self.host.execdom0(
             "xe vif-param-get param-name=MAC uuid=%s" %
             trans_vif_uuid).strip().upper().replace(":", "-")
         trans_lan = self.host.execdom0(
             "echo \"%s\" | grep -i -B 4 \"%s\" | grep -o \"Local Area Connection [0-9]*\""
             % (ipconfig_all, trans_mac)).strip()
         self.guest.xmlrpcExec(
             "netsh interface ip set address \"%s\" static %s" %
             (trans_lan, self.ip))
         self.guest.xmlrpcSendFile(self.winIperfFile, "c:\\iperf.exe")
         self.guest.xmlrpcSendFile(self.winFpingFile, "c:\\fping.exe")
     else:
         self.guest.execguest(
             "sed -i 's/http:\/\/.*\//http:\/\/archive.debian.org\//' /etc/apt/sources.list"
         )
         self.guest.execguest("apt-get update")
         self.guest.execguest("apt-get install --force-yes -y iperf")
     self.guest.shutdown()
Ejemplo n.º 4
0
    def generateMarvinTestConfig(self):
        self.marvinCfg = {}
        self.marvinCfg['dbSvr'] = {}
        self.marvinCfg['dbSvr']['dbSvr'] = self.marvinApi.mgtSvrDetails.dbSvr
        self.marvinCfg['dbSvr']['passwd'] = 'cloud'
        self.marvinCfg['dbSvr']['db'] = 'cloud'
        self.marvinCfg['dbSvr']['port'] = 3306
        self.marvinCfg['dbSvr']['user'] = '******'

        self.marvinCfg['mgtSvr'] = []
        self.marvinCfg['mgtSvr'].append({
            'mgtSvrIp':
            self.marvinApi.mgtSvrDetails.mgtSvrIp,
            'port':
            self.marvinApi.mgtSvrDetails.port
        })

        self.marvinCfg['zones'] = map(lambda x: x.__dict__,
                                      self.marvinApi.cloudApi.listZones())
        for zone in self.marvinCfg['zones']:
            zone['pods'] = map(
                lambda x: x.__dict__,
                self.marvinApi.cloudApi.listPods(zoneid=zone['id']))
            for pod in zone['pods']:
                pod['clusters'] = map(
                    lambda x: x.__dict__,
                    self.marvinApi.cloudApi.listClusters(podid=pod['id']))
                for cluster in pod['clusters']:
                    cluster['hosts'] = map(
                        lambda x: x.__dict__,
                        self.marvinApi.cloudApi.listHosts(
                            clusterid=cluster['id']))
                    for host in cluster['hosts']:
                        host['username'] = '******'
                        host['password'] = xenrt.TEC().lookup("ROOT_PASSWORD")
                        host['url'] = host['ipaddress']

        fn = xenrt.TEC().tempFile()
        fh = open(fn, 'w')
        json.dump(self.marvinCfg, fh)
        fh.close()
        return fn
Ejemplo n.º 5
0
    def cleanup(self, entities):
        """Remove all the specified entities from this Context."""
        xenrt.TEC().logverbose("Cleaning %s." % (entities))
        # We sometimes have entities == self.entities so it's
        # best to take a copy of whatever we're cleaning up.
        entities = copy.copy(entities)
        for entityname in entities:
            if entityname in self.entities:
                entity = self.entities[entityname]

                xenrt.TEC().logverbose(
                    "Destroying entities which depend on %s." % (entityname))
                dependents = filter(
                    lambda x: entityname in self.entities[x].DEPENDS,
                    self.entities)
                self.cleanup(dependents)

                xenrt.TEC().logverbose("Destroying entities which taint %s." %
                                       (entityname))
                tainters = filter(
                    lambda x: entityname in self.entities[x].TAINTS,
                    self.entities)
                self.cleanup(tainters)

                if entityname in self.entities:
                    xenrt.TEC().logverbose("Destroying %s." % (entityname))
                    try:
                        entity.destroy()
                    except Exception, e:
                        xenrt.TEC().logverbose("Exception destroying %s: %s" %
                                               (entityname, e))

                    xenrt.TEC().logverbose("Purging '%s' from cache." %
                                           (entityname))
                    for entry in self.cache.keys():
                        if re.search("(^|=)%s" % (entityname), entry):
                            del self.cache[entry]

                    xenrt.TEC().logverbose("Removing '%s' from context." %
                                           (entityname))
                    if self.entities.has_key(entityname):
                        del self.entities[entityname]

                    xenrt.TEC().logverbose(
                        "Destroying entities which are tainted by '%s'." %
                        (entityname))
                    self.cleanup(entity.TAINTS)

                if not "Pool" in self.entities:
                    self.entities["Pool"] = Pool(self.pool, self)
                if not "Host" in self.entities:
                    self.entities["Host"] = Host(self.pool.master, self)
Ejemplo n.º 6
0
    def run(self, arglist=[]):

        for sku in self.skus:
            if sku == XenServerLicenseSKU.Free:
                # Free license does not require grace license test.
                xenrt.TEC().logverbose(
                    "Free license does not require grace license test")
                continue
            license = self.licenseFactory.licenseForPool(self.systemObj, sku)
            self.runSubcase("licenseGraceTest", license,
                            "Grace - %s" % license, "Grace")
Ejemplo n.º 7
0
    def run(self, arglist=None):
        for sku in self.skus:
            xenrt.TEC().logverbose("Testing SKU: %s" % sku)
            self.confirmLicenseServerUp()

            self.license = self.licenseFactory.licenseForHost(
                self.systemObj.master, sku)

            # Apply the currrent license.
            licenseinUse = self.licenseManager.addLicensesToServer(
                self.v6, self.license)
            self.licenseManager.applyLicense(self.v6, self.systemObj,
                                             self.license, licenseinUse)
            self.systemObj.checkLicenseState(edition=self.license.getEdition())

            self.checkFeature(sku)

            self.licenseManager.releaseLicense(self.systemObj)

            xenrt.TEC().logverbose("Finished testing SKU: %s" % sku)
Ejemplo n.º 8
0
 def waitForResultsToAppear(self, rundirpath, sessionnum, expectedlines, latestTime):
     filename = "%s/VSI_log.%04d" % (rundirpath, sessionnum)
     
     numlines = 0
     interattemptsleep = 5 # seconds
     while numlines < expectedlines and time.time() < latestTime:
         time.sleep(interattemptsleep)
         wc = self.guest.execguest("wc -l %s || true" % filename)
         try:
             numlines = int(wc.split(" ")[0])
         except ValueError:
             numlines = 0
         xenrt.TEC().logverbose("attempt (with %.0f secs remaining): file %s, lines %d of %d expected" % (latestTime-time.time(), filename, numlines, expectedlines))
     
     if numlines >= expectedlines:
         xenrt.TEC().logverbose("session %d has completed" % sessionnum)
         return True
     else:
         xenrt.TEC().logverbose("timeout! it looks like session %d was stuck" % sessionnum)
         return False
Ejemplo n.º 9
0
    def getVMIP(self, h, uuid):
        host = self.tec.gec.registry.hostGet(h)

        # Note: self.clones[i].getDomid() is not reliable because it assumes that the host in self.clones[i] is accurate, but it's not. So we look up the domid ourselves.
        domid = int(host.execdom0("list_domains | grep '%s' | awk -F\\| '{print $1}'" % uuid).strip())
        xenrt.TEC().logverbose("domid of VM with uuid %s is %d" % (uuid, domid))

        ip = host.xenstoreRead("/local/domain/%d/attr/eth0/ip" % domid)
        #ip = self.clones[i].getIP()  # -- seems to return None?

        return ip
Ejemplo n.º 10
0
 def checkpoint(self):
     self.workloads = self.guest.startWorkloads(self.WORKLOADS)
     self.processes = self.guest.xmlrpcPS()
     xenrt.TEC().logverbose("Processes before snapshot: %s" %
                            (self.processes))
     self.guest.xmlrpcCreateFile("c:\\before_snapshot", "")
     _SnappointRollback.checkpoint(self)
     self.guest.xmlrpcCreateFile("c:\\after_snapshot", "")
     for w in self.workloads:
         w.stop()
         w.stopped = False
Ejemplo n.º 11
0
    def physicalDeviceOf(self, guest, endpointdev):
        assert isinstance(guest, xenrt.GenericGuest)
        if endpointdev is None:
            return None
        else:
            # Get the bridge this VIF is on
            br = [
                b for (dev, b, _, _) in guest.vifs
                if dev == ('eth%d' % endpointdev)
            ][0]
            xenrt.TEC().logverbose(
                "physicalDeviceOf(%s, %s): guest.vifs = %s, so device %d is bridged on %s"
                % (guest, endpointdev, guest.vifs, endpointdev, br))

            # Convert bridge into the assumed id of the PIF
            assumedid = self.convertNetworkToAssumedid(guest.host, br)
            xenrt.TEC().logverbose(
                "physicalDeviceOf(%s, %s): bridge '%s' corresponds to assumedid %d"
                % (guest, endpointdev, br, assumedid))
            return assumedid
Ejemplo n.º 12
0
    def __init__(self, hosts, iscsiHost=None):
        self.hosts = hosts
        for host in self.hosts:
            host.melioHelper = self
        self.lun = None
        self._scsiid = None
        self.guid = None
        self._iscsiHost = iscsiHost
        self.logNames = []
        # Get a checkout of the Melio Python library
        if not xenrt.TEC().lookup("MELIO_PYTHON_LOCAL_PATH", None):
            d = xenrt.TempDirectory()
            xenrt.util.command("cd %s && git clone %s melio-python" % (d.path(), xenrt.TEC().lookup("MELIO_PYTHON_REPO", "https://gitlab.citrite.net/xs-melio/python-melio-linux.git")))
            xenrt.util.command("cd %s/melio-python && git checkout %s" % (d.path(), xenrt.TEC().lookup("MELIO_PYTHON_BRANCH", "master")))
            xenrt.GEC().config.setVariable("MELIO_PYTHON_LOCAL_PATH", "%s/melio-python" % d.path())
            sys.path.append("%s/melio-python/lib" % d.path())
        xenrt.setupLogging("sanbolic")

        import sanbolic
        self._MelioClient = sanbolic.Client
Ejemplo n.º 13
0
 def __get_sdk_location(self):
     """
     Look for the SDK location in a named flag otherwise provide the default
     """
     log("Look for override in %s" % self.SDK_OVERRIDE)
     try:
         location = xenrt.TEC().lookup(self.SDK_OVERRIDE)
         log("Found override.....")
         return location
     except:
         return "xe-phase-2/%s" % self._packageName
Ejemplo n.º 14
0
    def install(self):
        if not self.guest.xmlrpcDirExists(self.__location()):
            self.guest.xmlrpcUnpackTarball("%s/redway3dturbine.tgz" % (xenrt.TEC().lookup("TEST_TARBALL_BASE")), "c:\\")
            ref = self.guest.xmlrpcStart("c:\\redway3dturbine\\turbineDemo.exe /S")
            deadline = xenrt.util.timenow() + 600

            while xenrt.util.timenow() < deadline:
                self.guest.xmlrpcKillAll("REDSystemCheckUtility.exe")
                if self.guest.xmlrpcPoll(ref):
                    break
                xenrt.sleep(10)
Ejemplo n.º 15
0
 def waitForVMBoot(self, vm):
     # Thread (called by PTask) Waiting for a VM to boot
     try:
         vm.os.waitForBoot(3600)
         self.addTiming("TIME_VM_VMAVAILABLE_%s:%.3f" %
                        (vm.name, xenrt.util.timenow(float=True)))
     except Exception, e:
         # If it failed, continue, but mark it as failed for now.
         xenrt.TEC().reason("VM %s failed to boot - %s" % (vm.name, str(e)))
         with self.lock:
             self.failedVMs.append(vm.name)
Ejemplo n.º 16
0
    def run(self, arglist=None):
        host = self.getDefaultHost()
        url = "http://%s/" % (host.getIP())
        localtemp = xenrt.TEC().tempFile()

        # Check whether XenCenter.msi or XenCenterSetup.exe exists
        try:
            xenrt.command("curl '%s' -o %s" % (url, localtemp))
        except Exception, e:
            raise xenrt.XRTFailure("Unable to retrieve web page from the host",
                                   str(e))
Ejemplo n.º 17
0
    def getDockerPS(self):
        """Returns an ordered list of dictionary of containers"""

        dockerPS = self.dockerGeneralInfo('docker_ps')

        if not dockerPS.has_key('item'):
            xenrt.TEC().logverbose(
                "getDockerPS: Failed to find key =item= in docker_ps xml")
            return []

        dockerContainerInfo = dockerPS['item']

        if isinstance(dockerContainerInfo, dict):
            return [dockerContainerInfo]  # one container -> retruns a dict.
        elif isinstance(dockerContainerInfo, list):
            return dockerContainerInfo  # more than one container returns a list of ordered dicts.
        else:
            xenrt.TEC().logverbose(
                "getDockerPS: dockerContainerInfo instance is not recognised")
            return []
Ejemplo n.º 18
0
 def prepare(self, environment):
     """Create the necessary entities for this Context
        to conform to environment."""
     for entity in environment:
         xenrt.TEC().logverbose("Preparing a '%s'." % (entity))
         if not entity in self.entities:
             if not entity in self.classes:
                 xenrt.TEC().logverbose(
                     "No concept of a '%s' exists, using default." %
                     (entity))
                 entityclass = self.classes["Default"]
                 self.entities[entity] = entityclass(self, entity)
             else:
                 entityclass = self.classes[entity]
                 xenrt.TEC().logverbose(
                     "Preparing all dependencies of '%s'." % (entity))
                 self.prepare(entityclass.DEPENDS)
                 self.entities[entity] = entityclass(self)
         else:
             xenrt.TEC().logverbose("A '%s' already exists." % (entity))
Ejemplo n.º 19
0
    def run(self, arglist=None):

        uuid = self.goldvm.getUUID()

        # Now repeatedly clone the VM
        clonerLogfile = libperf.createLogName("cloner")
        xenrt.TEC().comment("cloner logfile: %s" % clonerLogfile)
        t = libperf.Cloner(self, self.host, self.goldvm, self.numclones,
                           clonerLogfile)
        t.start()
        t.join()
Ejemplo n.º 20
0
    def sampleDom0State(self, numRunningVMs):
        xenrt.TEC().logverbose("Waiting for dom0 to settle...")

        # Wait for the system to settle
        time.sleep(30)

        xenrt.TEC().logverbose("Sampling dom0 state (with %d running VMs)" % numRunningVMs)

        cmds = [
            # Sample dom0 memory usage
            ("cat /proc/meminfo", "meminfo-%d"),
            # See what processes are running in dom0
            ("ps axuwww", "ps-axuwww-%d"),
            # list_domains
            ("list_domains -all", "list_domains-%d"),
        ]

        for cmd, logfile in cmds:
            output = self.host.execdom0(cmd)
            self.log(logfile % numRunningVMs, output)
Ejemplo n.º 21
0
    def run(self, arglist):
        # Retrieving iSCSI LUN from registry for SR creation.
        self.lun = xenrt.TEC().registry.resourceGet("ISCSISRLUN")

        # Creating multipathed iSCSI SR.
        iscsiSR = xenrt.lib.xenserver.ISCSIStorageRepository(
            self.host, "multipathed-iscsi-sr-on-same-storage-as-boot-disk")
        iscsiSR.create(self.lun,
                       subtype="lvm",
                       multipathing=True,
                       noiqnset=True)
Ejemplo n.º 22
0
 def exportSnapshot(self):
     xenrt.TEC().logverbose("Trying to export snapshot.")
     command = ["xe"]
     command.append("snapshot-export-to-template")
     command.append("snapshot-uuid=%s" % (self.snappoint))
     command.append("filename=%s" % (self.image))
     command = string.join(command)
     command = xenrt.lib.xenserver.cli.buildCommandLine(self.host, command)
     result = self.cliguest.execguest(command, timeout=3600).strip()
     if not result == "Export succeeded":
         raise xenrt.XRTFailure("Export failed. (%s)" % (result))
Ejemplo n.º 23
0
 def _getSdk(self):
     self.removePackage()
     step("Getting SDK....")
     target = self.__get_sdk_location()
     sdkfile = xenrt.TEC().getFile(target)
     sftp = self._runner.sftpClient()
     targetLocation = os.path.join(self.TARGET_ROOT, self._packageName)
     sftp.copyTo(sdkfile, targetLocation)
     log("Target location: %s" % targetLocation)
     sftp.close()
     return targetLocation
Ejemplo n.º 24
0
    def run(self, arglist):
        cli = self.pool.getCLIInstance()
        statefilevdi = self.pool.master.parseListForUUID(
            "vdi-list", "name-label", "Statefile for HA")
        statefilesr = self.pool.master.getVDISR(statefilevdi)

        try:
            self.pool.master.destroyVDI(statefilevdi)
        except xenrt.XRTFailure, e:
            xenrt.TEC().logverbose(
                "Expected failure to delete state file VDI.")
Ejemplo n.º 25
0
 def getGuestOrHostFromName(self, name):
     for guest in self.guests:
         if guest.getName() == name:
             self.log(None, "name=%s -> guest=%s" % (name, guest))
             return guest
     host = xenrt.TEC().registry.hostGet(name)
     self.log(None, "name=%s -> host=%s" % (name, host))
     if host:
         return host
     raise xenrt.XRTError("Failed to find guest or host with name %s" %
                          (name, ))
Ejemplo n.º 26
0
 def getVmWareDc(self, key, ref):
     if ref.has_key("XRT_VMWareDC"):
         vc = xenrt.TEC().lookup("VCENTER")
         return {
             "name": ref['XRT_VMWareDC'],
             "vcenter": vc['ADDRESS'],
             "username": vc['USERNAME'],
             "password": vc['PASSWORD']
         }
     else:
         return None
Ejemplo n.º 27
0
    def run(self, arglist=None):
        vm = self.host.execdom0(
            "xe vm-install new-name-label=vm template-name=\"Other install media\""
        ).strip()
        self.host.execdom0(
            "xe vm-cd-add uuid=%s cd-name=\"win7-x86.iso\" device=3" % vm)
        self.host.execdom0("xe vm-start uuid=%s" % vm, timeout=30)

        self.checkHost()

        xenrt.TEC().logverbose("Expected output: Host didn't crash")
Ejemplo n.º 28
0
    def _installPackage(self):
        if self._os.windowsVersion() == "5.1":
            # CA-41364 need a newer version of windows installer
            self._os.installPackage("WindowsInstaller")

        self._os.unpackTarball("%s/dotnet.tgz" %
                                 (xenrt.TEC().lookup("TEST_TARBALL_BASE")),
                                 "c:\\")
        exe = self._os._os.getArch() == "amd64" and "NetFx20SP2_x64.exe" or "NetFx20SP2_x86.exe"
        self._os.cmdExec("c:\\dotnet\\%s /q /norestart" % exe,
                        timeout=3600, returnerror=False)
Ejemplo n.º 29
0
 def paramGet(self, param, isVMkernelAdvCfg=False):
     try:
         if isVMkernelAdvCfg:
             return self.execdom0("esxcfg-advcfg --get %s" %
                                  (param)).strip().split(" is ")[-1]
         # User defined config
         return self.execdom0("esxcfg-advcfg --get-user-var --user-var %s" %
                              (param)).strip()
     except xenrt.XRTFailure, e:
         xenrt.TEC().logverbose("advance config '%s' doesn't exist." %
                                param)
Ejemplo n.º 30
0
    def joinADDomain(self, arglist=None):
        self.authguest = self.getGuest(self.ADNAME)
        self.adIP = self.authguest.getIP()
        self.authserver = self.authguest.getActiveDirectoryServer()
        xenrt.TEC().logverbose(self.authserver.domainname)
        xenrt.TEC().logverbose(self.authserver.place.password)
        xenrt.TEC().logverbose(self.adIP)

        self.targetGuest.xmlrpcExec(
            "netsh interface ip set dns \"Local Area Connection\" static %s" %
            (self.adIP))
        self.targetGuest.xmlrpcExec(
            "netsh firewall set opmode mode=DISABLE profile=ALL")
        self.targetGuest.xmlrpcExec(
            "netdom join %%computername%% /domain:%s /userd:%s /passwordd:%s" %
            (self.authserver.domainname, "Administrator",
             self.authserver.place.password))

        self.targetGuest.waitForDaemon(90, desc="Guest check")
        self.targetGuest.reboot()