diff --git a/ipaplatform/base/services.py b/ipaplatform/base/services.py index 641a65418..a36b2f4ff 100644 --- a/ipaplatform/base/services.py +++ b/ipaplatform/base/services.py @@ -148,7 +148,7 @@ class PlatformService(object): def restart(self, instance_name="", capture_output=True, wait=True): return - def is_running(self, instance_name=""): + def is_running(self, instance_name="", wait=True): return False def is_installed(self): @@ -303,7 +303,7 @@ class SystemdService(PlatformService): if wait and self.is_running(instance_name): self.wait_for_open_ports(self.service_instance(instance_name)) - def is_running(self, instance_name=""): + def is_running(self, instance_name="", wait=True): instance = self.service_instance(instance_name, 'is-active') while True: diff --git a/ipaplatform/redhat/services.py b/ipaplatform/redhat/services.py index 92dae452a..849737059 100644 --- a/ipaplatform/redhat/services.py +++ b/ipaplatform/redhat/services.py @@ -222,6 +222,23 @@ class RedHatCAService(RedHatService): if wait: self.wait_until_running() + def is_running(self, instance_name="", wait=True): + if instance_name: + return super(RedHatCAService, self).is_running(instance_name) + try: + status = dogtag.ca_status() + if status == 'running': + return True + elif status == 'starting' and wait: + # Exception is raised if status is 'starting' even after wait + self.wait_until_running() + return True + except Exception as e: + root_logger.debug( + 'Failed to check CA status: {err}'.format(err=e) + ) + return False + # Function that constructs proper Red Hat OS family-specific server classes for # services of specified name diff --git a/ipaserver/install/service.py b/ipaserver/install/service.py index cdd4354df..057cd3d4b 100644 --- a/ipaserver/install/service.py +++ b/ipaserver/install/service.py @@ -347,8 +347,8 @@ class Service(object): def restart(self, instance_name="", capture_output=True, wait=True): self.service.restart(instance_name, capture_output=capture_output, wait=wait) - def is_running(self): - return self.service.is_running() + def is_running(self, instance_name="", wait=True): + return self.service.is_running(instance_name, wait) def install(self): self.service.install()