mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
ipatests: setup resolvers during replica and client installations
Set IPA master as nameserver on replica and client machines during default installation. This will help to avoid manual configuration in test cases which require members of IPA domain to be resolvable. Related to https://pagure.io/freeipa/issue/8703 Reviewed-By: Florence Blanc-Renaud <flo@redhat.com>
This commit is contained in:
@@ -406,21 +406,19 @@ def master_authoritative_for_client_domain(master, client):
|
||||
return result.returncode == 0
|
||||
|
||||
|
||||
def config_host_resolvconf_with_master_data(master, host):
|
||||
"""
|
||||
Configure host /etc/resolv.conf to use master as DNS server
|
||||
"""
|
||||
content = ('search {domain}\nnameserver {master_ip}'
|
||||
.format(domain=master.domain.name, master_ip=master.ip))
|
||||
host.put_file_contents(paths.RESOLV_CONF, content)
|
||||
|
||||
|
||||
def install_replica(master, replica, setup_ca=True, setup_dns=False,
|
||||
setup_kra=False, setup_adtrust=False, extra_args=(),
|
||||
domain_level=None, unattended=True, stdin_text=None,
|
||||
raiseonerr=True, promote=True):
|
||||
raiseonerr=True, promote=True, nameservers='master'):
|
||||
"""
|
||||
This task installs client and then promote it to the replica
|
||||
|
||||
:param nameservers: nameservers to write in resolver config. Possible
|
||||
values:
|
||||
* "master" - use ip of `master` parameter
|
||||
* None - do not setup resolver
|
||||
* IP_ADDRESS or [IP_ADDRESS, ...] - use this address as resolver
|
||||
|
||||
"""
|
||||
replica_args = list(extra_args) # needed for client's ntp options
|
||||
if domain_level is None:
|
||||
@@ -451,12 +449,18 @@ def install_replica(master, replica, setup_ca=True, setup_dns=False,
|
||||
for ntp_arg in ntp_args:
|
||||
replica_args.remove(ntp_arg)
|
||||
|
||||
install_client(master, replica, extra_args=ntp_args)
|
||||
install_client(master, replica, extra_args=ntp_args,
|
||||
nameservers=nameservers)
|
||||
else:
|
||||
# for one step installation of replica we need authorized user
|
||||
# to enroll a replica and master server to contact
|
||||
args.extend(['--principal', replica.config.admin_name,
|
||||
'--server', master.hostname])
|
||||
replica.resolver.backup()
|
||||
if nameservers is not None:
|
||||
if nameservers == 'master':
|
||||
nameservers = master.ip
|
||||
replica.resolver.setup_resolver(nameservers, master.domain.name)
|
||||
|
||||
if unattended:
|
||||
args.append('-U')
|
||||
@@ -499,7 +503,15 @@ def install_replica(master, replica, setup_ca=True, setup_dns=False,
|
||||
|
||||
|
||||
def install_client(master, client, extra_args=[], user=None,
|
||||
password=None, unattended=True, stdin_text=None):
|
||||
password=None, unattended=True, stdin_text=None,
|
||||
nameservers='master'):
|
||||
"""
|
||||
:param nameservers: nameservers to write in resolver config. Possible
|
||||
values:
|
||||
* "master" - use ip of `master` parameter
|
||||
* None - do not setup resolver
|
||||
* IP_ADDRESS or [IP_ADDRESS, ...] - use this address as resolver
|
||||
"""
|
||||
apply_common_fixes(client)
|
||||
allow_sync_ptr(master)
|
||||
# Now, for the situations where a client resides in a different subnet from
|
||||
@@ -509,6 +521,11 @@ def install_client(master, client, extra_args=[], user=None,
|
||||
if not error:
|
||||
master.run_command(["ipa", "dnszone-mod", zone,
|
||||
"--dynamic-update=TRUE"])
|
||||
if nameservers is not None:
|
||||
client.resolver.backup()
|
||||
if nameservers == 'master':
|
||||
nameservers = master.ip
|
||||
client.resolver.setup_resolver(nameservers, master.domain.name)
|
||||
if user is None:
|
||||
user = client.config.admin_name
|
||||
if password is None:
|
||||
@@ -1024,6 +1041,8 @@ def uninstall_master(host, ignore_topology_disconnect=True,
|
||||
"xargs rm -fv" % paths.SSSD_KEYTABS_DIR, raiseonerr=False)
|
||||
host.run_command("find /run/ipa -name 'krb5*' | xargs rm -fv",
|
||||
raiseonerr=False)
|
||||
while host.resolver.has_backups():
|
||||
host.resolver.restore()
|
||||
if clean:
|
||||
unapply_fixes(host)
|
||||
|
||||
@@ -1031,6 +1050,8 @@ def uninstall_master(host, ignore_topology_disconnect=True,
|
||||
def uninstall_client(host):
|
||||
host.run_command(['ipa-client-install', '--uninstall', '-U'],
|
||||
raiseonerr=False)
|
||||
while host.resolver.has_backups():
|
||||
host.resolver.restore()
|
||||
unapply_fixes(host)
|
||||
|
||||
|
||||
@@ -1345,18 +1366,35 @@ def install_topo(topo, master, replicas, clients, domain_level=None,
|
||||
install_replica(
|
||||
parent, child,
|
||||
setup_ca=setup_replica_cas,
|
||||
setup_kra=setup_replica_kras
|
||||
setup_kra=setup_replica_kras,
|
||||
nameservers=master.ip,
|
||||
)
|
||||
installed.add(child)
|
||||
install_clients([master] + replicas, clients, clients_extra_args)
|
||||
|
||||
|
||||
def install_clients(servers, clients, extra_args=()):
|
||||
"""Install IPA clients, distributing them among the given servers"""
|
||||
def install_clients(servers, clients, extra_args=(),
|
||||
nameservers='first'):
|
||||
"""Install IPA clients, distributing them among the given servers
|
||||
|
||||
:param nameservers: nameservers to write in resolver config on clients.
|
||||
Possible values:
|
||||
* "first" - use ip of the first item in `servers` parameter
|
||||
* "distribute" - use ip of master/replica which is used for client
|
||||
installation
|
||||
* None - do not setup resolver
|
||||
* IP_ADDRESS or [IP_ADDRESS, ...] - use this address as resolver
|
||||
"""
|
||||
izip = getattr(itertools, 'izip', zip)
|
||||
client_nameservers = nameservers
|
||||
for server, client in izip(itertools.cycle(servers), clients):
|
||||
logger.info('Installing client %s on %s', server, client)
|
||||
install_client(server, client, extra_args)
|
||||
if nameservers == 'distribute':
|
||||
client_nameservers = server.ip
|
||||
if nameservers == 'first':
|
||||
client_nameservers = servers[0].ip
|
||||
install_client(server, client, extra_args,
|
||||
nameservers=client_nameservers)
|
||||
|
||||
|
||||
def _entries_to_ldif(entries):
|
||||
|
||||
Reference in New Issue
Block a user