[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Refactor code to encapsulate architecture decisions in one place.
# HG changeset patch # User Ewan Mellor <ewan@xxxxxxxxxxxxx> # Node ID 4d5e9f9caed2c4b84e949de07872a5f43e34ec2b # Parent 1d455b1f126b7d72d30e6f80341af8a999369ba4 Refactor code to encapsulate architecture decisions in one place. Also includes some whitespace fixes. Signed-off-by: Tony Breeds <tony@xxxxxxxxxxxxxxxxxx> --- tools/xm-test/lib/XmTestLib/XenDomain.py | 73 ++++---------------- tools/xm-test/lib/XmTestLib/arch.py | 102 +++++++++++++++++++++++++++++ tools/xm-test/lib/XmTestReport/OSReport.py | 10 -- tools/xm-test/lib/XmTestReport/arch.py | 42 +++++++++++ 4 files changed, 161 insertions(+), 66 deletions(-) diff -r 1d455b1f126b -r 4d5e9f9caed2 tools/xm-test/lib/XmTestLib/XenDomain.py --- a/tools/xm-test/lib/XmTestLib/XenDomain.py Mon Oct 23 10:09:40 2006 +0100 +++ b/tools/xm-test/lib/XmTestLib/XenDomain.py Mon Oct 23 10:14:13 2006 +0100 @@ -20,34 +20,23 @@ import sys import commands -import os import re import time from Xm import * +from arch import * from Test import * from config import * from Console import * from XenDevice import * from acm import * -BLOCK_ROOT_DEV = "hda" - -def getDeviceModel(): - """Get the path to the device model based on - the architecture reported in uname""" - arch = os.uname()[4] - if re.search("64", arch): - return "/usr/lib64/xen/bin/qemu-dm" - else: - return "/usr/lib/xen/bin/qemu-dm" def getDefaultKernel(): - """Get the path to the default DomU kernel""" - dom0Ver = commands.getoutput("uname -r"); - domUVer = dom0Ver.replace("xen0", "xenU"); - - return "/boot/vmlinuz-" + domUVer; + return arch.getDefaultKernel() + +def getRdPath(): + return arch.getRdPath() def getUniqueName(): """Get a uniqueish name for use in a domain""" @@ -56,43 +45,8 @@ def getUniqueName(): test_name = re.sub("\.test", "", test_name) test_name = re.sub("[\/\.]", "", test_name) name = "%s-%i" % (test_name, unixtime) - + return name - -def getRdPath(): - rdpath = os.environ.get("RD_PATH") - if not rdpath: - rdpath = "../../ramdisk" - rdpath = os.path.abspath(rdpath) - - return rdpath - -ParavirtDefaults = {"memory" : 64, - "vcpus" : 1, - "kernel" : getDefaultKernel(), - "root" : "/dev/ram0", - "ramdisk" : getRdPath() + "/initrd.img" - } -HVMDefaults = {"memory" : 64, - "vcpus" : 1, - "acpi" : 0, - "apic" : 0, - "disk" : ["file:%s/disk.img,ioemu:%s,w!" % - (getRdPath(), BLOCK_ROOT_DEV)], - "kernel" : "/usr/lib/xen/boot/hvmloader", - "builder" : "hvm", - "sdl" : 0, - "vnc" : 0, - "vncviewer" : 0, - "nographic" : 1, - "serial" : "pty", - "device_model" : getDeviceModel() - } - -if ENABLE_HVM_SUPPORT: - configDefaults = HVMDefaults -else: - configDefaults = ParavirtDefaults class XenConfig: """An object to help create a xen-compliant config file""" @@ -145,7 +99,8 @@ class XenConfig: def setOpt(self, name, value): """Set an option in the config""" - if name in self.opts.keys() and isinstance(self.opts[name], list) and not isinstance(value, list): + if name in self.opts.keys() and isinstance(self.opts[name] , + list) and not isinstance(value, list): self.opts[name] = [value] else: self.opts[name] = value @@ -182,7 +137,7 @@ class DomainError(Exception): self.errorcode = int(errorcode) except Exception, e: self.errorcode = -1 - + def __str__(self): return str(self.msg) @@ -204,7 +159,7 @@ class XenDomain: self.devices = {} self.netEnv = "bridge" - # Set domain type, either PV for ParaVirt domU or HVM for + # Set domain type, either PV for ParaVirt domU or HVM for # FullVirt domain if ENABLE_HVM_SUPPORT: self.type = "HVM" @@ -337,7 +292,8 @@ class XenDomain: class XmTestDomain(XenDomain): - def __init__(self, name=None, extraConfig=None, baseConfig=configDefaults): + def __init__(self, name=None, extraConfig=None, + baseConfig=arch.configDefaults): """Create a new xm-test domain @param name: The requested domain name @param extraConfig: Additional configuration options @@ -356,11 +312,12 @@ class XmTestDomain(XenDomain): XenDomain.__init__(self, config.getOpt("name"), config=config) def minSafeMem(self): - return 32 + return arch.minSafeMem class XmTestNetDomain(XmTestDomain): - def __init__(self, name=None, extraConfig=None, baseConfig=configDefaults): + def __init__(self, name=None, extraConfig=None, + baseConfig=arch.configDefaults): """Create a new xm-test domain with one network device @param name: The requested domain name @param extraConfig: Additional configuration options diff -r 1d455b1f126b -r 4d5e9f9caed2 tools/xm-test/lib/XmTestReport/OSReport.py --- a/tools/xm-test/lib/XmTestReport/OSReport.py Mon Oct 23 10:09:40 2006 +0100 +++ b/tools/xm-test/lib/XmTestReport/OSReport.py Mon Oct 23 10:14:13 2006 +0100 @@ -29,6 +29,7 @@ import os import os import commands import sys +import arch class Machine: @@ -89,8 +90,6 @@ class Machine: self.values = {} self.errors = 0 - cpuValues = {"model_name" : "Unknown", - "flags" : "Unknown"} xenValues = {"nr_cpus" : "Unknown", "nr_nodes" : "Unknown", "sockets_per_node" : "Unknown", @@ -100,12 +99,7 @@ class Machine: "total_memory" : "Unknown"} xen = self.__getXenInfo(xenValues) - cpu = self.__getCpuInfo(cpuValues) - - if cpu["model_name"] == "Unknown": - cpuValues={"arch" : "Unknown", - "features": "Unknown"} - cpu=self.__getCpuInfo(cpuValues) + cpu = self.__getCpuInfo(arch.cpuValues) for k in xen.keys(): self.values[k] = xen[k] diff -r 1d455b1f126b -r 4d5e9f9caed2 tools/xm-test/lib/XmTestLib/arch.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/xm-test/lib/XmTestLib/arch.py Mon Oct 23 10:14:13 2006 +0100 @@ -0,0 +1,102 @@ +#!/usr/bin/python +""" + arch.py - Encapsulate all logic regarding what type of hardware xen + is running on to make adding new platforms easier. + + Copyright (C) 2006 Tony Breeds IBM Corporation + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; under version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +""" + +import os +import re +import config +import commands + +BLOCK_ROOT_DEV = "hda" + +# This isn't truly platform related but it makes the code tidier +def getRdPath(): + """Locate the full path to ramdisks needed by domUs""" + rdpath = os.environ.get("RD_PATH") + if not rdpath: + rdpath = "../../ramdisk" + rdpath = os.path.abspath(rdpath) + + return rdpath + +# Begin: Intel ia32 and ia64 as well as AMD 32-bit and 64-bit processors +def ia_minSafeMem(): + return 32 + +def ia_getDeviceModel(): + """Get the path to the device model based on + the architecture reported in uname""" + architecture = os.uname()[4] + if re.search("64", architecture): + return "/usr/lib64/xen/bin/qemu-dm" + else: + return "/usr/lib/xen/bin/qemu-dm" + +def ia_getDefaultKernel(): + """Get the path to the default DomU kernel""" + dom0Ver = commands.getoutput("uname -r"); + domUVer = dom0Ver.replace("xen0", "xenU"); + + return "/boot/vmlinuz-" + domUVer; + +ia_ParavirtDefaults = {"memory" : 64, + "vcpus" : 1, + "kernel" : ia_getDefaultKernel(), + "root" : "/dev/ram0", + "ramdisk" : getRdPath() + "/initrd.img", +} +ia_HVMDefaults = {"memory" : 64, + "vcpus" : 1, + "acpi" : 0, + "apic" : 0, + "disk" : ["file:%s/disk.img,ioemu:%s,w!" % + (getRdPath(), BLOCK_ROOT_DEV)], + "kernel" : "/usr/lib/xen/boot/hvmloader", + "builder" : "hvm", + "sdl" : 0, + "vnc" : 0, + "vncviewer" : 0, + "nographic" : 1, + "serial" : "pty", + "device_model" : ia_getDeviceModel(), +} +# End : Intel ia32 and ia64 as well as AMD 32-bit and 64-bit processors + +"""Convert from uname specification to a more general platform.""" +_uname_to_arch_map = { + "i386" : "x86", + "i486" : "x86", + "i586" : "x86", + "i686" : "x86", + "ia64" : "ia64", +} + +# Lookup current platform. +_arch = _uname_to_arch_map.get(os.uname()[4], "Unknown") +if _arch == "x86" or _arch == "ia64": + minSafeMem = ia_minSafeMem + getDefaultKernel = ia_getDefaultKernel + if config.ENABLE_HVM_SUPPORT: + configDefaults = ia_HVMDefaults + else: + configDefaults = ia_ParavirtDefaults +else: + raise ValueError, "Unknown architecture!" diff -r 1d455b1f126b -r 4d5e9f9caed2 tools/xm-test/lib/XmTestReport/arch.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/xm-test/lib/XmTestReport/arch.py Mon Oct 23 10:14:13 2006 +0100 @@ -0,0 +1,42 @@ +#!/usr/bin/python +""" + arch.py - Encapsulate all logic regarding what type of hardware xen + is running on to make adding new platforms easier. + + Copyright (C) 2006 Tony Breeds IBM Corporation + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; under version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +""" + +import os + +"""Convert from uname specification to a more general platform.""" +_uname_to_arch_map = { + "i386" : "x86", + "i486" : "x86", + "i586" : "x86", + "i686" : "x86", + "ia64" : "ia64", +} + +_arch = _uname_to_arch_map.get(os.uname()[4], "Unknown") +if _arch == "x86": + cpuValues = {"model_name" : "Unknown", + "flags" : "Unknown"} +elif _arch == "ia64": + cpuValues = {"arch" : "Unknown", + "features" : "Unknown"} +else: + raise ValueError, "Unknown architecture!" _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |