def setupBridge(self, interfaces=[], stp=True): bridge = "br0" self.runBridgeCmd("add-br %s" % bridge) if stp: self.runBridgeCmd("set bridge %s stp=true" % bridge) for eth in interfaces: self.runBridgeCmd("add-port %s %s" % (bridge, eth)) cli = self.cli() cli.runCmd("sudo ifconfig %s up" % bridge) for eth in interfaces: cli.runCmd("sudo ifconfig %s up" % eth)
def revertToInitialSnapshot(self, logLevel=logging.INFO): log.info("=== Reverting to initial snapshot on node %s", self.name()) if self.imageMode() == "snapshot": self.revertToSnapshot("initial", logLevel) self.serialLogin(logLevel) cli = bigtest.cli.Cli(self.serialConsole(logLevel), self.imageType()) cli.runCmd("sudo hwclock -s -u") elif self.imageMode() == "persistent": self.powerOff() bigtest.run("rm -f %s" % self.image()) bigtest.run("cp %s.initial %s" % (self.image(), self.image())) self.powerOn() log.info("=== Finished reverting to initial snapshot on node %s", self.name())
def startVm(self, name, spec, datastore, wait_for_migration=False): cli = self.cli() # create vm folder vm_dir = os.path.join(datastore, name) cli.runCmd("sudo mkdir -p %s" % vm_dir) # copy vmdk file defaultMount = os.path.join("/mnt", spec.nfsHost, os.path.basename(spec.nfsShare)) mount = self.mountNas(spec.nfsHost, spec.nfsShare, defaultMount) srcVmdk = os.path.join(mount, spec.vmdkPath) dstVmdk = os.path.join(vm_dir, os.path.basename(spec.vmdkPath)) cli.runCmd("sudo cp %s %s" % (srcVmdk, dstVmdk)) # serial serial = self.serialCounter() self.setSerialCounter(serial + 1) monitor = self.monitorCounter() self.setMonitorCounter(monitor + 1) # network mac = "52:54:00:%02x:%02x:%02x" % ((hash(name) >> 16) & 0xff, (hash(name) >> 8) & 0xff, hash(name) & 0xff) ifup = "/etc/ovs-ifup" # ovs-br0 ifdown = "/etc/ovs-ifdown" # ovs-br0 # start kvm cmdline = ("sudo kvm " "-name %s " "-daemonize " "-nographic " "-serial telnet::%d,server,nowait " "-qmp telnet::%d,server,nowait " "-m %s " "-hda %s " "-net nic,macaddr=%s " "-net tap,script=%s,downscript=%s " % (name, serial, monitor, spec.memory, dstVmdk, mac, ifup, ifdown)) if wait_for_migration: cmdline += " -incoming tcp:0:%d " % (monitor+1000) self.setCmdline(cmdline) ret = cli.runCmd(cmdline) self.setCreatedVms((self.createdVms()) + [name]) return (ret, serial)
def getIPFromSerial(self, logLevel=logging.DEBUG): self.serialLogin(logLevel) cli = bigtest.cli.Cli(self.serialConsole(logLevel)) cli.gotoBashMode() output = cli.runCmd("ifconfig eth0") m = re.search(r"inet addr:([^\s]+)", output, re.M) bigtest.Assert(m and m.group(1) != "") return m.group(1)
def runSerialCmd(self, cmd, interval=5, timeout=600): exception = Exception("Unknown exception in runSerialCmd()") timeout_ = time.time() + timeout while time.time() < timeout_: try: console = self.serialConsole() username = self.username() self.doSerialLogin(console, username, r"\r\n[-.\w]+ login: "******"linux") return cli.runCmd(cmd) except Exception, e: exception = e self.serialConsole_ = None bigtest.log.error("runSerialCmd() failed...") time.sleep(interval)
def mountNas(self, server, share, mount): cli = self.cli() # check if already mounted pat = re.compile(r"%s:%s on ([^\s]+)" % (re.escape(server), re.escape(share))) for line in cli.runCmd("mount").split("\n"): m = pat.search(line) if m: return m.group(1) cli.runCmd("sudo mkdir -p %s" % mount) cli.runCmd("sudo sh -c 'echo \"%s:%s %s nfs rw 0 0\" >> /etc/fstab'" \ % (server, share, mount)) cli.runCmd("sudo mount -a") return mount
def shutdown(self, delay=0, waitForState=False): cli = self.cli(logging.DEBUG) cli.gotoBashMode() cli.runCmd("sudo shutdown -h %d" % delay) if waitForState: bigtest.waitForProcessToStop(self.pid())
def reboot(self): cli = self.cli(logging.DEBUG) cli.gotoBashMode() cli.runCmd("sudo reboot")
def shutdown(self, delay=0): cli = self.cli(logging.DEBUG) cli.gotoBashMode() cli.runCmd("sudo shutdown -h %d" % delay)
def runBridgeCmd(self, cmd): cli = self.cli() return cli.runCmd("sudo ovs-vsctl --no-wait %s" % cmd)
def runOVSCmd(self, cmd): cli = self.cli() return cli.runCmd("sudo ovs-vsctl %s" % cmd)