SHA256
1
0
forked from pool/xen
OBS User unknown
2007-03-06 08:12:51 +00:00
committed by Git OBS Bridge
parent 39a4f201bc
commit 759005f5a4
19 changed files with 1934 additions and 181 deletions

View File

@@ -1,3 +1,51 @@
Index: xen-3.0.4-testing/tools/python/xen/xend/XendBootloader.py
===================================================================
--- xen-3.0.4-testing.orig/tools/python/xen/xend/XendBootloader.py
+++ xen-3.0.4-testing/tools/python/xen/xend/XendBootloader.py
@@ -14,6 +14,7 @@
import os, select, errno, stat
import random
+import re
import shlex
from xen.xend import sxp
@@ -57,6 +58,8 @@ def bootloader(blexec, disk, quiet = Fal
args.append("-q")
if dryrun:
args.append("--dryrun")
+ if kernel_args:
+ args.append("--args=%s" % kernel_args)
args.append("--output=%s" % fifo)
if blargs:
args.extend(shlex.split(blargs))
@@ -97,3 +100,26 @@ def bootloader(blexec, disk, quiet = Fal
pin.input_eof()
blcfg = pin.val
return blcfg
+
+def bootfilter(bootloader, bootloader_args, vdisk):
+ """Is this virtual disk ok to boot from?"""
+ if vdisk.endswith(':disk'):
+ vdisk = vdisk[:-5] # temporary work-around for bug 237414
+ if bootloader.endswith('domUloader.py'):
+ for arg in bootloader_args.split():
+ if arg.startswith('--entry='):
+ m = re.match(r'^([hsx]v?d[a-z])[0-9]*:[^,]*(,[^,]*)?$', arg[8:])
+ if m:
+ return vdisk == m.group(1) or vdisk == m.group(2)
+ return True
+
+def bootselector(bootloader, bootloader_args, disks):
+ """Returns the desired disk to boot from.
+ @param disks List of (pdev, vdev, ...) tuples.
+ """
+ if bootloader.endswith('domUloader.py'):
+ for disk in disks:
+ if bootfilter(bootloader, bootloader_args, disk[1]):
+ return disk
+ return disks[0]
+
Index: xen-3.0.4-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.0.4-testing.orig/tools/python/xen/xend/XendDomainInfo.py
@@ -30,45 +78,6 @@ Index: xen-3.0.4-testing/tools/python/xen/xend/XendDomainInfo.py
fn = blkdev_uname_to_file(disk)
mounted = devtype == 'tap' and not os.stat(fn).st_rdev
if mounted:
Index: xen-3.0.4-testing/tools/python/xen/xend/XendBootloader.py
===================================================================
--- xen-3.0.4-testing.orig/tools/python/xen/xend/XendBootloader.py
+++ xen-3.0.4-testing/tools/python/xen/xend/XendBootloader.py
@@ -14,6 +14,7 @@
import os, select, errno, stat
import random
+import re
import shlex
from xen.xend import sxp
@@ -97,3 +98,26 @@ def bootloader(blexec, disk, quiet = Fal
pin.input_eof()
blcfg = pin.val
return blcfg
+
+def bootfilter(bootloader, bootloader_args, vdisk):
+ """Is this virtual disk ok to boot from?"""
+ if vdisk.endswith(':disk'):
+ vdisk = vdisk[:-5] # temporary work-around for bug 237414
+ if bootloader.endswith('domUloader.py'):
+ for arg in bootloader_args.split():
+ if arg.startswith('--entry='):
+ m = re.match(r'^([hsx]v?d[a-z])[0-9]*:[^,]*(,[^,]*)?$', arg[8:])
+ if m:
+ return vdisk == m.group(1) or vdisk == m.group(2)
+ return True
+
+def bootselector(bootloader, bootloader_args, disks):
+ """Returns the desired disk to boot from.
+ @param disks List of (pdev, vdev, ...) tuples.
+ """
+ if bootloader.endswith('domUloader.py'):
+ for disk in disks:
+ if bootfilter(bootloader, bootloader_args, disk[1]):
+ return disk
+ return disks[0]
+
Index: xen-3.0.4-testing/tools/python/xen/xm/create.py
===================================================================
--- xen-3.0.4-testing.orig/tools/python/xen/xm/create.py
@@ -82,7 +91,7 @@ Index: xen-3.0.4-testing/tools/python/xen/xm/create.py
from xen.util import blkif
from xen.util import security
@@ -710,14 +710,15 @@ def run_bootloader(vals, config_image):
@@ -710,16 +710,18 @@ def run_bootloader(vals, config_image):
err("Bootloader '%s' isn't executable" % vals.bootloader)
if len(vals.disk) < 1:
err("No disks configured and boot loader requested")
@@ -98,5 +107,9 @@ Index: xen-3.0.4-testing/tools/python/xen/xm/create.py
+ uname = bootdisk[0]
+ file = blkif.blkdev_uname_to_file(uname)
return bootloader(vals.bootloader, file, not vals.console_autoconnect,
vals.bootargs, config_image)
- vals.bootargs, config_image)
+ vals.bootargs,
+ kernel_args = sxp.child_value(config_image, 'args'))
def make_config(vals):
"""Create the domain configuration.