From adc4436c4006afea9b3cfd505775f9ce635adf17 Mon Sep 17 00:00:00 2001 From: Myroslav Rozum Date: Wed, 23 Sep 2020 11:20:42 -0400 Subject: [PATCH] use container name in dictionary instead of pod's to return logs Signed-off-by: Myroslav Rozum [95] add CHANGELOG entry --- CHANGELOG.md | 6 ++++++ chaosk8s/pod/probes.py | 45 +++++++++++++++++++++++++++--------------- tests/test_probes.py | 8 ++++---- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a92d6b9..98901ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ [Unreleased]: https://github.com/chaostoolkit/chaostoolkit-kubernetes/compare/0.23.0...HEAD +### Changed + +- use container name in read_pod_logsinstead of pod's name to return logs [#95][95] + +[95]: https://github.com/chaostoolkit/chaostoolkit-kubernetes/issues/95 + ## [0.23.0][] - 2020-09-26 [0.23.0]: https://github.com/chaostoolkit/chaostoolkit-kubernetes/compare/0.22.0...0.23.0 diff --git a/chaosk8s/pod/probes.py b/chaosk8s/pod/probes.py index f984189..7eda2e3 100644 --- a/chaosk8s/pod/probes.py +++ b/chaosk8s/pod/probes.py @@ -59,24 +59,37 @@ def read_pod_logs(name: str = None, last: Union[str, None] = None, now = datetime.now() since = int((now - dateparser.parse(last)).total_seconds()) - params = dict( - namespace=ns, - follow=False, - previous=from_previous, - timestamps=True, - container=container_name or "", # None is not a valid value - _preload_content=False - ) - - if since: - params["since_seconds"] = since - logs = {} + for p in ret.items: - name = p.metadata.name - logger.debug("Fetching logs for pod '{n}'".format(n=name)) - r = v1.read_namespaced_pod_log(name, **params) - logs[name] = r.read().decode('utf-8') + # Retreive either logs for specific container + # or for all containers at once if not ptovided. + container_names = [] + if container_name: + container_names.append(container_name) + else: + container_names = [c.name + for i, c + in enumerate(p.status.container_statuses)] + + for cname in container_names: + params = dict( + namespace=ns, + follow=False, + previous=from_previous, + timestamps=True, + container=cname, + _preload_content=False + ) + if since: + params["since_seconds"] = since + + name = p.metadata.name + logger.debug("Fetching logs for pod '{n}' container {c}" + .format(n=name, c=cname)) + + r = v1.read_namespaced_pod_log(name, **params) + logs[cname] = r.read().decode('utf-8') return logs diff --git a/tests/test_probes.py b/tests/test_probes.py index a208980..587ec25 100644 --- a/tests/test_probes.py +++ b/tests/test_probes.py @@ -323,11 +323,11 @@ def test_fetch_last_logs(cl, client, has_conf): v1.read_namespaced_pod_log.return_value = io.BytesIO(b"hello") - logs = read_microservices_logs("myapp") - - assert pod.metadata.name in logs - assert logs[pod.metadata.name] == "hello" + container_name = "mycontainer" + logs = read_microservices_logs(name="myapp", container_name=container_name) + assert container_name in logs + assert logs[container_name] == "hello" @patch('chaosk8s.has_local_config_file', autospec=True) @patch('chaosk8s.service.probes.client', autospec=True)