Change preprocess from looking in site table xcatservers
attribute to reading the servicenode table for servicenodes. git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@1297 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
47c4573f5c
commit
894b0582f5
@ -4,121 +4,121 @@ use xCAT::Table;
|
||||
use Data::Dumper;
|
||||
use Sys::Syslog;
|
||||
use Socket;
|
||||
use xCAT::Utils;
|
||||
|
||||
|
||||
sub handled_commands {
|
||||
return {
|
||||
makenetworks => "networks",
|
||||
}
|
||||
}
|
||||
|
||||
sub preprocess_request {
|
||||
my $req = shift;
|
||||
my $cb = shift;
|
||||
if ($req->{_xcatdest}) { return [$req]; } #exit if preprocessed
|
||||
my @requests = ({%$req}); #first element is local instance
|
||||
my $sitetab = xCAT::Table->new('site');
|
||||
(my $ent) = $sitetab->getAttribs({key=>'xcatservers'},'value');
|
||||
$sitetab->close;
|
||||
if ($ent and $ent->{value}) {
|
||||
foreach (split /,/,$ent->{value}) {
|
||||
if (thishostisnot($_)) {
|
||||
my $reqcopy = {%$req};
|
||||
$reqcopy->{'_xcatdest'} = $_;
|
||||
push @requests,$reqcopy;
|
||||
}
|
||||
}
|
||||
}
|
||||
return \@requests;
|
||||
sub handled_commands
|
||||
{
|
||||
return {makenetworks => "networks",};
|
||||
}
|
||||
|
||||
sub thishostisnot {
|
||||
my $comparison = shift;
|
||||
my @ips = split /\n/,`/sbin/ip addr`;
|
||||
my $comp=inet_aton($comparison);
|
||||
foreach (@ips) {
|
||||
if (/^\s*inet/) {
|
||||
my @ents = split(/\s+/);
|
||||
my $ip=$ents[2];
|
||||
$ip =~ s/\/.*//;
|
||||
if (inet_aton($ip) eq $comp) {
|
||||
return 0;
|
||||
}
|
||||
#print Dumper(inet_aton($ip));
|
||||
sub preprocess_request
|
||||
{
|
||||
my $req = shift;
|
||||
my $cb = shift;
|
||||
if ($req->{_xcatdest}) { return [$req]; } #exit if preprocessed
|
||||
my @requests = ({%$req}); #first element is local instance
|
||||
my @sn = xCAT::Utils->getSNList();
|
||||
foreach my $s (@sn)
|
||||
{
|
||||
my $reqcopy = {%$req};
|
||||
$reqcopy->{'_xcatdest'} = $s;
|
||||
push @requests, $reqcopy;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
return \@requests;
|
||||
}
|
||||
sub process_request {
|
||||
my $nettab = xCAT::Table->new('networks',-create=>1,-autocommit=>0);
|
||||
my @rtable = split /\n/,`/bin/netstat -rn`;
|
||||
open($rconf,"/etc/resolv.conf");
|
||||
my @nameservers;
|
||||
if ($rconf) {
|
||||
my @rcont;
|
||||
while (<$rconf>) {
|
||||
push @rcont,$_;
|
||||
|
||||
sub process_request
|
||||
{
|
||||
my $nettab = xCAT::Table->new('networks', -create => 1, -autocommit => 0);
|
||||
my @rtable = split /\n/, `/bin/netstat -rn`;
|
||||
open($rconf, "/etc/resolv.conf");
|
||||
my @nameservers;
|
||||
if ($rconf)
|
||||
{
|
||||
my @rcont;
|
||||
while (<$rconf>)
|
||||
{
|
||||
push @rcont, $_;
|
||||
}
|
||||
close($rconf);
|
||||
foreach (grep /nameserver/, @rcont)
|
||||
{
|
||||
my $line = $_;
|
||||
my @pair;
|
||||
$line =~ s/#.*//;
|
||||
@pair = split(/\s+/, $line);
|
||||
push @nameservers, $pair[1];
|
||||
}
|
||||
}
|
||||
close($rconf);
|
||||
foreach (grep /nameserver/,@rcont) {
|
||||
my $line = $_;
|
||||
my @pair;
|
||||
$line =~ s/#.*//;
|
||||
@pair = split(/\s+/,$line);
|
||||
push @nameservers,$pair[1];
|
||||
}
|
||||
}
|
||||
splice @rtable,0,2;
|
||||
foreach (@rtable) { #should be the lines to think about, do something with U, and something else with UG
|
||||
my $net;
|
||||
my $mask;
|
||||
my $mgtifname;
|
||||
my $gw;
|
||||
my @ent = split /\s+/,$_;
|
||||
if ($ent[0] eq "169.254.0.0") {
|
||||
next;
|
||||
}
|
||||
if ($ent[3] eq 'U') {
|
||||
$net = $ent[0];
|
||||
$mask = $ent[2];
|
||||
$mgtifname = $ent[7];
|
||||
$nettab->setAttribs({'net'=>$net},{'mask'=>$mask,'mgtifname'=>$mgtifname});
|
||||
my $tent = $nettab->getAttribs({'net'=>$net},'nameservers');
|
||||
unless ($tent and $tent->{nameservers}) {
|
||||
my $text = join ',',@nameservers;
|
||||
$nettab->setAttribs({'net'=>$net},{nameservers=>$text});
|
||||
}
|
||||
unless ($tent and $tent->{tftpserver}) {
|
||||
my $netdev=$ent[7];
|
||||
my @netlines = split/\n/,`/sbin/ip addr show dev $netdev`;
|
||||
foreach (grep /\s*inet\b/,@netlines) {
|
||||
my @row = split(/\s+/,$_);
|
||||
my $ipaddr = $row[2];
|
||||
$ipaddr =~ s/\/.*//;
|
||||
my @maska=split(/\./,$mask);
|
||||
my @ipa=split(/\./,$ipaddr);
|
||||
my @neta=split(/\./,$net);
|
||||
my $isme=1;
|
||||
foreach (0..3) {
|
||||
my $oct = (0+$maska[$_]) & ($ipa[$_]+0);
|
||||
unless ($oct == $neta[$_]) {
|
||||
$isme=0;
|
||||
last;
|
||||
splice @rtable, 0, 2;
|
||||
foreach (@rtable)
|
||||
{ #should be the lines to think about, do something with U, and something else with UG
|
||||
my $net;
|
||||
my $mask;
|
||||
my $mgtifname;
|
||||
my $gw;
|
||||
my @ent = split /\s+/, $_;
|
||||
if ($ent[0] eq "169.254.0.0")
|
||||
{
|
||||
next;
|
||||
}
|
||||
if ($ent[3] eq 'U')
|
||||
{
|
||||
$net = $ent[0];
|
||||
$mask = $ent[2];
|
||||
$mgtifname = $ent[7];
|
||||
$nettab->setAttribs({'net' => $net},
|
||||
{'mask' => $mask, 'mgtifname' => $mgtifname});
|
||||
my $tent = $nettab->getAttribs({'net' => $net}, 'nameservers');
|
||||
unless ($tent and $tent->{nameservers})
|
||||
{
|
||||
my $text = join ',', @nameservers;
|
||||
$nettab->setAttribs({'net' => $net}, {nameservers => $text});
|
||||
}
|
||||
unless ($tent and $tent->{tftpserver})
|
||||
{
|
||||
my $netdev = $ent[7];
|
||||
my @netlines = split /\n/, `/sbin/ip addr show dev $netdev`;
|
||||
foreach (grep /\s*inet\b/, @netlines)
|
||||
{
|
||||
my @row = split(/\s+/, $_);
|
||||
my $ipaddr = $row[2];
|
||||
$ipaddr =~ s/\/.*//;
|
||||
my @maska = split(/\./, $mask);
|
||||
my @ipa = split(/\./, $ipaddr);
|
||||
my @neta = split(/\./, $net);
|
||||
my $isme = 1;
|
||||
foreach (0 .. 3)
|
||||
{
|
||||
my $oct = (0 + $maska[$_]) & ($ipa[$_] + 0);
|
||||
unless ($oct == $neta[$_])
|
||||
{
|
||||
$isme = 0;
|
||||
last;
|
||||
}
|
||||
}
|
||||
if ($isme)
|
||||
{
|
||||
$nettab->setAttribs({'net' => $net},
|
||||
{tftpserver => $ipaddr});
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($isme) {
|
||||
$nettab->setAttribs({'net'=>$net},{tftpserver=>$ipaddr});
|
||||
last;
|
||||
}
|
||||
$nettab->commit;
|
||||
|
||||
#Nothing much sane to do for the other fields at the moment?
|
||||
}
|
||||
elsif ($ent[3] eq 'UG')
|
||||
{
|
||||
|
||||
#TODO: networks through gateway. and how we might care..
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
#TODO: anything to do with such entries?
|
||||
}
|
||||
}
|
||||
$nettab->commit;
|
||||
#Nothing much sane to do for the other fields at the moment?
|
||||
} elsif ($ent[3] eq 'UG') {
|
||||
#TODO: networks through gateway. and how we might care..
|
||||
} else {
|
||||
#TODO: anything to do with such entries?
|
||||
}
|
||||
}
|
||||
}
|
||||
1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user