diff --git a/perl-xCAT-2.0/xCAT/PPCfsp.pm b/perl-xCAT-2.0/xCAT/PPCfsp.pm index 6688671e4..89afdb50b 100644 --- a/perl-xCAT-2.0/xCAT/PPCfsp.pm +++ b/perl-xCAT-2.0/xCAT/PPCfsp.pm @@ -6,6 +6,7 @@ use Getopt::Long; use LWP; use HTTP::Cookies; use HTML::Form; +use xCAT::PPCcli qw(SUCCESS EXPECT_ERROR RC_ERROR NR_ERROR); ########################################## @@ -13,21 +14,23 @@ use HTML::Form; ########################################## my %cmds = ( rpower => { - state => ["Power On/Off System", \&state], - on => ["Power On/Off System", \&on], - off => ["Power On/Off System", \&off], - reset => ["System Reboot", \&reset], - boot => ["Power On/Off System", \&boot] }, + state => ["Power On/Off System", \&state], + on => ["Power On/Off System", \&on], + off => ["Power On/Off System", \&off], + reset => ["System Reboot", \&reset], + boot => ["Power On/Off System", \&boot] }, reventlog => { - all => ["Error/Event Logs", \&all], - all_clear => ["Error/Event Logs", \&all_clear], - entries => ["Error/Event Logs", \&entries], - clear => ["Error/Event Logs", \&clear] }, + all => ["Error/Event Logs", \&all], + all_clear => ["Error/Event Logs", \&all_clear], + entries => ["Error/Event Logs", \&entries], + clear => ["Error/Event Logs", \&clear] }, rfsp => { - iocap => ["I/O Adapter Enlarged Capacity", \&iocap], - autopower => ["Auto Power Restart", \&autopower], - sysdump => ["System Dump", \&sysdump], - spdump => ["Service Processor Dump", \&spdump] }, + iocap => ["I/O Adapter Enlarged Capacity", \&iocap], + time => ["Time Of Day", \&time], + date => ["Time Of Day", \&date], + autopower => ["Auto Power Restart", \&autopower], + sysdump => ["System Dump", \&sysdump], + spdump => ["Service Processor Dump", \&spdump] }, ); @@ -39,9 +42,18 @@ sub parse_args { my $request = shift; my $args = $request->{arg}; - my @rsp = qw(spdump sysdump); + my @rsp = keys %{$cmds{rfsp}}; + my $cmd = join('|',@rsp); my %opt = (); my @VERSION = qw( 2.0 ); + + ############################################# + # Modify usage statement + ############################################# + $cmd =~ s/time/time [hh:mm:ss]/; + $cmd =~ s/date/date [mm-dd-yyy]/; + $cmd =~ s/autopower/autopower [enable|disable]/; + $cmd =~ s/iocap/iocap [enable|disable]/; ############################################# # Responds with usage statement @@ -50,12 +62,10 @@ sub parse_args { return( [ $_[0], "rfsp -h|--help", "rfsp -v|--version", - "rfsp [-V|--verbose] noderange -a [enable|disable]|-i [enable|disable]|".join('|',@rsp), + "rfsp [-V|--verbose] noderange ". $cmd, " -h writes usage information to standard output", " -v displays command version", - " -V verbose output", - " -a set/get auto power restart option", - " -i set/get I/O adapter enlarged capacity" ]); + " -V verbose output"] ); }; ############################################# # Process command-line arguments @@ -73,7 +83,7 @@ sub parse_args { Getopt::Long::Configure( "bundling" ); $request->{method} = undef; - if ( !GetOptions( \%opt, qw(h|help V|Verbose v|version a i) )) { + if ( !GetOptions( \%opt, qw(h|help V|Verbose v|version) )) { return( usage() ); } #################################### @@ -95,38 +105,9 @@ sub parse_args { return(usage( "Missing option: -" )); } #################################### - # Option -a for Auto Power Restart - #################################### - if ( exists( $opt{a} )) { - $request->{method} = "autopower" - } - #################################### - # Option -i for I/O adapter capacity - #################################### - if ( exists( $opt{i} )) { - $request->{method} = "iocap" - } - #################################### - # Mutually exclusive arguments - #################################### - if (exists( $opt{a} ) && exists( $opt{i} )) { - return( usage() ); - } - #################################### - # Set options command - #################################### - if ( defined( $request->{method} )) { - if ( defined( $ARGV[0] )) { - if ( $ARGV[0] !~ /^enable|disable$/ ) { - return(usage( "Invalid flag argument: $ARGV[0]" )); - } - $request->{op} = $ARGV[0]; - } - } - #################################### # Check for unsupported commands #################################### - else { + if ( !defined( $request->{method} )) { my ($cmd) = grep(/^$ARGV[0]$/, @rsp ); if ( !defined( $cmd )) { return(usage( "Invalid command: $ARGV[0]" )); @@ -134,6 +115,35 @@ sub parse_args { $request->{method} = $cmd; } #################################### + # Check command arguments + #################################### + if ( $request->{method} =~ /^date|time|iocap|autopower$/ ) { + shift @ARGV; + + if ( defined( $ARGV[0] )) { + if ( $request->{method} =~ /^time$/ ) { + if ( $ARGV[0] !~ + /^([0-1]?[0-9]|2[0-3]):(0?[0-9]|[1-5][0-9]):(0?[0-9]|[1-5][0-9])$/ ) { + return( usage("Invalid time format '$ARGV[0]'") ); + } + $request->{op} = "$1-$2-$3"; + } + if ( $request->{method} =~ /^date$/ ) { + if ( $ARGV[0] !~ + /^(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])-(20[0-9]{2})$/){ + return( usage("Invalid date format '$ARGV[0]'") ); + } + $request->{op} = "$1-$2-$3"; + } + if ( $request->{method} =~ /^autopower|iocap$/ ) { + if ( $ARGV[0] !~ /^enable|disable$/ ) { + return( usage("Invalid argument '$ARGV[0]'") ); + } + $request->{op} = $ARGV[0]; + } + } + } + #################################### # Check for an extra argument #################################### shift @ARGV; @@ -634,14 +644,14 @@ sub entries { # Prepend header ################################## $result = (@entries) ? - "#Log ID Time Failing subsystem Severity SRC\n" : + "\n#Log ID Time Failing subsystem Severity SRC\n" : "No entries"; ################################## # Parse log entries ################################## foreach ( @entries ) { - if ( /tabindex=[\d]+><\/td>(.*)<\/td><\/td>(.*)<\/td>/ /g; $result.= "$values\n"; @@ -655,6 +665,182 @@ sub entries { } +########################################################################## +# Gets/Sets system time of day +########################################################################## +sub time { + + my $exp = shift; + my $request = shift; + my $form = shift; + my $menu = shift; + my $option = shift; + my $ua = @$exp[0]; + my $server = @$exp[1]; + + ############################## + # Send command + ############################## + my $result = xCAT::PPCfsp::tod( $exp, $request, $form ); + my $Rc = shift(@$result); + + ############################## + # Return error + ############################## + if ( $Rc != SUCCESS ) { + return( @$result[0] ); + } + ############################## + # Get time + ############################## + if ( !defined( $request->{op} )) { + @$result[0] =~ /(\d+) (\d+) (\d+) $/; + return( "$1:$2:$3 UTC" ); + } + ############################## + # Set time + ############################## + my @t = split / /, @$result[0]; + my @new = split /-/, $request->{op}; + splice( @t,3,3,@new ); + + ############################## + # Send command + ############################## + my $result = xCAT::PPCfsp::tod( $exp, $request, $form, \@t ); + my $Rc = shift(@$result); + + return( @$result[0] ); +} + + +########################################################################## +# Gets/Sets system date +########################################################################## +sub date { + + my $exp = shift; + my $request = shift; + my $form = shift; + my $menu = shift; + my $option = shift; + my $ua = @$exp[0]; + my $server = @$exp[1]; + + ############################## + # Send command + ############################## + my $result = xCAT::PPCfsp::tod( $exp, $request, $form ); + my $Rc = shift(@$result); + + ############################## + # Return error + ############################## + if ( $Rc != SUCCESS ) { + return( @$result[0] ); + } + ############################## + # Get date + ############################## + if ( !defined( $request->{op} )) { + @$result[0] =~ /^(\d+) (\d+) (\d+)/; + return( "$1-$2-$3" ); + } + ############################## + # Set date + ############################## + my @t = split / /, @$result[0]; + my @new = split /-/, $request->{op}; + splice( @t,0,3,@new ); + + ############################## + # Send command + ############################## + my $result = xCAT::PPCfsp::tod( $exp, $request, $form, \@t ); + my $Rc = shift(@$result); + + return( @$result[0] ); +} + + +########################################################################## +# Gets/Sets system time/date +########################################################################## +sub tod { + + my $exp = shift; + my $request = shift; + my $form = shift; + my $d = shift; + my $ua = @$exp[0]; + my $server = @$exp[1]; + + ###################################### + # Get time/date + ###################################### + my $res = $ua->get( "https://$server/cgi-bin/cgi?form=$form" ); + + ################################## + # Return error + ################################## + if ( !$res->is_success() ) { + return( [RC_ERROR,$res->status_line] ); + } + if ( $res->content =~ /(only when the system is powered off)/ ) { + return( [RC_ERROR,$1] ); + } + ###################################### + # Get time/date fields + ###################################### + my $result; + my @regex = ( + "name='omo' value='(\\d+)'", + "name='od' value='(\\d+)'", + "name='oy' value='(\\d+)'", + "name='oh' value='(\\d+)'", + "name='omi' value='(\\d+)'", + "name='os' value='(\\d+)'", + ); + foreach ( @regex ) { + if ( $res->content !~ /$_/ ) { + return( [RC_ERROR,"Error getting time of day"] ); + } + $result.= "$1 "; + } + ###################################### + # Return time/date + ###################################### + if ( !defined( $d )) { + return( [SUCCESS,$result] ); + } + ###################################### + # Set time/date + ###################################### + my $res = $ua->post( "https://$server/cgi-bin/cgi", + [ form => $form, + mo => @$d[0], + d => @$d[1], + y => @$d[2], + h => @$d[3], + mi => @$d[4], + s => @$d[5], + submit => "Save settings" ] + ); + ###################################### + # Return error + ###################################### + if ( !$res->is_success() ) { + return( [RC_ERROR,$res->status_line] ); + } + if ( $res->content =~ /(not allowed when the system is powered on)/ ) { + return( [RC_ERROR,$1] ); + } + if ( $res->content =~ /(Invalid entry)/ ) { + return( [RC_ERROR,$1] ); + } + return( [SUCCESS,"Success"] ); +} + ########################################################################## @@ -686,24 +872,23 @@ sub option { my $ua = @$exp[0]; my $server = @$exp[1]; my $op = $request->{op}; - my $url = "https://$server/cgi-bin/cgi?form=$form"; ###################################### # Get option URL ###################################### if ( !defined( $op )) { - my $res = $ua->get( $url ); + my $res = $ua->get( "https://$server/cgi-bin/cgi?form=$form" ); ################################## - # Return error + # Return errors ################################## if ( !$res->is_success() ) { return( $res->status_line ); } - if ( $res->content =~ /