# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html #------------------------------------------------------- =head1 xCAT plugin package to handle syncfiles command =cut #------------------------------------------------------- package xCAT_plugin::syncfiles; use xCAT::Utils; use xCAT::MsgUtils; use xCAT::SvrUtils; use xCAT::NodeRange; 1; #------------------------------------------------------- =head3 handled_commands Return list of commands handled by this plugin =cut #------------------------------------------------------- sub handled_commands { return {'syncfiles' => "syncfiles"}; } #------------------------------------------------------- =head3 process_request Process the command =cut #------------------------------------------------------- sub process_request { my $request = shift; my $callback = shift; my $subreq = shift; my $client; if ($request->{'_xcat_clienthost'}) { $client = $request->{'_xcat_clienthost'}->[0]; } if ($client) { ($client) = noderange($client) }; unless ($client) { #Not able to do identify the host in question xCAT::MsgUtils->message("S","Received syncfiles from $client, which couldn't be correlated to a node (domain mismatch?)"); return; } require xCAT::Postage; &syncfiles($client,$callback,$subreq); } #---------------------------------------------------------------------------- =head3 syncfiles Use the xdcp command to sync files from Management node/Service node t o the Compute node Arguments: Returns: 0 - failed; 1 - succeeded; Example: syncfiles($node, $callback); Comments: =cut #----------------------------------------------------------------------------- sub syncfiles { my $node = shift; if ($node =~ /xCAT::Postage/) { $node = shift; } my $callback = shift; my $subreq = shift; #get the sync file base on the node type my $synclist = xCAT::SvrUtils->getsynclistfile([$node]); if (!$synclist) { xCAT::MsgUtils->message("S", "Cannot find synclist file for the $node"); return 0; } # this can be a comma separated list of multiple # syncfiles my @sl = split(',',$$synclist{$node}); foreach my $synclistfile (@sl) { # call the xdcp plugin to handle the syncfile operation my $args = ["-F", "$synclistfile"]; my $env = ["DSH_RSYNC_FILE=$synclistfile"]; $subreq->({command=>['xdcp'], node=>[$node], arg=>$args, env=>$env}, $callback); } return 1; } 1;