diff options
author | Pavel Moravec <pmoravec@redhat.com> | 2022-01-21 16:27:33 +0100 |
---|---|---|
committer | Jake Hunsaker <jhunsake@redhat.com> | 2022-01-25 11:15:37 -0500 |
commit | 5634f7dd77eff821f37daa953fa86cc783d3b937 (patch) | |
tree | 025a3a28df59e06f939155d9bc6058478f471831 | |
parent | 105075539e0cf7525657aa2004ca6503edf6e6b2 (diff) | |
download | sos-5634f7dd77eff821f37daa953fa86cc783d3b937.tar.gz |
[foreman] Use psql-msgpack-decode wrapper for dynflow >= 1.6
In dynflow >=1.6.3, dynflow* tables in postgres are encoded by
msgpack which makes plain CSV dumps unreadable. In such a case,
psql-msgpack-decode wrapper tool from dynflow-utils (of any
version) must be used instead of the plain psql command.
Resolves: #2830
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
-rw-r--r-- | sos/report/plugins/foreman.py | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/sos/report/plugins/foreman.py b/sos/report/plugins/foreman.py index 314a651d..3fd80e6a 100644 --- a/sos/report/plugins/foreman.py +++ b/sos/report/plugins/foreman.py @@ -244,8 +244,16 @@ class Foreman(Plugin): self.add_cmd_output(_cmd, suggest_filename=table, timeout=600, sizelimit=100, env=self.env) + # dynflow* tables on dynflow >=1.6.3 are encoded and hence in that + # case, psql-msgpack-decode wrapper tool from dynflow-utils (any + # version) must be used instead of plain psql command + dynutils = self.is_installed('dynflow-utils') for dyn in foremancsv: - _cmd = self.build_query_cmd(foremancsv[dyn], csv=True) + binary = "psql" + if dyn != 'foreman_tasks_tasks' and dynutils: + binary = "/usr/libexec/psql-msgpack-decode" + _cmd = self.build_query_cmd(foremancsv[dyn], csv=True, + binary=binary) self.add_cmd_output(_cmd, suggest_filename=dyn, timeout=600, sizelimit=100, env=self.env) @@ -270,7 +278,7 @@ class Foreman(Plugin): # collect http[|s]_proxy env.variables self.add_env_var(["http_proxy", "https_proxy"]) - def build_query_cmd(self, query, csv=False): + def build_query_cmd(self, query, csv=False, binary="psql"): """ Builds the command needed to invoke the pgsql query as the postgres user. @@ -281,8 +289,8 @@ class Foreman(Plugin): if csv: query = "COPY (%s) TO STDOUT " \ "WITH (FORMAT 'csv', DELIMITER ',', HEADER)" % query - _dbcmd = "psql --no-password -h %s -p 5432 -U foreman -d foreman -c %s" - return _dbcmd % (self.dbhost, quote(query)) + _dbcmd = "%s --no-password -h %s -p 5432 -U foreman -d foreman -c %s" + return _dbcmd % (binary, self.dbhost, quote(query)) def postproc(self): self.do_path_regex_sub( |