diff --git a/xCAT-server/lib/xcat/plugins/svc.pm b/xCAT-server/lib/xcat/plugins/svc.pm index 6bd4f6900..7345cf3f1 100644 --- a/xCAT-server/lib/xcat/plugins/svc.pm +++ b/xCAT-server/lib/xcat/plugins/svc.pm @@ -44,21 +44,59 @@ sub detachstorage { unless ($controller) { $controller = assure_identical_table_values(\@nodes, $storents, 'controller'); } - my $volname = shift @ARGV; + my @volnames = @ARGV; my $wwns = get_wwns(@nodes); use Data::Dumper; my %namemap = makehosts($wwns, controller=>$controller, cfg=>$storents); foreach my $node (keys %namemap) { my $host = $namemap{$node}; my $session = establish_session(controller=>$controller); - my @rets = $session->cmd("rmvdiskhostmap -host $host $volname"); - my $ret = $rets[0]; - if ($ret =~ m/^CMMVC5842E/) { - sendmsg([1,"Node not attached"],$callback,$node); + foreach my $volname (@volnames) { + my @rets = $session->cmd("rmvdiskhostmap -host $host $volname"); + my $ret = $rets[0]; + if ($ret =~ m/^CMMVC5842E/) { + sendmsg([1,"Node not attached to $volname"],$callback,$node); + } } } } +sub rmstorage { + my $request = shift; + my @nodes = @{$request->{node}}; + my $controller; + @ARGV = @{$request->{arg}}; + unless (GetOptions( + 'controller=s' => \$controller, + )) { + foreach (@nodes) { + sendmsg([1,"Error parsing arguments"],$callback,$_); + } + } + my @volnames = @ARGV; + my $storagetab = xCAT::Table->new('storage'); + my $storents = $storagetab->getNodesAttribs(\@nodes, [qw/controller/]); + unless ($controller) { + $controller = assure_identical_table_values(\@nodes, $storents, 'controller'); + } + detachstorage($request); + my $session = establish_session(controller=>$controller); + foreach my $volname (@volnames) { + my @info = $session->cmd("rmvdisk $volname"); + my $ret = $info[0]; + if ($ret =~ m/^CMMVC5753E/) { + foreach my $node (@nodes) { + sendmsg([1,"Disk $volname does not exist"], $callback, @nodes); + } + } elsif ($ret =~ m/^CMMVC5840E/) { + foreach my $node (@nodes) { + sendmsg([1,"Disk $volname is mapped to other nodes and/or busy"], $callback, @nodes); + } + } + } +} + + sub lsstorage { my $request = shift; my @nodes = @{$request->{node}}; @@ -431,6 +469,8 @@ sub process_request { mkstorage($request); } elsif ($request->{command}->[0] eq 'lsstorage') { lsstorage($request); + } elsif ($request->{command}->[0] eq 'rmstorage') { + rmstorage($request); } elsif ($request->{command}->[0] eq 'detachstorage') { detachstorage($request); } elsif ($request->{command}->[0] eq 'lspool') {