Move ImageHandler registration into image.py from XendDomainInfo.py. Move

ImageHandler.create and findImageHandlerClass to the module level, and inline
addImageHandlerClass.  Move ImageHandler.kernel, ramdisk, cmdline, and flags,
which seem inadvertently to have been declared as class variables, and make
them instance variables instead.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
This commit is contained in:
emellor@ewan committed 2005-09-24 20:36:15 +01:00
1 parent 395b1e96a0
commit de9520f69b
2 files changed
+44 -68

No files matched your search

+4 -16
View File
@@ -34,6 +34,7 @@ from xen.util.blkif import blkdev_uname_to_file
from xen.xend.server.channel import EventChannel
from xen.xend import image
from xen.xend import sxp
from xen.xend.XendBootloader import bootloader
from xen.xend.XendLogging import log
@@ -734,9 +735,9 @@ class XendDomainInfo:
if 'image' not in self.info:
raise VmError('Missing image in configuration')
self.image = ImageHandler.create(self,
self.info['image'],
self.info['device'])
self.image = image.create(self,
self.info['image'],
self.info['device'])
if self.domid <= 0:
raise VmError('Creating domain failed: name=%s' %
@@ -1085,19 +1086,6 @@ class XendDomainInfo:
return name in self.info and self.info[name] is not None
#============================================================================
# Register image handlers.
from image import \
addImageHandlerClass, \
ImageHandler, \
LinuxImageHandler, \
VmxImageHandler
addImageHandlerClass(LinuxImageHandler)
addImageHandlerClass(VmxImageHandler)
#============================================================================
# Register device controllers and their device config types.
+40 -52
View File
@@ -33,6 +33,15 @@ xc = xen.lowlevel.xc.new()
MAX_GUEST_CMDLINE = 1024
def create(vm, imageConfig, deviceConfig):
"""Create an image handler for a vm.
@return ImageHandler instance
"""
return findImageHandlerClass(imageConfig)(vm, imageConfig, deviceConfig)
class ImageHandler:
"""Abstract base class for image handlers.
@@ -48,64 +57,19 @@ class ImageHandler:
The method destroy() is called when the domain is destroyed.
The default is to do nothing.
"""
#======================================================================
# Class vars and methods.
"""Table of image handler classes for virtual machine images.
Indexed by image type.
"""
imageHandlerClasses = {}
def addImageHandlerClass(cls, h):
"""Add a handler class for an image type
@param h: handler: ImageHandler subclass
"""
cls.imageHandlerClasses[h.ostype] = h
addImageHandlerClass = classmethod(addImageHandlerClass)
def findImageHandlerClass(cls, image):
"""Find the image handler class for an image config.
@param image config
@return ImageHandler subclass or None
"""
ty = sxp.name(image)
if ty is None:
raise VmError('missing image type')
imageClass = cls.imageHandlerClasses.get(ty)
if imageClass is None:
raise VmError('unknown image type: ' + ty)
return imageClass
findImageHandlerClass = classmethod(findImageHandlerClass)
def create(cls, vm, imageConfig, deviceConfig):
"""Create an image handler for a vm.
@return ImageHandler instance
"""
imageClass = cls.findImageHandlerClass(imageConfig)
return imageClass(vm, imageConfig, deviceConfig)
create = classmethod(create)
#======================================================================
# Instance vars and methods.
ostype = None
kernel = None
ramdisk = None
cmdline = None
flags = 0
def __init__(self, vm, imageConfig, deviceConfig):
self.vm = vm
self.kernel = None
self.ramdisk = None
self.cmdline = None
self.flags = 0
self.configure(imageConfig, deviceConfig)
def configure(self, imageConfig, _):
@@ -197,7 +161,6 @@ class ImageHandler:
if d.has_key('console_mfn'):
self.vm.setConsoleRef(d.get('console_mfn'))
addImageHandlerClass = ImageHandler.addImageHandlerClass
class LinuxImageHandler(ImageHandler):
@@ -425,3 +388,28 @@ class VmxImageHandler(ImageHandler):
return 16 * 1024
else:
return (1 + ((mem_mb + 3) >> 2)) * 4
"""Table of image handler classes for virtual machine images. Indexed by
image type.
"""
imageHandlerClasses = {}
for h in LinuxImageHandler, VmxImageHandler:
imageHandlerClasses[h.ostype] = h
def findImageHandlerClass(image):
"""Find the image handler class for an image config.
@param image config
@return ImageHandler subclass or None
"""
ty = sxp.name(image)
if ty is None:
raise VmError('missing image type')
imageClass = imageHandlerClasses.get(ty)
if imageClass is None:
raise VmError('unknown image type: ' + ty)
return imageClass
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.