2737e7
From 0f6afe8ffa39804d7bb5e86e4aa447f4d56a4dfa Mon Sep 17 00:00:00 2001
2737e7
From: Christian Heimes <cheimes@redhat.com>
2737e7
Date: Thu, 5 Jul 2018 23:59:06 +0200
2737e7
Subject: [PATCH] Only create DNS SRV records for ready server
2737e7
2737e7
When installing multiple replicas in parallel, one replica may create
2737e7
SRV entries for other replicas, although the replicas aren't fully
2737e7
installed yet. This may cause some services to connect to a server, that
2737e7
isn't ready to serve requests.
2737e7
2737e7
The DNS IPASystemRecords framework now skips all servers that aren't
2737e7
ready IPA masters.
2737e7
2737e7
See: https://pagure.io/freeipa/issue/7566
2737e7
Signed-off-by: Christian Heimes <cheimes@redhat.com>
2737e7
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
2737e7
Reviewed-By: Fraser Tweedale <ftweedal@redhat.com>
2737e7
---
2737e7
 ipaserver/dns_data_management.py | 8 ++++++--
2737e7
 1 file changed, 6 insertions(+), 2 deletions(-)
2737e7
2737e7
diff --git a/ipaserver/dns_data_management.py b/ipaserver/dns_data_management.py
2737e7
index 2008ba6e7d387046b74e3de0af644d97b145ccb7..6016d8a0044d487c3118f43f199b2a433facfa9a 100644
2737e7
--- a/ipaserver/dns_data_management.py
2737e7
+++ b/ipaserver/dns_data_management.py
2737e7
@@ -93,7 +93,9 @@ class IPASystemRecords(object):
2737e7
         self.servers_data = {}
2737e7
 
2737e7
         servers_result = self.api_instance.Command.server_find(
2737e7
-            no_members=False)['result']
2737e7
+            no_members=False,
2737e7
+            servrole=u"IPA master",  # only active, fully installed masters
2737e7
+        )['result']
2737e7
         for s in servers_result:
2737e7
             weight, location, roles = self.__get_server_attrs(s)
2737e7
             self.servers_data[s['cn'][0]] = {
2737e7
@@ -345,7 +347,9 @@ class IPASystemRecords(object):
2737e7
         zone_obj = zone.Zone(self.domain_abs, relativize=False)
2737e7
         if servers is None:
2737e7
             servers_result = self.api_instance.Command.server_find(
2737e7
-                pkey_only=True)['result']
2737e7
+                pkey_only=True,
2737e7
+                servrole=u"IPA master",  # only fully installed masters
2737e7
+            )['result']
2737e7
             servers = [s['cn'][0] for s in servers_result]
2737e7
 
2737e7
         locations_result = self.api_instance.Command.location_find()['result']
2737e7
-- 
2737e7
2.17.1
2737e7