summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Smetana <tsmetana@redhat.com>2014-06-26 12:45:11 +0200
committerTomas Smetana <tsmetana@redhat.com>2014-06-26 12:45:55 +0200
commit67006a81bb288f12850015ff5a6ed808c47dc8be (patch)
tree5b450d5e8e3adcfda624000fd4e667481bbbe584
parentc54f67f2c51ad24e288c3b44960add2d45f89c79 (diff)
downloadopenlmi-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-xopenlmi-mof-register34
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()