bitkeeper revision 1.466 (3f74af20jRDu98OIOzjbFFgBNLz47g)
authortlh20@labyrinth.cl.cam.ac.uk <tlh20@labyrinth.cl.cam.ac.uk>
Fri, 26 Sep 2003 21:26:56 +0000 (21:26 +0000)
committertlh20@labyrinth.cl.cam.ac.uk <tlh20@labyrinth.cl.cam.ac.uk>
Fri, 26 Sep 2003 21:26:56 +0000 (21:26 +0000)
Many files:
  Add -x option to xenctl to give number to subst for + in patterns

tools/control/src/org/xenoserver/cmdline/ParseDomainNew.java
tools/control/src/org/xenoserver/cmdline/ParsePhysicalGrant.java
tools/control/src/org/xenoserver/cmdline/ParsePhysicalRevoke.java
tools/control/src/org/xenoserver/cmdline/ParseVbdCreate.java
tools/control/src/org/xenoserver/control/CommandDomainNew.java
tools/control/src/org/xenoserver/control/CommandPhysicalGrant.java
tools/control/src/org/xenoserver/control/CommandPhysicalRevoke.java
tools/control/src/org/xenoserver/control/CommandVbdCreatePhysical.java

index 132c9eff3b09a3e6fe3e66d74c9d984b254c0469..a59fe4803000727df7a085256c6acbd80dbba6c6 100644 (file)
@@ -27,6 +27,7 @@ public class ParseDomainNew extends CommandParser {
         String nw_mask = getStringParameter(args, 'm', d.nwMask);
         String nw_nfs_server = getStringParameter(args, 's', d.nwNFSServer);
         String nw_host = getStringParameter(args, 'h', d.nwHost);
+       int subst = getIntParameter(args, 'x', -1);
 
         d.describe();
 
@@ -47,7 +48,8 @@ public class ParseDomainNew extends CommandParser {
                 nw_mask,
                 nw_nfs_server,
                 nw_host,
-                usr_dev);
+                usr_dev,
+               subst);
         c.execute();
         String[] output = c.output();
         for (int i = 0; i < output.length; i++) {
@@ -57,7 +59,7 @@ public class ParseDomainNew extends CommandParser {
         if (root_dev.startsWith("/dev/sda") || root_dev.startsWith("/dev/hda")) {
             String real_root = StringPattern.parse(root_dev).resolve(c.domain_id());
             String device = real_root.substring(real_root.indexOf('/',1)+1);
-            CommandPhysicalGrant cg = new CommandPhysicalGrant(d,c.domain_id(),device,Mode.READ_WRITE,false);
+            CommandPhysicalGrant cg = new CommandPhysicalGrant(d,c.domain_id(),device,Mode.READ_WRITE,false,subst);
             String output2 = cg.execute();
             if ( output2 != null ) {
                 System.out.println(output2);
@@ -67,7 +69,7 @@ public class ParseDomainNew extends CommandParser {
         if (usr_dev != null && ((usr_dev.startsWith("/dev/sda")) || usr_dev.startsWith("/dev/hda"))) {
             String real_usr = StringPattern.parse(usr_dev).resolve(c.domain_id());
             String device = real_usr.substring(real_usr.indexOf('/',1)+1);
-            CommandPhysicalGrant cg = new CommandPhysicalGrant(d,c.domain_id(),device,Mode.READ_ONLY,false);
+            CommandPhysicalGrant cg = new CommandPhysicalGrant(d,c.domain_id(),device,Mode.READ_ONLY,false,subst);
             String output2 = cg.execute();
             if ( output2 != null ) {
                 System.out.println(output2);
@@ -80,7 +82,7 @@ public class ParseDomainNew extends CommandParser {
     }
 
     public String getUsage() {
-        return "[-n<domain_name>] [-k<size>] [-i<image>] [-v<num_vifs>] [-r<initrd>] [-d<root_device>] [-t<root_mount_args>] [-u<usr_device>] [-f<nfs_root>] [-s<nfs_boot_server>] [-4<ipv4_boot_address>] [-g<ipv4_boot_gateway>] [-m<ipv4_boot_netmask>] [-h<hostname>] [-a<args>]";
+        return "[-n<domain_name>] [-k<size>] [-i<image>] [-v<num_vifs>] [-r<initrd>] [-d<root_device>] [-t<root_mount_args>] [-u<usr_device>] [-f<nfs_root>] [-s<nfs_boot_server>] [-4<ipv4_boot_address>] [-g<ipv4_boot_gateway>] [-m<ipv4_boot_netmask>] [-h<hostname>] [-a<args>] [-x<subst>]";
     }
 
     public String getHelpText() {
@@ -98,6 +100,7 @@ public class ParseDomainNew extends CommandParser {
             + "  -t  Root mount args (e.g ro)                 root_args\n"
             + "  -u  Usr dev/path (e.g /dev/hda3, server:path)usr_device\n"
             + "  -a  Additional boot parameters               args\n"
+            + "  -x  Number to substitute for + if not domain id\n"
             + "\n"
             + "Networking options:\n"
             + "  -f  NFS root (if /dev/nfs specified)         nw_nfs_root\n"
index 521d2e740aa3fdd8ee67fbf0dce0cae333ea7ef8..f1488cd5eb2d10a524fb8d6dae81416125bd6614 100644 (file)
@@ -14,6 +14,7 @@ public class ParsePhysicalGrant extends CommandParser {
         boolean force = getFlagParameter(args, 'f');
         String partition_name = getStringParameter(args, 'p', "");
         boolean write = getFlagParameter(args, 'w');
+       int subst = getIntParameter(args, 'x', -1);
 
         if (domain_id == 0) {
             throw new ParseFailedException("Expected -n<domain_id>");
@@ -32,7 +33,7 @@ public class ParsePhysicalGrant extends CommandParser {
         // Initialise the partition manager and look up the partition
         loadState();
         String output =
-            new CommandPhysicalGrant(d, domain_id, partition_name, mode, force)
+            new CommandPhysicalGrant(d, domain_id, partition_name, mode, force,subst)
                 .execute();
         if (output != null) {
             System.out.println(output);
@@ -44,7 +45,7 @@ public class ParsePhysicalGrant extends CommandParser {
     }
 
     public String getUsage() {
-        return "-p<partition_name> [-n<domain_id>] [-f] [-w]";
+        return "-p<partition_name> [-n<domain_id>] [-f] [-w] [-x<subst>]";
     }
 
     public String getHelpText() {
index e53a16ab39f9c2663267a5914eecf84ea23c3844..a2490256a739d080402af131f4f389150b5443c7 100644 (file)
@@ -11,6 +11,7 @@ public class ParsePhysicalRevoke extends CommandParser {
         throws ParseFailedException, CommandFailedException {
         int domain_id = getIntParameter(args, 'n', d.domainNumber);
         String partition_name = getStringParameter(args, 'p', "");
+       int subst = getIntParameter(args, 'x', -1);
 
         if (domain_id == 0) {
             throw new ParseFailedException("Expected -n<domain_id>");
@@ -21,7 +22,7 @@ public class ParsePhysicalRevoke extends CommandParser {
 
         // Initialise the partition manager and look up the partition
         loadState();
-        String output = new CommandPhysicalRevoke(d, domain_id, partition_name).execute();
+        String output = new CommandPhysicalRevoke(d, domain_id, partition_name, subst).execute();
         if (output != null) {
             System.out.println(output);
         }
@@ -32,7 +33,7 @@ public class ParsePhysicalRevoke extends CommandParser {
     }
 
     public String getUsage() {
-        return "-p<partition_name> [-n<domain_id>]";
+        return "-p<partition_name> [-n<domain_id>] [-x<subst>]";
     }
 
     public String getHelpText() {
index e002fcf4d046992429ff6808e3abbffb2de6419a..ca59ee3c71bd212ab8839b7d1350ee056be62d61 100644 (file)
@@ -16,6 +16,7 @@ public class ParseVbdCreate extends CommandParser {
         int domain_id = getIntParameter(args, 'n', d.domainNumber);
         int vbd_num = getIntParameter(args, 'v', -1);
         boolean write = getFlagParameter(args, 'w');
+       int subst = getIntParameter(args, 'x', -1);
 
         if (vd_key.equals("") && partition_name.equals("")) {
             throw new ParseFailedException("Expected -k<key> or -p<partition>");
@@ -37,7 +38,7 @@ public class ParseVbdCreate extends CommandParser {
         loadState();
         String output;
         if (vd_key.equals("")) {
-            output = new CommandVbdCreatePhysical(d,  partition_name, domain_id, vbd_num, mode ).execute();
+            output = new CommandVbdCreatePhysical(d,  partition_name, domain_id, vbd_num, mode, subst ).execute();
         } else {
             output =
                 new CommandVbdCreate(vd_key, domain_id, vbd_num, mode).execute();
@@ -53,7 +54,7 @@ public class ParseVbdCreate extends CommandParser {
     }
 
     public String getUsage() {
-        return "{-k<key>|-p<partition} -v<vbd_num> [-n<domain_id>] [-w]";
+        return "{-k<key>|-p<partition} -v<vbd_num> [-n<domain_id>] [-w] [-x<subst>]";
     }
 
     public String getHelpText() {
index a5d69c3d4adcdcb26141d0edef4fdd13df415f99..10fa06b86950001b938e432fa91bf69c7706660c 100644 (file)
@@ -52,6 +52,8 @@ public class CommandDomainNew extends Command {
     private String[] output;
     /** Domain ID created. */
     private int domain_id;
+    /** Number to substitute for + (-1 => use domain_id) */
+    private int subst;
 
     /**
      * @return Output from domain creation.
@@ -99,8 +101,9 @@ public class CommandDomainNew extends Command {
         String nw_gw,
         String nw_mask,
         String nw_nfs_server,
-        String nw_host) {
-        this(d,name,size,image,initrd,vifs,bargs,root_dev,root_args,nfs_root_path,nw_ip,nw_gw,nw_mask,nw_nfs_server,nw_host,null);
+        String nw_host,
+       int subst) {
+        this(d,name,size,image,initrd,vifs,bargs,root_dev,root_args,nfs_root_path,nw_ip,nw_gw,nw_mask,nw_nfs_server,nw_host,null,subst);
     }
     
     public CommandDomainNew(
@@ -119,7 +122,8 @@ public class CommandDomainNew extends Command {
         String nw_mask,
         String nw_nfs_server,
         String nw_host,
-        String usr_dev) {
+        String usr_dev,
+       int subst) {
             this.d = d;
             this.name = name;
             this.size = size;
@@ -136,6 +140,7 @@ public class CommandDomainNew extends Command {
             this.nw_nfs_server = nw_nfs_server;
             this.nw_host = nw_host;
             this.usr_dev = usr_dev;
+           this.subst = subst;
     }
 
     /**
@@ -211,8 +216,10 @@ public class CommandDomainNew extends Command {
                             + " domains");
                 }
 
+               if (subst == -1) subst = domain_id;
+
                 /* Set up boot parameters to pass to xi_build. */
-               bargs = StringPattern.parse(bargs).resolve(domain_id) + " ";
+               bargs = StringPattern.parse(bargs).resolve(subst) + " ";
                 if (root_dev.equals("/dev/nfs")) {
                     if (vifs == 0) {
                         throw new CommandFailedException("Cannot use NFS root without VIFs configured");
@@ -225,27 +232,27 @@ public class CommandDomainNew extends Command {
                     }
                     bargs =
                         (bargs
-                            + " root=/dev/nfs " + StringPattern.parse(root_args).resolve(domain_id) + " " 
+                            + " root=/dev/nfs " + StringPattern.parse(root_args).resolve(subst) + " " 
                             + "nfsroot="
                             + StringPattern.parse(nfs_root_path).resolve(
-                                domain_id)
+                                subst)
                             + " ");
                 } else {
                     bargs =
                         (bargs
                             + " root="
-                            + StringPattern.parse(root_dev).resolve(domain_id)
-                            + " " + StringPattern.parse(root_args).resolve(domain_id) + " ");
+                            + StringPattern.parse(root_dev).resolve(subst)
+                            + " " + StringPattern.parse(root_args).resolve(subst) + " ");
 
                 }
                 
                 if (usr_dev != null && !usr_dev.equals("")) {
-                    bargs = bargs + " usr=" + StringPattern.parse(usr_dev).resolve(domain_id) + " ";
+                    bargs = bargs + " usr=" + StringPattern.parse(usr_dev).resolve(subst) + " ";
                 }
 
                 if (vifs > 0) {
                     domain_ip =
-                        InetAddressPattern.parse(nw_ip).resolve(domain_id);
+                        InetAddressPattern.parse(nw_ip).resolve(subst);
                  /*   if (nw_host == null) {
                         try {
                             nw_host =
@@ -263,18 +270,18 @@ public class CommandDomainNew extends Command {
                                 ? ""
                                 : (InetAddressPattern
                                     .parse(nw_nfs_server)
-                                    .resolve(domain_id)))
+                                    .resolve(subst)))
                             + ":"
                             + ((nw_gw == null || nw_gw.equals(""))
                                 ? ""
                                 : (InetAddressPattern
                                     .parse(nw_gw)
-                                    .resolve(domain_id)))
+                                    .resolve(subst)))
                             + ":"
                             + ((nw_mask == null || nw_mask.equals(""))
                                 ? ""
                                 : InetAddressPattern.parse(nw_mask).resolve(
-                                    domain_id))
+                                    subst))
                             + ":"
                             + ((nw_host == null) ? "" : nw_host)
                             + ":eth0:off "
index 9ce195d7d12d9c706c533eef2b3e0b90f30b50ba..2e80e7fbca58788c5eb062b68af6dd6c72255142 100644 (file)
@@ -14,6 +14,8 @@ public class CommandPhysicalGrant extends Command {
     private Mode mode;
     /** True to force grant */
     private boolean force;
+    /** Number to substitute for + (-1 => use domain_id) */
+    private int subst;
 
     /**
      * Constructor for CommandPhysicalGrant.
@@ -28,12 +30,14 @@ public class CommandPhysicalGrant extends Command {
         int domain_id,
         String partition,
         Mode mode,
-        boolean force) {
+        boolean force,
+       int subst) {
         this.d = d;
         this.domain_id = domain_id;
         this.partition_name = partition;
         this.mode = mode;
         this.force = force;
+       this.subst = subst;
     }
 
     /**
@@ -42,7 +46,7 @@ public class CommandPhysicalGrant extends Command {
     public String execute() throws CommandFailedException {
         Runtime r = Runtime.getRuntime();
         String output = null;
-       String resolved = StringPattern.parse(partition_name).resolve(domain_id);
+       String resolved = StringPattern.parse(partition_name).resolve(subst == -1 ? domain_id : subst);
        String resolved2 = d.runCommand(d.xiToolsDir + Settings.XI_HELPER + " expand " + resolved).trim();
         Partition partition = PartitionManager.IT.getPartition(resolved2);
     
index 82766e6d803db990fbf88137f6e4fd76cda32e44..983019b8912f421553ee6812f6be5eee7e9808bc 100644 (file)
@@ -10,6 +10,8 @@ public class CommandPhysicalRevoke extends Command {
     private int domain_id;
     /** Partition to revoke access to */
     private String partition_name;
+    /** Number to substitute for + (-1 => use domain_id) */
+    private int subst;
 
     /**
      * Constructor for CommandPhysicalRevoke.
@@ -17,10 +19,11 @@ public class CommandPhysicalRevoke extends Command {
      * @param domain_id Domain to revoke access from.
      * @param partition Partition to revoke access to.
      */
-    public CommandPhysicalRevoke(Defaults d, int domain_id, String partition) {
+    public CommandPhysicalRevoke(Defaults d, int domain_id, String partition, int subst) {
         this.d = d;
         this.domain_id = domain_id;
         this.partition_name = partition;
+       this.subst = subst;
     }
 
     /**
@@ -29,7 +32,7 @@ public class CommandPhysicalRevoke extends Command {
     public String execute() throws CommandFailedException {
         Runtime r = Runtime.getRuntime();
         String output = null;
-       String resolved = StringPattern.parse(partition_name).resolve(domain_id);
+       String resolved = StringPattern.parse(partition_name).resolve(subst == -1 ? domain_id : subst);
        String resolved2 = d.runCommand(d.xiToolsDir + Settings.XI_HELPER + " expand " + resolved).trim();
         Partition partition = PartitionManager.IT.getPartition(resolved2);
 
index 9e974b2bd9712d7222bc84cd4002055bf30e2983..186514a4f014c19af06bb03b5e1089b80f93134e 100644 (file)
@@ -17,6 +17,8 @@ public class CommandVbdCreatePhysical extends Command {
     private int vbd_num;
     /** Access mode to grant. */
     private Mode mode;
+    /** Number to substitute for + (-1 => use domain_id) */
+    private int subst;
 
     /**
      * Constructor for CommandVbdCreate.
@@ -30,19 +32,21 @@ public class CommandVbdCreatePhysical extends Command {
        String partition,
         int domain_id,
         int vbd_num,
-        Mode mode) {
+        Mode mode,
+       int subst) {
         this.d = d;
         this.partition_name = partition;
         this.domain_id = domain_id;
         this.vbd_num = vbd_num;
         this.mode = mode;
+       this.subst = subst;
     }
 
     /**
      * @see org.xenoserver.control.Command#execute()
      */
     public String execute() throws CommandFailedException {
-        String resolved = StringPattern.parse(partition_name).resolve(domain_id);
+        String resolved = StringPattern.parse(partition_name).resolve(subst == -1 ? domain_id : subst);
        String resolved2 = d.runCommand(d.xiToolsDir + Settings.XI_HELPER + " expand " + resolved).trim();
         Partition partition = PartitionManager.IT.getPartition(resolved2);
         if (partition == null) {