From 378e90e77ef8f01c3c2ae1e1e62dac3c91dfd9b7 Mon Sep 17 00:00:00 2001 From: Jen Patague Date: Fri, 24 Jan 2025 17:38:44 -0800 Subject: [PATCH] TRON-2333: Fix pod names ending in .--xxxx --- task_processing/plugins/kubernetes/utils.py | 4 +++- .../plugins/kubernetes/kubernetes_utils_test.py | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/task_processing/plugins/kubernetes/utils.py b/task_processing/plugins/kubernetes/utils.py index 28618f9..435baa1 100644 --- a/task_processing/plugins/kubernetes/utils.py +++ b/task_processing/plugins/kubernetes/utils.py @@ -153,8 +153,10 @@ def get_sanitised_kubernetes_name( # the part of the name that does fit in the limit in order to replace them with # -- (2 characters) and then a 4 character hash (which should help ensure uniqueness # after truncation). + truncated_name = name[0 : length_limit - 6] name = ( - name[0 : length_limit - 6] + # Avoid splitting the suffix into a subdomain as it would not meet RFC1123 requirements + truncated_name.rstrip(".") + "--" + hashlib.md5(name.encode("ascii")).hexdigest()[:4] ) diff --git a/tests/unit/plugins/kubernetes/kubernetes_utils_test.py b/tests/unit/plugins/kubernetes/kubernetes_utils_test.py index 3ae0cfe..7a573d8 100644 --- a/tests/unit/plugins/kubernetes/kubernetes_utils_test.py +++ b/tests/unit/plugins/kubernetes/kubernetes_utils_test.py @@ -62,28 +62,39 @@ def test_get_capabilities_for_capability_changes(cap_add, cap_drop, expected): @pytest.mark.parametrize( - "name,expected_name", + "name,expected_name,length_limit", ( ( "hello_world", "hello--world", + 0, ), ( "hello_world", "hello--world", + 0, ), ( "--hello_world", "underscore-hello--world", + 0, ), ( "TeSt", "test", + 0, + ), + ( + "hello--world.123.run", + "hello--world--cf28", + 19, ), ), ) -def test_get_sanitised_kubernetes_name(name, expected_name): - assert get_sanitised_kubernetes_name(name) == expected_name +def test_get_sanitised_kubernetes_name(name, expected_name, length_limit): + assert ( + get_sanitised_kubernetes_name(name, length_limit=length_limit) == expected_name + ) @pytest.mark.parametrize(