2008-04-29 18:41:24 +00:00
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
#-------------------------------------------------------
= head1
xCAT plugin package to handle getpostscript command
= cut
#-------------------------------------------------------
package xCAT_plugin::getpostscript ;
use xCAT::Utils ;
2008-08-20 16:51:06 +00:00
use xCAT::MsgUtils ;
2008-04-29 18:41:24 +00:00
use xCAT::NodeRange ;
1 ;
#-------------------------------------------------------
= head3 handled_commands
Return list of commands handled by this plugin
= cut
#-------------------------------------------------------
sub handled_commands
{
2010-11-23 19:00:09 +00:00
return {
'getpostscript' = > "getpostscript" ,
'postage' = > "getpostscript"
} ;
2008-04-29 18:41:24 +00:00
}
#-------------------------------------------------------
= head3 process_request
Process the command
= cut
#-------------------------------------------------------
sub process_request
{
my $ request = shift ;
my $ callback = shift ;
my $ nodes = $ request - > { node } ;
my $ command = $ request - > { command } - > [ 0 ] ;
my $ args = $ request - > { arg } ;
my $ envs = $ request - > { env } ;
my $ rsp ;
my $ i = 1 ;
my @ nodes = @$ nodes ;
# do your processing here
# return info
2010-11-23 19:00:09 +00:00
if ( $ command eq 'postage' ) {
return postage ( $ nodes , $ callback ) ;
}
2008-04-29 18:41:24 +00:00
my $ client ;
2012-07-26 19:31:13 +00:00
if ( $ ::XCATSITEVALS { nodeauthentication } ) { #if requiring node authentication, this request will have a certificate associated with it, use it instead of name resolution
unless ( ref $ request - > { username } ) { return ; } #TODO: log an attempt without credentials?
$ client = $ request - > { username } - > [ 0 ] ;
} else {
unless ( $ request - > { '_xcat_clienthost' } - > [ 0 ] ) {
#ERROR? malformed request
return ; #nothing to do here...
}
$ client = $ request - > { '_xcat_clienthost' } - > [ 0 ] ;
2008-04-29 18:41:24 +00:00
}
2008-05-14 19:14:32 +00:00
2008-04-29 18:41:24 +00:00
if ( $ client ) { ( $ client ) = noderange ( $ client ) } ;
unless ( $ client ) { #Not able to do identify the host in question
2008-08-20 16:51:06 +00:00
xCAT::MsgUtils - > message ( "S" , "Received getpostscript from $client, which couldn't be correlated to a node (domain mismatch?)" ) ;
2008-04-29 18:41:24 +00:00
return ;
}
2008-05-14 19:14:32 +00:00
my $ state ;
if ( $ request - > { scripttype } ) { $ state = $ request - > { scripttype } - > [ 0 ] ; }
2008-04-29 18:41:24 +00:00
2009-03-14 16:14:29 +00:00
require xCAT::Postage ;
2012-11-22 02:57:22 +00:00
#my @scriptcontents = xCAT::Postage::makescript($client,$state,$callback); # the original method
my @ scriptcontents = xCAT::Postage:: makescript ( [ $ client ] , $ state , $ callback ) ; # the new method, use the template
2008-04-29 18:41:24 +00:00
if ( scalar ( @ scriptcontents ) ) {
$ rsp - > { data } = \ @ scriptcontents ;
}
$ callback - > ( $ rsp ) ;
}
2010-11-23 19:00:09 +00:00
sub postage {
my $ nodes = shift ;
my $ callback = shift ;
require xCAT::Postage ;
foreach my $ node ( @$ nodes ) {
my @ scriptcontents = xCAT::Postage:: makescript ( $ node , 'postscripts' , $ callback ) ;
my $ ps = 0 ;
my $ pbs = 0 ;
foreach ( @ scriptcontents ) {
chomp ( $ _ ) ;
if ( $ _ =~ "postscripts-start-here" ) {
$ ps = 1 ;
next ;
}
if ( $ _ =~ "postscripts-end-here" ) {
$ ps = 0 ;
next ;
}
if ( $ _ =~ "postbootscripts-start-here" ) {
$ pbs = 1 ;
next ;
}
if ( $ _ =~ "postbootscripts-end-here" ) {
$ pbs = 0 ;
next ;
}
if ( $ ps eq 1 ) {
$ callback - > ( { info = > [ "$node: postscript: $_" ] } ) ;
}
if ( $ pbs eq 1 ) {
$ callback - > ( { info = > [ "$node: postbootscript: $_" ] } ) ;
}
}
}
}