From a09d1db2413d0b4541beac359dc4c43cf94b8829 Mon Sep 17 00:00:00 2001 From: jbjohnso Date: Thu, 26 Mar 2009 20:08:18 +0000 Subject: [PATCH] -Implement log, ntp, dns server list processing for dhcp git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@3004 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- perl-xCAT/xCAT/Schema.pm | 10 +++-- xCAT-server/lib/xcat/plugins/dhcp.pm | 61 ++++++++++++++++++++++++++-- 2 files changed, 63 insertions(+), 8 deletions(-) diff --git a/perl-xCAT/xCAT/Schema.pm b/perl-xCAT/xCAT/Schema.pm index 5de102b97..1d7476491 100644 --- a/perl-xCAT/xCAT/Schema.pm +++ b/perl-xCAT/xCAT/Schema.pm @@ -255,13 +255,15 @@ networks => { netname => 'Name used to identify this network definition.', net => 'The network address.', mask => 'The network mask.', - mgtifname => 'The interface name the dhcp server should listen on.', + mgtifname => 'The interface name of the management/service node facing this network. !remote! indicates a non-local network for relay DHCP.', gateway => 'The network gateway.', - dhcpserver => 'The DHCP server that is servicing this network.', - tftpserver => 'The TFTP server that is servicing this network.', + dhcpserver => 'The DHCP server that is servicing this network. Required to be explicitly set for pooled service node operation.', + tftpserver => 'The TFTP server that is servicing this network. If not set, the DHCP server is assumed.', nameservers => 'The nameservers for this network. Used in creating the DHCP network definition, and DNS configuration.', + ntpservers => 'The ntp servers for this network. Used in creating the DHCP network definition. Assumed to be the DHCP server if not set.', + logservers => 'The log servers for this network. Used in creating the DHCP network definition. Assumed to be the DHCP server if not set.', dynamicrange => 'The IP address range used by DHCP to assign dynamic IP addresses for requests on this network.', - nodehostname => 'Not Used??', + nodehostname => 'A regular expression used to specify node name to network-specific hostname. i.e. "/\z/-secondary/" would mean that the hostname of "n1" would be n1-secondary on this network. By default, the nodename is assumed to equal the hostname, followed by nodename-interfacename.', comments => 'Any user-written notes.', disable => "Set to 'yes' or '1' to comment out this row.", }, diff --git a/xCAT-server/lib/xcat/plugins/dhcp.pm b/xCAT-server/lib/xcat/plugins/dhcp.pm index 43a3ccf23..266ff3939 100644 --- a/xCAT-server/lib/xcat/plugins/dhcp.pm +++ b/xCAT-server/lib/xcat/plugins/dhcp.pm @@ -20,6 +20,9 @@ my $omshell; my $statements; #Hold custom statements to be slipped into host declarations my $callback; my $restartdhcp; +my $sitenameservers; +my $sitentpservers; +my $sitelogservers; my $nrhash; my $machash; my $iscsients; @@ -376,6 +379,19 @@ sub process_request } } } + ($href) = $sitetab->getAttribs({key => 'nameservers'}, 'value'); + if ($href and $href->{value}) { + $sitenameservers = $href->{value}; + } + ($href) = $sitetab->getAttribs({key => 'ntpservers'}, 'value'); + if ($href and $href->{value}) { + $sitentpservers = $href->{value}; + } + ($href) = $sitetab->getAttribs({key => 'logservers'}, 'value'); + if ($href and $href->{value}) { + $sitelogservers = $href->{value}; + } + ($href) = $sitetab->getAttribs({key => 'domain'}, 'value'); ($href) = $sitetab->getAttribs({key => 'domain'}, 'value'); unless ($href and $href->{value}) { @@ -598,6 +614,22 @@ sub process_request } } +sub putmyselffirst { + my $srvlist = shift; + if ($srvlist =~ /,/) { #TODO: only reshuffle when requested, or allow opt out of reshuffle? + my @dnsrvs = split /,/,$srvlist; + my @reordered; + foreach (@dnsrvs) { + if (xCAT::Utils->thishostisnot($_)) { + push @reordered,$_; + } else { + unshift @reordered,$_; + } + } + $srvlist = join(', ',@reordered); + } + return $srvlist; +} sub addnet { my $net = shift; @@ -643,6 +675,8 @@ sub addnet # if here, means we found the idx before which to insert my $nettab = xCAT::Table->new("networks"); my $nameservers; + my $ntpservers; + my $logservers; my $gateway; my $tftp; my $range; @@ -652,21 +686,40 @@ sub addnet { my ($ent) = $nettab->getAttribs({net => $net, mask => $mask}, - qw(tftpserver nameservers gateway dynamicrange dhcpserver)); + qw(tftpserver nameservers ntpservers logservers gateway dynamicrange dhcpserver)); + if ($ent and $ent->{ntpservers}) { + $ntpservers = $ent->{ntpservers}; + } elsif ($sitentpservers) { + $ntpservers = $sitentpservers; + } + if ($ent and $ent->{logservers}) { + $logservers = $ent->{logservers}; + } elsif ($sitelogservers) { + $logservers = $sitelogservers; + } if ($ent and $ent->{nameservers}) { $nameservers = $ent->{nameservers}; } else { + if ($sitenameservers) { + $nameservers = $sitenameservers; + } else { $callback->( { warning => [ - "No $net specific entry for nameservers, and dhcp plugin not sourcing from site yet (TODO)" + "No $net specific entry for nameservers, and no nameservers defined in site table." ] } ); + } } + $nameservers=putmyselffirst($nameservers); + $ntpservers=putmyselffirst($nameservers); + $logservers=putmyselffirst($nameservers); + + if ($ent and $ent->{tftpserver}) { $tftp = $ent->{tftpserver}; @@ -743,10 +796,10 @@ sub addnet { push @netent, " next-server $tftp;\n"; } - if ($myip){ + if ($myip){ push @netent, " option log-servers $myip;\n"; push @netent, " option ntp-servers $myip;\n"; - } + } push @netent, " option domain-name \"$domain\";\n"; if ($nameservers) {