diff --git a/library/ipadiscovery.py b/library/ipadiscovery.py index 16b7d78c612d983b84597d79228fda2fe5c707c9..e98ab164e8e65df08de8c64e22d12f046a424636 100644 --- a/library/ipadiscovery.py +++ b/library/ipadiscovery.py @@ -52,6 +52,23 @@ options: ca_cert_file: description: A CA certificate to use. required: false + on_master: + description: IPA client installation on IPA server + required: false + default: false + type: bool + default: no + ntp_servers: + description: List of NTP servers to use + required: false + type: list + default: [] + no_ntp: + description: Do not sync time and do not detect time servers + required: false + default: false + type: bool + default: no author: - Thomas Woerner ''' @@ -204,6 +221,9 @@ def main(): realm=dict(required=False), hostname=dict(required=False), ca_cert_file=dict(required=False), + on_master=dict(required=False, type='bool', default=False), + ntp_servers=dict(required=False, type='list', default=[]), + no_ntp=dict(required=False, type='bool', default=False), ), supports_check_mode = True, ) @@ -214,6 +234,9 @@ def main(): opt_realm = module.params.get('realm') opt_hostname = module.params.get('hostname') opt_ca_cert_file = module.params.get('ca_cert_file') + opt_on_master = module.params.get('on_master') + opt_ntp_servers = module.params.get('ntp_servers') + opt_no_ntp = module.params.get('no_ntp') hostname = None hostname_source = None @@ -409,10 +432,32 @@ def main(): "installation may fail.") break - # Detect NTP servers - ds = ipadiscovery.IPADiscovery() - ntp_servers = ds.ipadns_search_srv(cli_domain, '_ntp._udp', - None, break_on_first=False) + if not opt_on_master and not opt_no_ntp: + if len(opt_ntp_servers) < 1: + # Detect NTP servers + ds = ipadiscovery.IPADiscovery() + ntp_servers = ds.ipadns_search_srv(cli_domain, '_ntp._udp', + None, break_on_first=False) + else: + ntp_servers = opt_ntp_servers + + # Attempt to sync time: + # At first with given or dicovered time servers. If no ntp + # servers have been given or discovered, then with the ipa + # server. + module.log('Synchronizing time ...') + synced_ntp = False + # use user specified NTP servers if there are any + for s in ntp_servers: + synced_ntp = ntpconf.synconce_ntp(s, False) + if synced_ntp: + break + if not synced_ntp and not ntp_servers: + synced_ntp = ntpconf.synconce_ntp(cli_server[0], False) + if not synced_ntp: + module.warn("Unable to sync time with NTP server") + else: + ntp_servers = [ ] # Check if ipa client is already configured if is_client_configured(): diff --git a/roles/ipaclient/defaults/main.yml b/roles/ipaclient/defaults/main.yml index c3baf7015b487bfac8cc1cda21de469cf59f5197..ddc549788500aa153073907233c800a117f081b6 100644 --- a/roles/ipaclient/defaults/main.yml +++ b/roles/ipaclient/defaults/main.yml @@ -8,3 +8,4 @@ ipaclient_kinit_attempts: 5 ipaclient_use_otp: no ipaclient_allow_repair: no ipaclient_on_master: no +ipaclient_no_ntp: no diff --git a/roles/ipaclient/tasks/install.yml b/roles/ipaclient/tasks/install.yml index 001cd8759eab4e284e42fd9ac0e681bd3518e18b..c3fc1277b0596dac5818aac6218d455b80763c2d 100644 --- a/roles/ipaclient/tasks/install.yml +++ b/roles/ipaclient/tasks/install.yml @@ -18,6 +18,9 @@ realm: "{{ ipaclient_realm | default(omit) }}" hostname: "{{ ipaclient_hostname | default(ansible_fqdn) }}" ca_cert_file: "{{ ipaclient_ca_cert_file | default(omit) }}" + on_master: "{{ ipaclient_on_master }}" + ntp_servers: "{{ ipaclient_ntp_servers | default([]) }}" + no_ntp: "{{ ipaclient_no_ntp }}" register: ipadiscovery - name: Install - Set default principal if no keytab is given