diff options
author | Tomas Smetana <tsmetana@redhat.com> | 2014-06-26 12:45:11 +0200 |
---|---|---|
committer | Tomas Smetana <tsmetana@redhat.com> | 2014-06-26 12:45:55 +0200 |
commit | 67006a81bb288f12850015ff5a6ed808c47dc8be (patch) | |
tree | 5b450d5e8e3adcfda624000fd4e667481bbbe584 | |
parent | c54f67f2c51ad24e288c3b44960add2d45f89c79 (diff) | |
download | openlmi-providers-67006a81bb288f12850015ff5a6ed808c47dc8be.tar.gz openlmi-providers-67006a81bb288f12850015ff5a6ed808c47dc8be.tar.xz openlmi-providers-67006a81bb288f12850015ff5a6ed808c47dc8be.zip |
openlmi-mof-register: exit on external command error (fix #311)
-rwxr-xr-x | openlmi-mof-register | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/openlmi-mof-register b/openlmi-mof-register index 2b4cce5..5e493d7 100755 --- a/openlmi-mof-register +++ b/openlmi-mof-register @@ -101,13 +101,17 @@ def log_msg(msg): sys.stderr.write(" " + msg + "\n") sys.stderr.flush() -def log_command(cmd, args): +def log_command(cmd, args, quit_on_err = True): log_msg("COMMAND: " + cmd + " " + " ".join(args)) try: rv = subprocess.check_call([cmd] + args) except subprocess.CalledProcessError as e: log_msg(str(e)) rv = e.returncode + if (quit_on_err): + log_msg("ERROR: Process returned " + str(rv)) + log_msg("Bailing out.") + sys.exit(rv) log_msg("EXIT CODE: " + str(rv)) return rv @@ -186,13 +190,11 @@ instance of PG_ProviderCapabilities """ % { 'location': location, 'provider': provider, 'class': cls, 'types': get_types(types), 'group': group } def start_pegasus(): - if log_command("/usr/sbin/cimserver", ["daemon=true", + log_command("/usr/sbin/cimserver", ["daemon=true", "enableHttpConnection=false", "enableHttpsConnection=false", "enableRemotePrivilegedUserAccess=false", - "slp=false"]) != 0: - log_msg("Cannot start Pegasus") - sys.exit(1) + "slp=false"]) def stop_pegasus(): log_command("/usr/sbin/cimserver", ["-s"]) @@ -228,8 +230,11 @@ def register_pegasus(reg, version, cimmof, cm_args): tmpfile.flush() interop_ns = find_pegasus_interop() cm_args += ["-uc", "-n", interop_ns, tmpfile.name] - log_command(cimmof, cm_args) + # Don't allow log_command to exit: need to clean-up first + rv = log_command(cimmof, cm_args, False) tmpfile.close() # deletes the file + if (rv != 0): + sys.exit(rv) def cimom_register(mofs, reg, version, namespace, cimom): if cimom['sfcbd']: @@ -255,6 +260,14 @@ def cimom_register(mofs, reg, version, namespace, cimom): if reg: register_pegasus(reg, version, cimmof, repo_args) +# helper function: if something went wrong during unregistration, +# stop Pegasus before bailing out +def check_retval(rv, stop): + if (rv != 0): + if stop: + stop_pegasus() + sys.exit(rv) + def cimom_unregister(mofs, reg, version, namespace, cimom): if cimom['sfcbd']: args = ["-n", namespace] @@ -287,9 +300,12 @@ def cimom_unregister(mofs, reg, version, namespace, cimom): if p != rline: providers.add(p) for p in providers: - log_command("/usr/bin/cimprovider", ["-d", "-m", p]) - log_command("/usr/bin/cimprovider", ["-r", "-m", p]) - log_command("/usr/bin/mofcomp", ["-n", namespace] + mofs) + check_retval(log_command("/usr/bin/cimprovider", ["-d", + "-m", p], False), custom_pegasus) + check_retval(log_command("/usr/bin/cimprovider", ["-r", + "-m", p], False), custom_pegasus) + check_retval(log_command("/usr/bin/mofcomp", ["-n", namespace] + + mofs, False), custom_pegasus) if custom_pegasus: stop_pegasus() |