pgreco / rpms / ipa

Forked from forks/areguera/rpms/ipa 4 years ago
Clone
Blob Blame History Raw
From a81a4a502b020e0b0d91e6018914ea18b4e3e47e Mon Sep 17 00:00:00 2001
From: Felipe Barreto <fbarreto@redhat.com>
Date: Wed, 20 Sep 2017 09:51:44 -0300
Subject: [PATCH] Checks if Dir Server is installed and running before IPA
 installation

In cases when IPA is installed in two steps (external CA), it's
necessary to check (in the second step) if Dir. Server is
running before continue with the installation. If it's not,
start Directory Server.

https://pagure.io/freeipa/issue/6611

Reviewed-By: Fraser Tweedale <ftweedal@redhat.com>
Reviewed-By: Christian Heimes <cheimes@redhat.com>
---
 ipaplatform/redhat/services.py      | 4 ++++
 ipaserver/install/server/install.py | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/ipaplatform/redhat/services.py b/ipaplatform/redhat/services.py
index 8fae1f3cc5b12dba0fa0192f21bc6d2d369941eb..57aa15ad9a4d83366ff02e5a5ca6e4574561e1fa 100644
--- a/ipaplatform/redhat/services.py
+++ b/ipaplatform/redhat/services.py
@@ -119,6 +119,10 @@ class RedHatDirectoryService(RedHatService):
 
         return True
 
+    def is_installed(self, instance_name):
+        file_path = "{}/{}-{}".format(paths.ETC_DIRSRV, "slapd", instance_name)
+        return os.path.exists(file_path)
+
     def restart(self, instance_name="", capture_output=True, wait=True,
                 ldapi=False):
     # We need to explicitly enable instances to install proper symlinks as
diff --git a/ipaserver/install/server/install.py b/ipaserver/install/server/install.py
index 97cbc6d8c84ee8fc21b6f8983c7897dc5d30c42d..422474fa915b4876530f304ef9424f6b31cf26cc 100644
--- a/ipaserver/install/server/install.py
+++ b/ipaserver/install/server/install.py
@@ -616,6 +616,14 @@ def install_check(installer):
         # check addresses here, dns module is doing own check
         no_matching_interface_for_ip_address_warning(ip_addresses)
 
+    instance_name = "-".join(realm_name.split("."))
+    dirsrv = services.knownservices.dirsrv
+    if (options.external_cert_files
+           and dirsrv.is_installed(instance_name)
+           and not dirsrv.is_running(instance_name)):
+        root_logger.debug('Starting Directory Server')
+        services.knownservices.dirsrv.start(instance_name)
+
     if options.setup_adtrust:
         adtrust.install_check(False, options, api)
 
-- 
2.13.6