You are viewing a plain text version of this content. The canonical link for it is here.
Posted to tashi-commits@incubator.apache.org by mr...@apache.org on 2009/03/04 19:58:30 UTC
svn commit: r750129 - in /incubator/tashi/trunk/src/tashi:
nodemanager/vmcontrol/qemu.py util.py
Author: mryan3
Date: Wed Mar 4 19:58:30 2009
New Revision: 750129
URL: http://svn.apache.org/viewvc?rev=750129&view=rev
Log:
Update of qemu backend to support booting VMs with multiple NICs and multiple disks.
Modified:
incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py
incubator/tashi/trunk/src/tashi/util.py
Modified: incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py
URL: http://svn.apache.org/viewvc/incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py?rev=750129&r1=750128&r2=750129&view=diff
==============================================================================
--- incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py (original)
+++ incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py Wed Mar 4 19:58:30 2009
@@ -28,7 +28,7 @@
import time
from tashi.services.ttypes import *
-from tashi.util import broken, logged
+from tashi.util import broken, logged, scrubString
from vmcontrolinterface import VmControlInterface
log = logging.getLogger(__file__)
@@ -285,22 +285,28 @@
def startVm(self, instance, source):
"""Universal function to start a VM -- used by instantiateVM, resumeVM, and prepReceiveVM"""
- global lastCmd
- (image, macAddr, memory, cores, diskModel, instanceId, opts) = self.instanceToOld(instance)
+ clockString = instance.hints.get("clock", "dynticks")
+ diskInterface = instance.hints.get("diskInterface", "ide")
+ diskString = ""
+ for index in range(0, len(instance.disks)):
+ disk = instance.disks[index]
+ uri = scrubString(disk.uri)
+ imageLocal = self.dfs.getLocalHandle("images/" + uri)
+ if (disk.persistent):
+ snapshot = "off"
+ else:
+ snapshot = "on"
+ diskString = diskString + "-drive file=%s,if=%s,index=%d,snapshot=%s,media=disk " % (imageLocal, diskInterface, index, snapshot)
+ nicModel = instance.hints.get("nicModel", "e1000")
+ nicString = ""
+ for nic in instance.nics:
+ nicString = nicString + "-net nic,macaddr=%s,model=%s,vlan=%d -net tap,vlan=%d,script=/etc/qemu-ifup.%d " % (nic.mac, nicModel, nic.network, nic.network, nic.network)
if (not source):
sourceString = ""
else:
sourceString = "-incoming %s" % (source)
- if (diskModel == "persistent"):
- snapshotString = ""
- else:
- snapshotString = "-snapshot"
- modelString = opts.get("nicModel", "e1000")
- clockString = opts.get("clock", "dynticks")
- imageLocal = self.dfs.getLocalHandle("images/" + image)
- cmd = "%s -clock %s %s -hda %s -net nic,macaddr=%s,model=%s -net tap -m %d -smp %d -serial none -vnc none -monitor pty %s" % (self.QEMU_BIN, clockString, snapshotString, imageLocal, macAddr, modelString, memory, cores, sourceString)
+ cmd = "%s -clock %s %s %s -m %d -smp %d -serial none -vnc none -monitor pty %s" % (self.QEMU_BIN, clockString, diskString, nicString, instance.memory, instance.cores, sourceString)
log.info("QEMU command: %s" % (cmd))
- lastCmd = cmd
cmd = cmd.split()
(pipe_r, pipe_w) = os.pipe()
pid = os.fork()
Modified: incubator/tashi/trunk/src/tashi/util.py
URL: http://svn.apache.org/viewvc/incubator/tashi/trunk/src/tashi/util.py?rev=750129&r1=750128&r2=750129&view=diff
==============================================================================
--- incubator/tashi/trunk/src/tashi/util.py (original)
+++ incubator/tashi/trunk/src/tashi/util.py Wed Mar 4 19:58:30 2009
@@ -255,6 +255,13 @@
r = s[index+len(field):]
return (l, sep, r)
+def scrubString(s, allowed="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_."):
+ ns = ""
+ for c in s:
+ if (c in allowed):
+ ns = ns + c
+ return ns
+
def createClient(config):
cfgHost = config.get('Client', 'clusterManagerHost')
cfgPort = config.get('Client', 'clusterManagerPort')