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();
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++) {
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);
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);
}
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() {
+ " -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"
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>");
// 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);
}
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() {
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>");
// 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);
}
}
public String getUsage() {
- return "-p<partition_name> [-n<domain_id>]";
+ return "-p<partition_name> [-n<domain_id>] [-x<subst>]";
}
public String getHelpText() {
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>");
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();
}
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() {
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.
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(
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;
this.nw_nfs_server = nw_nfs_server;
this.nw_host = nw_host;
this.usr_dev = usr_dev;
+ this.subst = subst;
}
/**
+ " 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");
}
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 =
? ""
: (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 "
private Mode mode;
/** True to force grant */
private boolean force;
+ /** Number to substitute for + (-1 => use domain_id) */
+ private int subst;
/**
* Constructor for CommandPhysicalGrant.
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;
}
/**
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);
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.
* @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;
}
/**
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);
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.
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) {