From 7d06ffecbac05ef932375dc2b211b91e8bc4f07c Mon Sep 17 00:00:00 2001 From: Tom Rutherford Date: Tue, 18 Mar 2025 09:22:33 -0700 Subject: [PATCH 1/2] Add failing example test --- .../tests/unit/cncf/kubernetes/utils/test_pod_manager.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_pod_manager.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_pod_manager.py index 0ba6f0e1bcf0a..29b5184285780 100644 --- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_pod_manager.py +++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_pod_manager.py @@ -38,6 +38,7 @@ container_is_running, container_is_succeeded, container_is_terminated, + get_container_status, ) from airflow.utils.timezone import utc @@ -888,6 +889,12 @@ def container(name, succeeded): pod_mock_list.append(pytest.param(p, False, id="None remote_pod.status")) p = RemotePodMock() p.status = RemotePodMock() + p.status.container_statuses = None + p.status.init_container_statuses = [] + + pod_mock_list.append(pytest.param(p, False, id="None remote_pod.status.container_statuses")) + p = RemotePodMock() + p.status = RemotePodMock() p.status.container_statuses = [] p.status.init_container_statuses = [] pod_mock_list.append(pytest.param(p, False, id="empty remote_pod.status.container_statuses")) From b9773b1f1bd0eae8c2e7aa60802e78d1f637eeac Mon Sep 17 00:00:00 2001 From: Tom Rutherford Date: Tue, 18 Mar 2025 14:56:16 -0700 Subject: [PATCH 2/2] Handle cases where container_statuses is None --- .../providers/cncf/kubernetes/utils/pod_manager.py | 10 ++++++---- .../unit/cncf/kubernetes/utils/test_pod_manager.py | 1 - 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py index 632f5faa57ffa..0d6f353310b4b 100644 --- a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py +++ b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/utils/pod_manager.py @@ -19,7 +19,6 @@ from __future__ import annotations import enum -import itertools import json import math import time @@ -119,9 +118,12 @@ def get_xcom_sidecar_container_resources(self) -> str | None: def get_container_status(pod: V1Pod, container_name: str) -> V1ContainerStatus | None: """Retrieve container status.""" if pod and pod.status: - container_statuses = itertools.chain( - pod.status.container_statuses, pod.status.init_container_statuses - ) + container_statuses = [] + if pod.status.container_statuses: + container_statuses.extend(pod.status.container_statuses) + if pod.status.init_container_statuses: + container_statuses.extend(pod.status.init_container_statuses) + else: container_statuses = None diff --git a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_pod_manager.py b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_pod_manager.py index 29b5184285780..320470cf48a8f 100644 --- a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_pod_manager.py +++ b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/utils/test_pod_manager.py @@ -38,7 +38,6 @@ container_is_running, container_is_succeeded, container_is_terminated, - get_container_status, ) from airflow.utils.timezone import utc