mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
lvmdbusd: Add command_log_selection to command line
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2145114
This commit is contained in:
parent
8f60c49451
commit
e63b0c7262
@ -17,7 +17,7 @@ import os
|
|||||||
|
|
||||||
from lvmdbusd import cfg
|
from lvmdbusd import cfg
|
||||||
from lvmdbusd.utils import pv_dest_ranges, log_debug, log_error, add_no_notify,\
|
from lvmdbusd.utils import pv_dest_ranges, log_debug, log_error, add_no_notify,\
|
||||||
make_non_block, read_decoded, extract_stack_trace, LvmBug, add_config_option
|
make_non_block, read_decoded, extract_stack_trace, LvmBug, add_config_option, get_error_msg
|
||||||
from lvmdbusd.lvm_shell_proxy import LVMShellProxy
|
from lvmdbusd.lvm_shell_proxy import LVMShellProxy
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -121,6 +121,9 @@ def call_lvm(command, debug=False, line_cb=None,
|
|||||||
command.insert(0, cfg.LVM_CMD)
|
command.insert(0, cfg.LVM_CMD)
|
||||||
command = add_no_notify(command)
|
command = add_no_notify(command)
|
||||||
|
|
||||||
|
# Ensure we get an error message when we fork & exec the lvm command line
|
||||||
|
command = add_config_option(command, "--config", 'log/command_log_selection="log_context!=''"')
|
||||||
|
|
||||||
process = Popen(command, stdout=PIPE, stderr=PIPE, close_fds=True,
|
process = Popen(command, stdout=PIPE, stderr=PIPE, close_fds=True,
|
||||||
env=os.environ)
|
env=os.environ)
|
||||||
|
|
||||||
@ -167,7 +170,17 @@ def call_lvm(command, debug=False, line_cb=None,
|
|||||||
if debug or (process.returncode != 0 and (process.returncode != 5 and "fullreport" in command)):
|
if debug or (process.returncode != 0 and (process.returncode != 5 and "fullreport" in command)):
|
||||||
_debug_c(command, process.returncode, (stdout_text, stderr_text))
|
_debug_c(command, process.returncode, (stdout_text, stderr_text))
|
||||||
|
|
||||||
return process.returncode, stdout_text, stderr_text
|
try:
|
||||||
|
report_json = json.loads(stdout_text)
|
||||||
|
except json.decoder.JSONDecodeError:
|
||||||
|
# Some lvm commands don't return json even though we are asking for it to do so.
|
||||||
|
return process.returncode, stdout_text, stderr_text
|
||||||
|
|
||||||
|
error_msg = get_error_msg(report_json)
|
||||||
|
if error_msg:
|
||||||
|
stderr_text += error_msg
|
||||||
|
|
||||||
|
return process.returncode, report_json, stderr_text
|
||||||
else:
|
else:
|
||||||
if cfg.run.value == 0:
|
if cfg.run.value == 0:
|
||||||
raise SystemExit
|
raise SystemExit
|
||||||
@ -619,20 +632,8 @@ def lvm_full_report_json():
|
|||||||
rc, out, err = call(cmd)
|
rc, out, err = call(cmd)
|
||||||
# When we have an exported vg the exit code of lvs or fullreport will be 5
|
# When we have an exported vg the exit code of lvs or fullreport will be 5
|
||||||
if rc == 0 or rc == 5:
|
if rc == 0 or rc == 5:
|
||||||
# If the 'call' implementation is lvmshell, the out is a dictionary as lvmshell has to
|
assert(type(out) == dict)
|
||||||
# parse the output to get the exit value. When doing fork & exec, out is a string
|
return out
|
||||||
# representing the JSON. TODO: Make this consistent between implementations.
|
|
||||||
if cfg.SHELL_IN_USE:
|
|
||||||
assert(type(out) == dict)
|
|
||||||
return out
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
return json.loads(out)
|
|
||||||
except json.decoder.JSONDecodeError as joe:
|
|
||||||
log_error("JSONDecodeError %s, \n JSON=\n%s\n" %
|
|
||||||
(str(joe), out))
|
|
||||||
raise LvmBug("'fullreport' returned invalid JSON")
|
|
||||||
|
|
||||||
raise LvmBug("'fullreport' exited with code '%d'" % rc)
|
raise LvmBug("'fullreport' exited with code '%d'" % rc)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user