71 lines
1.6 KiB
Perl
71 lines
1.6 KiB
Perl
|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
|
||
|
package xCAT_plugin::copycds;
|
||
|
use Storable qw(dclone);
|
||
|
use xCAT::Table;
|
||
|
use Data::Dumper;
|
||
|
use Getopt::Long;
|
||
|
Getopt::Long::Configure("bundling");
|
||
|
Getopt::Long::Configure("pass_through");
|
||
|
|
||
|
my $processed = 0;
|
||
|
my $callback;
|
||
|
|
||
|
sub handled_commands {
|
||
|
return {
|
||
|
copycds => "copycds",
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sub take_answer {
|
||
|
#TODO: Intelligently filter and decide things
|
||
|
my $resp = shift;
|
||
|
$callback->($resp);
|
||
|
}
|
||
|
|
||
|
sub process_request {
|
||
|
my $request = shift;
|
||
|
$callback = shift;
|
||
|
my $doreq = shift;
|
||
|
my $distname = undef;
|
||
|
my $arch = undef;
|
||
|
|
||
|
@ARGV = @{$request->{arg}};
|
||
|
GetOptions(
|
||
|
'n|name|osver=s' => \$distname,
|
||
|
'a|arch=s' => \$arch
|
||
|
);
|
||
|
if ($arch and $arch =~ /i.86/) {
|
||
|
$arch = x86;
|
||
|
}
|
||
|
my @args = @ARGV; #copy ARGV
|
||
|
unless ($#args >= 0) {
|
||
|
$callback->({error=>"copycds needs at least one full path to ISO currently."});
|
||
|
return;
|
||
|
}
|
||
|
foreach (@args) {
|
||
|
unless (-r $_ and -f $_) {
|
||
|
$callback->({error=>"copycds currently only understands FULL path to iso files, $_ not processed"});
|
||
|
return;
|
||
|
}
|
||
|
mkdir "/mnt/xcat";
|
||
|
if (system("mount -o loop $_ /mnt/xcat")) {
|
||
|
$callback->({error=>"copycds was unable to examine $_ as an install image"});
|
||
|
return;
|
||
|
}
|
||
|
my $newreq = dclone($request);
|
||
|
$newreq->{command}= [ 'copycd' ]; #Note the singular, it's different
|
||
|
$newreq->{arg} = ["-p","/mnt/xcat"];
|
||
|
if ($distname) {
|
||
|
push @{$newreq->{arg}},("-n",$distname);
|
||
|
}
|
||
|
if ($arch) {
|
||
|
push @{$newreq->{arg}},("-a",$arch);
|
||
|
}
|
||
|
$doreq->($newreq,\&take_answer);
|
||
|
|
||
|
system("umount /mnt/xcat");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
1;
|