# HG changeset patch # User "Jeremy Katz " # Node ID c2a79e27b4ff96984324a78b4a73a98d66761808 # Parent d7782f96c70b28f65395d5dd8dd1d703e270ba72 Instead of just having the bootloader config sxp replace anything else, merge with given values. This will allow a bootloader to not have to specify everything. diff -r d7782f96c70b -r c2a79e27b4ff tools/python/xen/xend/XendBootloader.py --- a/tools/python/xen/xend/XendBootloader.py Tue May 02 18:15:55 2006 -0400 +++ b/tools/python/xen/xend/XendBootloader.py Wed May 03 15:13:39 2006 -0400 @@ -19,7 +19,7 @@ from XendLogging import log from XendLogging import log from XendError import VmError -def bootloader(blexec, disk, quiet = 0, blargs = None): +def bootloader(blexec, disk, quiet = 0, blargs = None, imgcfg = None): """Run the boot loader executable on the given disk and return a config image. @param blexec Binary to use as the boot loader @@ -86,4 +86,10 @@ def bootloader(blexec, disk, quiet = 0, pin = sxp.Parser() pin.input(ret) pin.input_eof() - return pin.val + blcfg = pin.val + + if imgcfg is None: + return blcfg + else: + c = sxp.merge(blcfg, imgcfg) + return c diff -r d7782f96c70b -r c2a79e27b4ff tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Tue May 02 18:15:55 2006 -0400 +++ b/tools/python/xen/xend/XendDomainInfo.py Wed May 03 15:13:39 2006 -0400 @@ -1633,7 +1633,8 @@ class XendDomainInfo: continue fn = blkdev_uname_to_file(disk) blcfg = bootloader(self.info['bootloader'], fn, 1, - self.info['bootloader_args']) + self.info['bootloader_args'], + self.info['image']) break if blcfg is None: msg = "Had a bootloader specified, but can't find disk" diff -r d7782f96c70b -r c2a79e27b4ff tools/python/xen/xm/create.py --- a/tools/python/xen/xm/create.py Tue May 02 18:15:55 2006 -0400 +++ b/tools/python/xen/xm/create.py Wed May 03 15:13:39 2006 -0400 @@ -448,8 +448,11 @@ def configure_image(vals): def configure_image(vals): """Create the image config. """ + if not vals.builder: + return None config_image = [ vals.builder ] - config_image.append([ 'kernel', os.path.abspath(vals.kernel) ]) + if vals.kernel: + config_image.append([ 'kernel', os.path.abspath(vals.kernel) ]) if vals.ramdisk: config_image.append([ 'ramdisk', os.path.abspath(vals.ramdisk) ]) if vals.cmdline_ip: @@ -616,7 +619,7 @@ def configure_hvm(config_image, vals): if (vals.__dict__[a]): config_image.append([a, vals.__dict__[a]]) -def run_bootloader(vals): +def run_bootloader(vals, config_image): if not os.access(vals.bootloader, os.X_OK): err("Bootloader isn't executable") if len(vals.disk) < 1: @@ -630,7 +633,7 @@ def run_bootloader(vals): vals.bootargs = "--entry=%s" %(vals.bootentry,) return bootloader(vals.bootloader, file, not vals.console_autoconnect, - vals.bootargs) + vals.bootargs, config_image) def make_config(vals): """Create the domain configuration. @@ -662,13 +665,12 @@ def make_config(vals): if vals.tpmif: config.append(['backend', ['tpmif']]) + config_image = configure_image(vals) if vals.bootloader: - config_image = run_bootloader(vals) + config_image = run_bootloader(vals, config_image) config.append(['bootloader', vals.bootloader]) if vals.bootargs: config.append(['bootloader_args'], vals.bootargs) - else: - config_image = configure_image(vals) config.append(['image', config_image]) config_devs = []