The DHCP server returns various options back to the client,
which may contain a list of NTP servers.
This commit adds support for checking the response if it contains
some NTP servers. If there are some, they will be stored in
ksdata.timezone.ntpservers (only if no NTP servers were
specified by kickstart).
Oh, great idea. I've just got a couple points to me.
@@ -888,8 +891,29 @@ def networkInitialize(ksdata):
hostname = getHostname()
update_hostname_data(ksdata, hostname)
+def _get_ntp_servers_from_dhcp(ksdata):
+ """Check if some NTP servers were returned from DHCP and set them
+ to ksdata (if not NTP servers were specified in the kickstart)"""
+ ntp_servers = nm.nm_ntp_servers_from_dhcp()
+ log.info("got %d NTP servers from DHCP" % len(ntp_servers))
+ hostnames = []
+ for server_address in ntp_servers:
+ try:
+ hostname = socket.gethostbyaddr(server_address)[0]
+ except socket.error:
+ # getting hostname failed, just use the address returned from DHCP
+ log.debug("getting NTP server hostname failed for address: %s"
+ % server_address)
+ hostname = server_address
+ hostnames.append(hostname)
+ # check if some NTP servers were specified from kickstart
+ if not ksdata.timezone.ntpservers:
+ # no NTP servers were specified, add those from DHCP
+ ksdata.timezone.ntpservers = hostnames
+
I think you should put this test at the beginning of the function, and
invert it like so:
if ksdata.timezone.ntpservers:
return
That way, you're not going through all the work of resolving those
addresses just to potentially throw it away.
@@ -263,6 +263,38 @@ def nm_device_ip_addresses(name, version=4):
return retval
+def nm_ntp_servers_from_dhcp():
+ """Return a list of NTP servers that were specified the reply of the
^
I think you're missing a word there.
+ DHCP server or empty list if no NTP servers were returned.
+ The return_hostnames parameter specifies if the NTP server IP
+ addresses from the DHCP reply should be converted to hostnames.
+ """
There's no return_hostnames parameter in this function.
- Chris