From 759820d34c88c7dfa30bbc06bd47ffb076b9600d Mon Sep 17 00:00:00 2001 From: Sagi Shnaidman Date: Wed, 20 May 2020 13:35:29 +0300 Subject: [PATCH] Add log level config to podman_container module Add option to configure log-level for podman. Print stderr, stdout and rc in case of "debug" option. Fail container module if there is stderr not empty (excluding logs) Change-Id: Id3854e70608fae9721978263d503bbeaf20d64e8 (cherry picked from commit 61f28d58bd96f82b9bb82a06b3e5deb8c85adaf0) --- .../modules/podman_container.py | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/tripleo_ansible/ansible_plugins/modules/podman_container.py b/tripleo_ansible/ansible_plugins/modules/podman_container.py index f137ccf1c..bfa3e984f 100644 --- a/tripleo_ansible/ansible_plugins/modules/podman_container.py +++ b/tripleo_ansible/ansible_plugins/modules/podman_container.py @@ -416,6 +416,18 @@ options: - k8s-file - journald - json-file + log_level: + description: + - Logging level for Podman. Log messages above specified level + ("debug"|"info"|"warn"|"error"|"fatal"|"panic") (default "error") + type: str + choices: + - debug + - info + - warn + - error + - fatal + - panic log_opt: description: - Logging driver specific options. Used to set the path to the container @@ -1115,6 +1127,9 @@ class PodmanModuleParams: def addparam_log_opt(self, c): return c + ['--log-opt', self.params['log_opt']] + def addparam_log_level(self, c): + return c + ['--log-level', self.params['log_level']] + def addparam_memory(self, c): return c + ['--memory', self.params['memory']] @@ -1282,6 +1297,7 @@ class PodmanDefaults: "ipc": "", "kernelmemory": "0", "log_driver": "k8s-file", + "log_level": "error", "memory": "0", "memory_swap": "0", "memory_reservation": "0", @@ -1561,6 +1577,15 @@ class PodmanContainerDiff: after = self.params['log_driver'] return self._diff_update_and_compare('log_driver', before, after) + def diffparam_log_level(self): + excom = self.info['exitcommand'] + if '--log-level' in excom: + before = excom[excom.index('--log-level') + 1] + else: + before = self.params['log_level'] + after = self.params['log_level'] + return self._diff_update_and_compare('log_level', before, after) + # Parameter has limited idempotency, unable to guess the default log_path def diffparam_log_opt(self): before = self.info['logpath'] @@ -1807,6 +1832,13 @@ class PodmanContainer: action {str} -- action to perform - start, create, stop, run, delete """ + + def clean_stderr(err): + # Inspect STDERR for logs to avoid modules failures in case of + # increased log level verbosity + return "\n".join( + [line for line in err.splitlines() if 'level=' not in line]).strip() + b_command = PodmanModuleParams(action, self.module.params, self.version, @@ -1814,17 +1846,23 @@ class PodmanContainer: ).construct_command_from_params() full_cmd = " ".join([self.module.params['executable']] + [to_native(i) for i in b_command]) - self.module.log("PODMAN-CONTAINER-DEBUG: %s" % full_cmd) self.actions.append(full_cmd) - if not self.module.check_mode: + if self.module.check_mode: + self.module.log("PODMAN-CONTAINER-DEBUG (check_mode): %s" % full_cmd) + else: rc, out, err = self.module.run_command( [self.module.params['executable'], b'container'] + b_command, expand_user_and_vars=False) + self.module.log("PODMAN-CONTAINER-DEBUG: %s" % full_cmd) + if self.module.params['debug']: + self.module.log("PODMAN-CONTAINER-DEBUG STDOUT: %s" % out) + self.module.log("PODMAN-CONTAINER-DEBUG STDERR: %s" % err) + self.module.log("PODMAN-CONTAINER-DEBUG RC: %s" % rc) self.stdout = out self.stderr = err - if rc != 0: + if rc != 0 or clean_stderr(err) != '': self.module.fail_json( - msg="Can't %s container %s" % (action, self.name), + msg="Failed %s container %s" % (action, self.name), stdout=out, stderr=err) def run(self):