mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Support interactive prompt for ntp options
As the FreeIPA server is no longer a NTP service providing instance its clients and replicas configuration of time service can not be handled as it was before change to chrony. Configuration using master FQDN or autodiscovery for DNS record would make no difference because every FreeIPA instance is only chrony client now and does not update DNS _ntp._udp record. FreeIPA now asks user for NTP source server or pool address in interactive mode if there is no server nor pool specified and autodiscovery has not found any NTP source in DNS records. Resolves: https://pagure.io/freeipa/issue/7747 Reviewed-By: Christian Heimes <cheimes@redhat.com> Reviewed-By: Rob Crittenden <rcritten@redhat.com>
This commit is contained in:
parent
cf42dc1f29
commit
536e7da6d2
@ -2470,18 +2470,21 @@ def sync_time(options, fstore, statestore):
|
|||||||
# disable other time&date services first
|
# disable other time&date services first
|
||||||
timeconf.force_chrony(statestore)
|
timeconf.force_chrony(statestore)
|
||||||
|
|
||||||
logger.info('Synchronizing time')
|
if not options.ntp_servers and not options.ntp_pool:
|
||||||
|
|
||||||
if not options.ntp_servers:
|
|
||||||
ds = discovery.IPADiscovery()
|
ds = discovery.IPADiscovery()
|
||||||
ntp_servers = ds.ipadns_search_srv(cli_domain, '_ntp._udp',
|
ntp_servers = ds.ipadns_search_srv(cli_domain, '_ntp._udp',
|
||||||
None, break_on_first=False)
|
None, break_on_first=False)
|
||||||
else:
|
if not ntp_servers and not options.unattended:
|
||||||
ntp_servers = options.ntp_servers
|
options.ntp_servers, options.ntp_pool = timeconf.get_time_source()
|
||||||
|
else:
|
||||||
|
options.ntp_servers = ntp_servers
|
||||||
|
|
||||||
|
logger.info('Synchronizing time')
|
||||||
|
|
||||||
configured = False
|
configured = False
|
||||||
if ntp_servers or options.ntp_pool:
|
if options.ntp_servers or options.ntp_pool:
|
||||||
configured = timeconf.configure_chrony(ntp_servers, options.ntp_pool,
|
configured = timeconf.configure_chrony(options.ntp_servers,
|
||||||
|
options.ntp_pool,
|
||||||
fstore, statestore)
|
fstore, statestore)
|
||||||
else:
|
else:
|
||||||
logger.warning("No SRV records of NTP servers found and no NTP server "
|
logger.warning("No SRV records of NTP servers found and no NTP server "
|
||||||
|
@ -28,6 +28,7 @@ from ipapython import ipautil
|
|||||||
from ipaplatform.tasks import tasks
|
from ipaplatform.tasks import tasks
|
||||||
from ipaplatform import services
|
from ipaplatform import services
|
||||||
from ipaplatform.paths import paths
|
from ipaplatform.paths import paths
|
||||||
|
from ipapython.ipautil import user_input
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -39,6 +40,36 @@ def __backup_config(path, fstore=None):
|
|||||||
shutil.copy(path, "%s.ipasave" % (path))
|
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():
|
def sync_chrony():
|
||||||
"""
|
"""
|
||||||
This method enables chronyd service on boot and restarts it to reload
|
This method enables chronyd service on boot and restarts it to reload
|
||||||
|
Loading…
Reference in New Issue
Block a user