diff options
-rwxr-xr-x | install/tools/ipactl | 109 | ||||
-rw-r--r-- | install/tools/man/ipactl.8 | 6 |
2 files changed, 67 insertions, 48 deletions
diff --git a/install/tools/ipactl b/install/tools/ipactl index 58c7f316d..202081d45 100755 --- a/install/tools/ipactl +++ b/install/tools/ipactl @@ -87,6 +87,9 @@ def parse_options(): parser.add_option("-d", "--debug", action="store_true", dest="debug", help="Display debugging information") + parser.add_option("-f", "--force", action="store_true", dest="force", + help="If any service start fails, do not rollback the" + + " services, continue with the operation") options, args = parser.parse_args() safe_options = parser.get_safe_opts(options) @@ -189,6 +192,23 @@ def get_config_from_file(): return ordered_list + +def stop_services(svc_list): + for svc in svc_list: + svc_off = ipaservices.service(svc) + try: + svc_off.stop(capture_output=False) + except Exception: + pass + + +def stop_dirsrv(dirsrv): + try: + dirsrv.stop(capture_output=False) + except Exception: + pass + + def ipa_start(options): if os.path.isfile(ipaservices.get_svc_list_file()): @@ -214,10 +234,10 @@ def ipa_start(options): except Exception, e: emit_err("Failed to data from service file: " + str(e)) emit_err("Shutting down") - try: - dirsrv.stop(capture_output=False) - except: - pass + + if not options.force: + stop_dirsrv(dirsrv) + if isinstance(e, IpactlError): # do not display any other error message raise IpactlError(rval=e.rval) @@ -233,19 +253,17 @@ def ipa_start(options): try: print "Starting %s Service" % svc svchandle.start(capture_output=get_capture_output(svc, options.debug)) - except: + except Exception: emit_err("Failed to start %s Service" % svc) + #if force start specified, skip rollback and continue with the next service + if options.force: + emit_err("Forced start, ignoring %s Service, continuing normal operation" % svc) + continue + emit_err("Shutting down") - for svc in svc_list: - svc_off = ipaservices.service(svc) - try: - svc_off.stop(capture_output=False) - except: - pass - try: - dirsrv.stop(capture_output=False) - except: - pass + stop_services(svc_list) + stop_dirsrv(dirsrv) + raise IpactlError("Aborting ipactl") def ipa_stop(options): @@ -354,16 +372,11 @@ def ipa_restart(options): except Exception, e: emit_err("Failed to restart Directory Service: " + str(e)) emit_err("Shutting down") - for svc in reversed(svc_list): - svc_off = ipaservices.service(svc) - try: - svc_off.stop(capture_output=False) - except: - pass - try: - dirsrv.stop(capture_output=False) - except: - pass + + if not options.force: + stop_services(reversed(svc_list)) + stop_dirsrv(dirsrv) + raise IpactlError("Aborting ipactl") if len(svc_list) != 0: @@ -374,19 +387,17 @@ def ipa_restart(options): try: print "Restarting %s Service" % svc svchandle.restart(capture_output=get_capture_output(svc, options.debug)) - except: + except Exception: emit_err("Failed to restart %s Service" % svc) + #if force start specified, skip rollback and continue with the next service + if options.force: + emit_err("Forced restart, ignoring %s Service, continuing normal operation" % svc) + continue + emit_err("Shutting down") - for svc in reversed(svc_list): - svc_off = ipaservices.service(svc) - try: - svc_off.stop(capture_output=False) - except: - pass - try: - dirsrv.stop(capture_output=False) - except: - pass + stop_services(svc_list) + stop_dirsrv(dirsrv) + raise IpactlError("Aborting ipactl") if len(new_svc_list) != 0: @@ -396,25 +407,27 @@ def ipa_restart(options): try: print "Starting %s Service" % svc svchandle.start(capture_output=get_capture_output(svc, options.debug)) - except: + except Exception: emit_err("Failed to start %s Service" % svc) + #if force start specified, skip rollback and continue with the next service + if options.force: + emit_err("Forced start, ignoring %s Service, continuing normal operation" % svc) + continue + emit_err("Shutting down") - for svc in reversed(svc_list): - svc_off = ipaservices.service(svc) - try: - svc_off.stop(capture_output=False) - except: - pass - try: - dirsrv.stop(capture_output=False) - except: - pass + stop_services(svc_list) + stop_dirsrv(dirsrv) + raise IpactlError("Aborting ipactl") def ipa_status(options): try: - svc_list = get_config_from_file() + dirsrv = ipaservices.knownservices.dirsrv + if dirsrv.is_running(): + svc_list = get_config(dirsrv) + else: + svc_list = get_config_from_file() except IpactlError, e: if os.path.exists(ipaservices.get_svc_list_file()): raise e diff --git a/install/tools/man/ipactl.8 b/install/tools/man/ipactl.8 index 05be8e0e2..5a1fd27ad 100644 --- a/install/tools/man/ipactl.8 +++ b/install/tools/man/ipactl.8 @@ -37,3 +37,9 @@ Stop all of the services that make up IPA .TP restart Stop then start all of the services that make up IPA +.TP +\fB\-d\fR, \fB\-\-debug\fR +Display debugging information +.TP +\fB\-f\fR, \fB\-\-force\fR +If any service start fails, do not rollback the services, continue with the operation |