Commit 414e0b6b authored by Leigh B Stoller's avatar Leigh B Stoller

Support for invocation from create-xen-image. Add PROXY argument to pass

along to the uploader, and DISK argument which is the LVM device name.
Add -x option to tell it is called from create-xen-image, and change to
use existing scratch filesystem (/capture) for temp files, and to not mess
with the DISK option.
parent 9fcd7030
#!/usr/bin/perl -wT #!/usr/bin/perl -w
# #
# Copyright (c) 2000-2014 University of Utah and the Flux Group. # Copyright (c) 2000-2014 University of Utah and the Flux Group.
...@@ -91,17 +91,20 @@ use Getopt::Std; ...@@ -91,17 +91,20 @@ use Getopt::Std;
# IZOPTS=<string> # IZOPTS=<string>
# Additional options for imagezip. # Additional options for imagezip.
# #
# PROXY=<vnodeid>
# The proxy argument for use on XEN, when acting on behalf of a container.
#
sub usage() sub usage()
{ {
print STDERR print STDERR
"Usage:\n". "Usage:\n".
"create-versioned-image [-nv] -f param-file\n". "create-versioned-image [-nvx] -f param-file\n".
" or\n". " or\n".
"create-versioned-image [-nv] KEY=VALUE ...\n"; "create-versioned-image [-nv] [-x vnode_id] KEY=VALUE ...\n";
exit(-1); exit(-1);
} }
my $optlist = "f:nv"; my $optlist = "f:nvx:";
# #
# Turn off line buffering on output # Turn off line buffering on output
...@@ -124,6 +127,7 @@ my $frisbee = "/usr/local/bin/frisbee"; ...@@ -124,6 +127,7 @@ my $frisbee = "/usr/local/bin/frisbee";
my $localdir = "/local"; my $localdir = "/local";
my $impotent = 0; my $impotent = 0;
my $verbose = 0; my $verbose = 0;
my $isxen = 0;
sub process_image($); sub process_image($);
sub mysystem($); sub mysystem($);
...@@ -139,6 +143,13 @@ sub map_diskname($) ...@@ -139,6 +143,13 @@ sub map_diskname($)
my ($dev) = @_; my ($dev) = @_;
my ($dtype, $dunit); my ($dtype, $dunit);
#
# When called on XEN, the diskname is correct, and in fact we will
# just mess it up.
#
return $dev
if ($isxen);
# strip off /dev/ if it is there # strip off /dev/ if it is there
$dev =~ s/^\/dev\///; $dev =~ s/^\/dev\///;
...@@ -246,6 +257,10 @@ sub parse_params(@) ...@@ -246,6 +257,10 @@ sub parse_params(@)
$iinfo{$iid}{'izopts'} = $optstr; $iinfo{$iid}{'izopts'} = $optstr;
next; next;
} }
if ($key eq "proxy") {
$iinfo{$iid}{'proxy'} = $val;
next;
}
} else { } else {
print STDERR "Bogus parameter: '$kv'\n"; print STDERR "Bogus parameter: '$kv'\n";
$errors++; $errors++;
...@@ -285,6 +300,10 @@ if (defined($options{"n"})) { ...@@ -285,6 +300,10 @@ if (defined($options{"n"})) {
if (defined($options{"v"})) { if (defined($options{"v"})) {
$verbose = 1; $verbose = 1;
} }
if (defined($options{"x"})) {
$isxen = 1;
$localdir = "/capture/" . $options{"x"} . "/frisbee";
}
if (defined($options{"f"})) { if (defined($options{"f"})) {
my $pfile = $options{"f"}; my $pfile = $options{"f"};
if ($pfile =~ /^(\/tmp\/[-\w\.]+)$/) { if ($pfile =~ /^(\/tmp\/[-\w\.]+)$/) {
...@@ -340,7 +359,7 @@ foreach my $iid (sort keys %iinfo) { ...@@ -340,7 +359,7 @@ foreach my $iid (sort keys %iinfo) {
# For method=frisbee, the actual files will be here. # For method=frisbee, the actual files will be here.
# For method=file, a symlink to the actual file will be here. # For method=file, a symlink to the actual file will be here.
# #
if (mysystem("$sudo mkdir -p $localdir")) { if (! -e $localdir && mysystem("$sudo mkdir -p $localdir")) {
print STDERR "Could not create $localdir\n"; print STDERR "Could not create $localdir\n";
exit(1); exit(1);
} }
...@@ -359,7 +378,8 @@ if (mysystem("$sudo mkdir -p $localdir")) { ...@@ -359,7 +378,8 @@ if (mysystem("$sudo mkdir -p $localdir")) {
my $MEMFS_SIZE = "64m"; my $MEMFS_SIZE = "64m";
if ($dofrisbee) { if ($dofrisbee) {
if ($^O eq 'linux') { if ($^O eq 'linux') {
if (mysystem("$sudo mount -t tmpfs -o size=$MEMFS_SIZE tmpfs $localdir")) { if (!$isxen &&
mysystem("$sudo mount -t tmpfs -o size=$MEMFS_SIZE tmpfs $localdir")) {
print STDERR "Could not create $MEMFS_SIZE byte local MFS\n"; print STDERR "Could not create $MEMFS_SIZE byte local MFS\n";
# XXX try NFS instead # XXX try NFS instead
...@@ -394,7 +414,7 @@ foreach my $iid (sort keys %iinfo) { ...@@ -394,7 +414,7 @@ foreach my $iid (sort keys %iinfo) {
# #
if ($dofrisbee) { if ($dofrisbee) {
if ($^O eq 'linux') { if ($^O eq 'linux') {
if (mysystem("$sudo umount $localdir")) { if (!$isxen && mysystem("$sudo umount $localdir")) {
print STDERR "WARNING: could not destroy local MFS\n"; print STDERR "WARNING: could not destroy local MFS\n";
} }
} else { } else {
...@@ -573,7 +593,12 @@ sub process_image($) ...@@ -573,7 +593,12 @@ sub process_image($)
# use basic shell sleezy trick to capture exit status from imagezip # use basic shell sleezy trick to capture exit status from imagezip
$cmd = "( $cmd - || echo \$? > $localdir/imagezip.stat )"; $cmd = "( $cmd - || echo \$? > $localdir/imagezip.stat )";
$cmd .= " | $uploader -S $srv -F $image -"; $cmd .= " | $uploader -S $srv -F $image";
if (exists($iinfo{$iid}{'proxy'})) {
$cmd .= " -P " . $iinfo{$iid}{'proxy'};
}
$cmd .= " - ";
} }
if (mysystem("$cmd") || -e "$localdir/imagezip.stat") { if (mysystem("$cmd") || -e "$localdir/imagezip.stat") {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment