diff --git a/ipaclient/install/client.py b/ipaclient/install/client.py index 6a723356c..0488108a7 100644 --- a/ipaclient/install/client.py +++ b/ipaclient/install/client.py @@ -2470,18 +2470,21 @@ def sync_time(options, fstore, statestore): # disable other time&date services first timeconf.force_chrony(statestore) - logger.info('Synchronizing time') - - if not options.ntp_servers: + if not options.ntp_servers and not options.ntp_pool: ds = discovery.IPADiscovery() ntp_servers = ds.ipadns_search_srv(cli_domain, '_ntp._udp', None, break_on_first=False) - else: - ntp_servers = options.ntp_servers + if not ntp_servers and not options.unattended: + options.ntp_servers, options.ntp_pool = timeconf.get_time_source() + else: + options.ntp_servers = ntp_servers + + logger.info('Synchronizing time') configured = False - if ntp_servers or options.ntp_pool: - configured = timeconf.configure_chrony(ntp_servers, options.ntp_pool, + if options.ntp_servers or options.ntp_pool: + configured = timeconf.configure_chrony(options.ntp_servers, + options.ntp_pool, fstore, statestore) else: logger.warning("No SRV records of NTP servers found and no NTP server " diff --git a/ipaclient/install/timeconf.py b/ipaclient/install/timeconf.py index 57ab50a3f..4afe5b32c 100644 --- a/ipaclient/install/timeconf.py +++ b/ipaclient/install/timeconf.py @@ -28,6 +28,7 @@ from ipapython import ipautil from ipaplatform.tasks import tasks from ipaplatform import services from ipaplatform.paths import paths +from ipapython.ipautil import user_input logger = logging.getLogger(__name__) @@ -39,6 +40,36 @@ def __backup_config(path, fstore=None): shutil.copy(path, "%s.ipasave" % (path)) +def get_time_source(): + """ + While in interactive installation user has to specify NTP server or pool + to be used in chrony configuration. This method asks user input on these + values in case that they were not specified before installation start. + """ + ntp_servers = [] + ntp_pool = "" + + if ipautil.user_input("Do you want to configure chrony " + "with NTP server or pool address?", False): + servers = user_input("Enter NTP source server addresses separated by " + "comma, or press Enter to skip", allow_empty=True) + if servers: # if user input is not '' (empty) + logger.debug("User provided NTP server(s):") + # cut possible multiple servers separated by comma into list + for server in servers.split(","): + # users tend to separate servers by ", " so strip() whitespaces + server = server.strip() + ntp_servers.append(server) + logger.debug("\t%s", server) + + ntp_pool = user_input("Enter a NTP source pool address, " + "or press Enter to skip", allow_empty=True) + if ntp_pool: # if user input is not '' (empty) + logger.debug("User provided NTP pool:\n\t%s", ntp_pool) + + return ntp_servers, ntp_pool + + def sync_chrony(): """ This method enables chronyd service on boot and restarts it to reload