summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipaplatform/redhat/services.py47
-rw-r--r--ipaserver/install/upgradeinstance.py3
2 files changed, 33 insertions, 17 deletions
diff --git a/ipaplatform/redhat/services.py b/ipaplatform/redhat/services.py
index 565bf1fde..757908f95 100644
--- a/ipaplatform/redhat/services.py
+++ b/ipaplatform/redhat/services.py
@@ -25,6 +25,7 @@ Contains Red Hat OS family-specific service class implementations.
import os
import time
import xml.dom.minidom
+import contextlib
from ipaplatform.tasks import tasks
from ipaplatform.base import services as base_services
@@ -124,7 +125,8 @@ class RedHatDirectoryService(RedHatService):
return True
- def restart(self, instance_name="", capture_output=True, wait=True):
+ def restart(self, instance_name="", capture_output=True, wait=True,
+ ldapi=False):
# We need to explicitly enable instances to install proper symlinks as
# dirsrv.target.wants/ dependencies. Standard systemd service class does it
# on enable() method call. Unfortunately, ipa-server-install does not do
@@ -150,22 +152,35 @@ class RedHatDirectoryService(RedHatService):
os.unlink(srv_lnk)
os.symlink(srv_etc, srv_lnk)
- super(RedHatDirectoryService, self).restart(instance_name,
- capture_output=capture_output, wait=wait)
-
- def wait_for_open_ports(self, instance_name=""):
- if instance_name.endswith('.service'):
- instance_name = instance_name[:-8]
- if instance_name.startswith('dirsrv@'):
- instance_name = instance_name[7:]
-
- if instance_name:
-
- ipautil.wait_for_open_socket(
- paths.SLAPD_INSTANCE_SOCKET_TEMPLATE % instance_name,
- self.api.env.startup_timeout)
+ with self.__wait(instance_name, wait, ldapi) as wait:
+ super(RedHatDirectoryService, self).restart(
+ instance_name, capture_output=capture_output, wait=wait)
+
+ def start(self, instance_name="", capture_output=True, wait=True,
+ ldapi=False):
+ with self.__wait(instance_name, wait, ldapi) as wait:
+ super(RedHatDirectoryService, self).start(
+ instance_name, capture_output=capture_output, wait=wait)
+
+ @contextlib.contextmanager
+ def __wait(self, instance_name, wait, ldapi):
+ if ldapi:
+ instance_name = self.service_instance(instance_name)
+ if instance_name.endswith('.service'):
+ instance_name = instance_name[:-8]
+ if instance_name.startswith('dirsrv'):
+ # this is intentional, return the empty string if the instance
+ # name is 'dirsrv'
+ instance_name = instance_name[7:]
+ if not instance_name:
+ ldapi = False
+ if ldapi:
+ yield False
+ socket_name = paths.SLAPD_INSTANCE_SOCKET_TEMPLATE % instance_name
+ ipautil.wait_for_open_socket(socket_name,
+ self.api.env.startup_timeout)
else:
- super(RedHatDirectoryService, self).wait_for_open_ports()
+ yield wait
class RedHatIPAService(RedHatService):
diff --git a/ipaserver/install/upgradeinstance.py b/ipaserver/install/upgradeinstance.py
index d58c934bc..10f7c2ce0 100644
--- a/ipaserver/install/upgradeinstance.py
+++ b/ipaserver/install/upgradeinstance.py
@@ -24,6 +24,7 @@ import shutil
import random
import traceback
from ipaplatform.paths import paths
+from ipaplatform import services
from ipapython.ipa_log_manager import *
from ipapython import ipaldap
@@ -172,7 +173,7 @@ class IPAUpgrade(service.Service):
self.realm = realm_name
def __start(self):
- super(IPAUpgrade, self).start()
+ services.service(self.service_name).start(self.serverid, ldapi=True)
def __stop_instance(self):
"""Stop only the main DS instance"""