From 61f28d58bd96f82b9bb82a06b3e5deb8c85adaf0 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 --- .../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 9b08bd5ed..322a3855f 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", @@ -1573,6 +1589,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'] @@ -1819,6 +1844,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, @@ -1826,17 +1858,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):