diff --git a/xCAT-server/share/xcat/scripts/configonie b/xCAT-server/share/xcat/scripts/configonie index b3ba6ce27..35fe32d5d 100755 --- a/xCAT-server/share/xcat/scripts/configonie +++ b/xCAT-server/share/xcat/scripts/configonie @@ -350,8 +350,35 @@ sub config_snmp { sub config_ntp { my @config_switches; my $cmd; + my $master; + my $ntpservers; + my $timezone; + + + #get ntpserver, master and timezone from site table + my @entries = xCAT::TableUtils->get_site_attribute("master"); + my $master = $entries[0]; + + @entries = xCAT::TableUtils->get_site_attribute("timezone"); + $timezone = $entries[0]; + + @entries = xCAT::TableUtils->get_site_attribute("ntpservers"); + my $t_entry = $entries[0]; + if (defined($t_entry)) { + $ntpservers = $t_entry; + } else { + $ntpservers = $master; + } + + my @servers = split(',', $ntpservers); + + #use ntpserver from network table if available + my $nettab = xCAT::Table->new("networks"); + my @nets; + if ($nettab) { + @nets = $nettab->getAllAttribs('net','mask','ntpservers'); + } - my $master = `hostname -i`; my $file = "temp.txt"; open(FILE , ">$file") @@ -360,7 +387,6 @@ sub config_ntp { print FILE "driftfile /var/lib/ntp/drift\n"; print FILE "disable auth\n"; print FILE "restrict 127.0.0.1\n"; - print FILE "server $master iburst\n"; print FILE "interface listen eth0\n"; foreach my $switch (@nodes) { @@ -371,15 +397,31 @@ sub config_ntp { xCAT::MsgUtils->message("E","xdsh command to $switch failed"); next; } - my $cmd_line = "echo 'US/Eastern'>/etc/timezone;dpkg-reconfigure --frontend noninteractive tzdata"; - print "$cmd_line\n"; + my $cmd_line = "echo $timezone >/etc/timezone;dpkg-reconfigure --frontend noninteractive tzdata"; $cmd = "xdsh $switch $cmd_line"; if ($::RUNCMD_RC != 0) { print "Failed to update ntp timezone\n"; xCAT::MsgUtils->message("E","Failed to update ntp timezone for $switch"); - next; } - print "$cmd\n"; + #use ntpserver from network table if available + my $ntpserver; + foreach my $net (@nets) { + if (xCAT::NetworkUtils::isInSameSubnet( $net->{'net'}, $switch, $net->{'mask'}, 0)) { + $ntpserver=$net->{'ntpservers'}; + if (defined $ntpserver) { + if ($ntpserver =~ /xcatmaster/) { + @servers = $master; + } else { + @servers = split(',', $ntpserver); + } + } + last; + } + } + foreach my $server (@servers) { + `echo "server $server iburst" >> $file`; + } + $cmd = "xdcp $switch $file"; $rc= xCAT::Utils->runcmd($cmd, 0); $cmd = "xdsh $switch 'cp /etc/ntp.conf /etc/ntp.conf.orig;cp $file /etc/ntp.conf;rm -fr $file;systemctl restart ntp;systemctl enable ntp' "; @@ -398,6 +440,7 @@ sub config_ntp { my $csw = join(",",@config_switches); $cmd = "chdef $csw status=ntp_configured"; $rc= xCAT::Utils->runcmd($cmd, 0); + print "$csw: ntp configured\n"; }