diff options
author | Martin Basti <mbasti@redhat.com> | 2015-05-25 09:01:42 +0200 |
---|---|---|
committer | Jan Cholasta <jcholast@redhat.com> | 2015-05-26 11:30:15 +0000 |
commit | f903c2d5bff3e420519f7bbf026b9bfcc5460fb0 (patch) | |
tree | ae08c7261394d1322af44a3439f814eaf5537bcb | |
parent | 4bcc2546d59041f0d09960d6f9d44ca68bd424e1 (diff) | |
download | freeipa-f903c2d5bff3e420519f7bbf026b9bfcc5460fb0.tar.gz freeipa-f903c2d5bff3e420519f7bbf026b9bfcc5460fb0.tar.xz freeipa-f903c2d5bff3e420519f7bbf026b9bfcc5460fb0.zip |
Fix: use DS socket check only for upgrade
To detect if DS server is running, use the slapd socket for upgrade, and the LDAP port
for installation.
Without enabled LDAPi socket checking doesnt work.
https://fedorahosted.org/freeipa/ticket/4904
Reviewed-By: Fraser Tweedale <ftweedal@redhat.com>
-rw-r--r-- | ipaplatform/redhat/services.py | 47 | ||||
-rw-r--r-- | ipaserver/install/upgradeinstance.py | 3 |
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""" |