From bfca7b0bb7458df586cd0fd67e7d9b52cbf0d9b4 Mon Sep 17 00:00:00 2001 From: John Simpson Date: Mon, 11 Nov 2013 17:48:14 -0500 Subject: [PATCH] update to fix configtfpc problems with running in xcatd --- xCAT-server/lib/xcat/plugins/configfpc.pm | 181 ++++++++++++---------- 1 file changed, 102 insertions(+), 79 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/configfpc.pm b/xCAT-server/lib/xcat/plugins/configfpc.pm index be7abb249..07fe950ba 100644 --- a/xCAT-server/lib/xcat/plugins/configfpc.pm +++ b/xCAT-server/lib/xcat/plugins/configfpc.pm @@ -14,10 +14,11 @@ use Sys::Hostname; use xCAT::Table; use xCAT::TableUtils; use xCAT::NetworkUtils; -use Data::Dumper; +#use Data::Dumper; use xCAT::MacMap; use Socket; use Net::Ping; +my $interface; ########################################################################## ## Command handler method from tables @@ -28,16 +29,38 @@ sub handled_commands { }; } + +#sub preprocess_request { + + # set management node as server for all requests + # any requests sent to service node need to get + # get sent up to the MN + + #my $req = shift; + ##if already preprocessed, go straight to request + #if ( (defined($req->{_xcatpreprocessed})) + #&& ($req->{_xcatpreprocessed}->[0] == 1)) + #{ + #return [$req]; + #} +# + #$req->{_xcatdest} = xCAT::TableUtils->get_site_Master(); + #return [$req]; +#} + + + sub process_request { my $request = shift; my $callback = shift; my $subreq = shift; + #my $subreq = $request->{command}; $::CALLBACK = $callback; - if ( defined( @{$::args} ) ) { - @ARGV = @{$::args}; - } + if ($request && $request->{arg}) { @ARGV = @{$request->{arg}}; } + else { @ARGV = (); } + Getopt::Long::Configure( "bundling", "no_ignore_case", "no_pass_through" ); my $getopt_success = Getopt::Long::GetOptions( 'help|h|?' => \$::opt_h, @@ -66,7 +89,7 @@ sub process_request { # Option -i for kit component attributes if ( defined($::opt_I) ) { - $::interface = $::opt_I; + $interface = $::opt_I; } my $command = $request->{command}->[0]; @@ -79,9 +102,9 @@ sub process_request { } else { - my %rsp; - push@{ $rsp{data} }, "$localhostname: Unsupported command: $command"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push @{ $rsp->{data} }, "$localhostname: Unsupported command: $command"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); return 1; } @@ -126,6 +149,7 @@ sub configfpc { my $callback = shift; my $subreq = shift; + $::CALLBACK = $callback; # Use default userid and passwd my $ipmiuser = 'USERID'; @@ -138,9 +162,9 @@ sub configfpc { # Setup routing to 182.168.0.100 network if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "Adding route definition for 192.168.0.101/16 to $::interface interface"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Adding route definition for 192.168.0.101/16 to $::interface interface"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } my $setroute = `ip addr add dev $::interface 192.168.0.101/16`; @@ -148,22 +172,19 @@ sub configfpc { # check for an FPC - this ping will also add the FPC IP and MAC to the ARP table # my $res = `LANG=C ping -c 1 -w 5 $fpcip`; - #my $res = system("LANG=C ping -c 1 -w 5 $fpcip 2>&1"); if ( $res =~ /100% packet loss/g) { -# xCAT::MsgUtils->message ("I", "There are no default $fpcip FPC IP addresses to process"); $foundfpc = 0; - my %rsp = {}; - push@{ $rsp{data} }, "No default $fpcip IP addresses found"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "No default $fpcip IP addresses found"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); exit; # EXIT if we find no more default IP addresses on the network } else { -# xCAT::MsgUtils->message ("I", "Found $fpcip FPC IP addresses to process"); if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "Found $fpcip address"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Found $fpcip address"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } $foundfpc = 1; } @@ -189,25 +210,25 @@ sub configfpc { &set_FPC_network_parms($defnode,$netmask,$gateway,$newfpcip,$callback,$subreq); # message changed network settings - my %rsp = {}; - push@{ $rsp{data} }, "Configured FPC with MAC $fpcmac as $node ($newfpcip)"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Configured FPC with MAC $fpcmac as $node ($newfpcip)"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); # Validate that new IP is working - Use ping to check if the new IP has been set my $p = Net::Ping->new(); my $ping_success=1; while ($ping_success) { if ($p->ping($newfpcip)) { - my %rsp = {}; - push@{ $rsp{data} }, "Verified the FPC with MAC $fpcmac is responding to the new IP $newfpcip as node $node"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Verified the FPC with MAC $fpcmac is responding to the new IP $newfpcip as node $node"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); $ping_success=0; } else { if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "ping to $newfpcip is unsuccessful. Retrying "; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "ping to $newfpcip is unsuccessful. Retrying "; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } } } @@ -215,9 +236,9 @@ sub configfpc { # The Node associated with this MAC was not found - print an infomrational message and continue } else { - my %rsp; - push@{ $rsp{data} }, "No FPC found that is associated with MAC address $fpcmac.\nCheck to see if the switch and switch table contain the information needed to locate this FPC MAC"; - xCAT::MsgUtils->message( "E", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "No FPC found that is associated with MAC address $fpcmac.\nCheck to see if the switch and switch table contain the information needed to locate this FPC MAC"; + xCAT::MsgUtils->message( "E", $rsp, $callback ); $foundfpc = 0; } @@ -225,9 +246,9 @@ sub configfpc { # Delete this FPC default IP Arp entry to get ready to look for another defautl FPC # if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "Removing default IP $fpcip from the arp table"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Removing default IP $fpcip from the arp table"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } my $arpout = `arp -d $fpcip`; @@ -236,9 +257,9 @@ sub configfpc { # check for another FPC $res = `LANG=C ping -c 1 -w 5 $fpcip 2>&1`; if ( ($res =~ /100% packet loss/g) && ($foundfpc==1) ) { - my %rsp; - push@{ $rsp{data} }, "There are no more default IP address to process"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "There are no more default IP address to process"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); $foundfpc = 0; } else { @@ -252,17 +273,17 @@ sub configfpc { # # Delete routing to 182.168.0.100 network if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "Deleting route definition for 192.168.0.101/16 on interface $::interface"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Deleting route definition for 192.168.0.101/16 on interface $::interface"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } my $setroute = `ip addr del dev $::interface 192.168.0.101/16`; # Delete routing to 182.168.0.100 network if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "Removing default FPC node definition $defnode"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Removing default FPC node definition $defnode"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } @@ -292,10 +313,9 @@ sub get_network_parms { if (inet_aton($ip)) { $ip = inet_ntoa(inet_aton($ip)); } else { - my %rsp; - push@{ $rsp{data} }, "Unable to resolve $ip"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); - #xCAT::MsgUtils->message("S","Unable to resolve $ip"); + my $rsp; + push@{ $rsp->{data} }, "Unable to resolve $ip"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); return undef; } my $nettab = xCAT::Table->new('networks'); @@ -339,61 +359,64 @@ sub set_FPC_network_parms { # Proceed with changing the FPC network parameters. # Set FPC Netmask if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "Use rspconfig to set the FPC netmask $netmask"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Use rspconfig to set the FPC netmask $netmask"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } my $netmaskout = xCAT::Utils->runxcmd( { command => ["rspconfig"], node => ["$defnode"], - arg => [ "netmask=$netmask" ] + arg => [ "netmask=$netmask" ], + sequential=>["1"], }, $request, 0,1); if ($::RUNCMD_RC != 0) { - my %rsp; - push@{ $rsp{data} }, "Could not change nemask $netmask"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Could not change nemask $netmask"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); $error++; } # Set FPC gateway if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "Use rspconfig to set the FPC gateway $gateway"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Use rspconfig to set the FPC gateway $gateway"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } my $gatewayout = xCAT::Utils->runxcmd( { command => ["rspconfig"], node => ["$defnode"], - arg => [ "gateway=$gateway" ] + arg => [ "gateway=$gateway" ], + sequential=>["1"], }, $request, 0,1); if ($::RUNCMD_RC != 0) { - my %rsp; - push@{ $rsp{data} }, "Could not change gateway $gateway"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Could not change gateway $gateway"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); $error++; } # Set FPC Ip address if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "Use rspconfig to set the FPC IP address $newfpcip"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Use rspconfig to set the FPC IP address $newfpcip"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } my $ipout = xCAT::Utils->runxcmd( { command => ["rspconfig"], node => ["$defnode"], - arg => [ "ip=$newfpcip" ] - }, + arg => [ "ip=$newfpcip" ], + sequential=>["1"], + }, $request, 0,1); if ($::RUNCMD_RC != 0) { - my %rsp; - push@{ $rsp{data} }, "Could not change ip address $newfpcip on default FPC"; - xCAT::MsgUtils->message( "S", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Could not change ip address $newfpcip on default FPC"; + xCAT::MsgUtils->message( "S", $rsp, $callback ); $error++; } return 1; @@ -420,9 +443,9 @@ sub get_node { my $arpout = `arp -s $fpcip $fpcmac`; # Print a message that this MAC has been found - my %rsp; - push@{ $rsp{data} }, "Found IP $fpcip and MAC $fpcmac"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Found IP $fpcip and MAC $fpcmac"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); # Usee find_mac to 1) look for which switch port contains this MAC address # and 2) look in the xcat DB to find the node associated with the switch port this MAC was found in @@ -431,9 +454,9 @@ sub get_node { $node = $macmap->find_mac($fpcmac,0); # verbose if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "Mapped MAC $fpcmac to node $node"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Mapped MAC $fpcmac to node $node"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } return ($node,$fpcmac); @@ -457,9 +480,9 @@ sub add_node { # if($::VERBOSE){ - my %rsp = {}; - push@{ $rsp{data} }, "Creating default FPC node deffpc with IP 192.168.0.100 for later use with rspconfig"; - xCAT::MsgUtils->message( "I", \%rsp, $callback ); + my $rsp; + push@{ $rsp->{data} }, "Creating default FPC node deffpc with IP 192.168.0.100 for later use with rspconfig"; + xCAT::MsgUtils->message( "I", $rsp, $callback ); } my $nodelisttab = xCAT::Table->new('nodelist',-create=>1);