From fe6480594e6589f887499ce31978935d1ddac2e9 Mon Sep 17 00:00:00 2001 From: Fabian von Feilitzsch Date: Tue, 31 Mar 2020 14:52:52 -0400 Subject: [PATCH 1/5] k8s_log no longer attempts to parse log as JSON Fixes #68 Rather than relying on the default serialization logic (which attempts to parse a log as JSON and then load it into a wrapper class), we now simply return the raw log data as expected. The previous behavior worked in many cases because the log was serialized into a JSON string, but in the case of #68 the log was loaded as a JSON float, which made the error handling fail to fallback to returning the raw data. --- plugins/modules/k8s_log.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/plugins/modules/k8s_log.py b/plugins/modules/k8s_log.py index 6a0b55ff..fa31f8bc 100644 --- a/plugins/modules/k8s_log.py +++ b/plugins/modules/k8s_log.py @@ -6,6 +6,8 @@ from __future__ import absolute_import, division, print_function +from ansible.module_utils.six import PY2 + __metaclass__ = type @@ -182,11 +184,12 @@ class KubernetesLogModule(KubernetesAnsibleModule): if self.params.get('container'): kwargs['query_params'] = dict(container=self.params['container']) - log = resource.log.get( + log = serialize_log(resource.log.get( name=name, namespace=self.params.get('namespace'), + serialize=False, **kwargs - ) + )) self.exit_json(changed=False, log=log, log_lines=log.split('\n')) @@ -228,6 +231,12 @@ class KubernetesLogModule(KubernetesAnsibleModule): return selectors +def serialize_log(response): + if PY2: + return response.data + return response.data.decode('utf8') + + def main(): KubernetesLogModule().execute_module() From c1df59cb3a8d0f7fbadacfc133e3f33b03387220 Mon Sep 17 00:00:00 2001 From: Fabian von Feilitzsch Date: Tue, 31 Mar 2020 15:02:31 -0400 Subject: [PATCH 2/5] Add test --- molecule/default/tasks/log.yml | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/molecule/default/tasks/log.yml b/molecule/default/tasks/log.yml index 33ee0bfb..1811a1d4 100644 --- a/molecule/default/tasks/log.yml +++ b/molecule/default/tasks/log.yml @@ -79,6 +79,43 @@ - "'hello world' in pod_log.log" - item == 'hello world' or item == '' with_items: '{{ pod_log.log_lines }}' + + - name: Create a job that calculates pi + k8s: + state: present + wait: yes + wait_timeout: 120 + wait_condition: + type: Complete + status: 'True' + definition: + apiVersion: batch/v1 + kind: Job + metadata: + name: pi + namespace: k8s-log + spec: + template: + spec: + containers: + - name: pi + image: perl + command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(20)"] + restartPolicy: Never + backoffLimit: 4 + + - name: retrieve logs from the job + k8s_log: + api_version: batch/v1 + kind: Job + namespace: k8s-log + name: pi + register: job_logs + + - name: verify the log was successfully retrieved + assert: + that: job_logs.log_lines[0] == "3.1415926535897932385" + always: - name: ensure that namespace is removed k8s: From 0f87f2b8268235d2ee423b03b3525c53f11b4f76 Mon Sep 17 00:00:00 2001 From: Fabian von Feilitzsch Date: Tue, 31 Mar 2020 15:14:02 -0400 Subject: [PATCH 3/5] Fix linting errors --- molecule/default/tasks/log.yml | 6 +++--- plugins/modules/k8s_log.py | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/molecule/default/tasks/log.yml b/molecule/default/tasks/log.yml index 1811a1d4..b0483e7d 100644 --- a/molecule/default/tasks/log.yml +++ b/molecule/default/tasks/log.yml @@ -98,9 +98,9 @@ template: spec: containers: - - name: pi - image: perl - command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(20)"] + - name: pi + image: perl + command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(20)"] restartPolicy: Never backoffLimit: 4 diff --git a/plugins/modules/k8s_log.py b/plugins/modules/k8s_log.py index fa31f8bc..02f08640 100644 --- a/plugins/modules/k8s_log.py +++ b/plugins/modules/k8s_log.py @@ -6,8 +6,6 @@ from __future__ import absolute_import, division, print_function -from ansible.module_utils.six import PY2 - __metaclass__ = type @@ -129,6 +127,9 @@ log_lines: import copy + +from ansible.module_utils.six import PY2 + from ansible_collections.community.kubernetes.plugins.module_utils.common import KubernetesAnsibleModule from ansible_collections.community.kubernetes.plugins.module_utils.common import AUTH_ARG_SPEC From 41407a93621ed59b614e54fb0d74578484cfe843 Mon Sep 17 00:00:00 2001 From: Fabian von Feilitzsch Date: Tue, 31 Mar 2020 16:10:09 -0400 Subject: [PATCH 4/5] Make a simpler test --- molecule/default/tasks/log.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/molecule/default/tasks/log.yml b/molecule/default/tasks/log.yml index b0483e7d..feeb3950 100644 --- a/molecule/default/tasks/log.yml +++ b/molecule/default/tasks/log.yml @@ -92,15 +92,15 @@ apiVersion: batch/v1 kind: Job metadata: - name: pi + name: int-log namespace: k8s-log spec: template: spec: containers: - - name: pi - image: perl - command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(20)"] + - name: busybox + image: busybox + command: ["echo", "7"] restartPolicy: Never backoffLimit: 4 @@ -109,12 +109,12 @@ api_version: batch/v1 kind: Job namespace: k8s-log - name: pi + name: int-log register: job_logs - name: verify the log was successfully retrieved assert: - that: job_logs.log_lines[0] == "3.1415926535897932385" + that: job_logs.log_lines[0] == "7" always: - name: ensure that namespace is removed From 2191825cbd67684ab524641b63d90e00f9b7dd85 Mon Sep 17 00:00:00 2001 From: Fabian von Feilitzsch Date: Wed, 1 Apr 2020 16:39:20 -0400 Subject: [PATCH 5/5] Fix job creation task name --- molecule/default/tasks/log.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/molecule/default/tasks/log.yml b/molecule/default/tasks/log.yml index feeb3950..d3da05d3 100644 --- a/molecule/default/tasks/log.yml +++ b/molecule/default/tasks/log.yml @@ -80,7 +80,7 @@ - item == 'hello world' or item == '' with_items: '{{ pod_log.log_lines }}' - - name: Create a job that calculates pi + - name: Create a job that calculates 7 k8s: state: present wait: yes