From dd0ac1148e273006a416d189a57da50665e6f3df Mon Sep 17 00:00:00 2001 From: Ivan Gonzalez Date: Sat, 4 Jul 2026 17:21:20 -0600 Subject: [PATCH 1/2] make create-kubeconfig merge preserve proxy-url and namespace keys these entries are convenient for DEX --- .../containerengine_cli_extended.py | 12 +++++ .../tests/unit/test_kubeconfig_merge.py | 48 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 services/container_engine/tests/unit/test_kubeconfig_merge.py diff --git a/services/container_engine/src/oci_cli_container_engine/containerengine_cli_extended.py b/services/container_engine/src/oci_cli_container_engine/containerengine_cli_extended.py index 372c3894d..d2b7d9a18 100644 --- a/services/container_engine/src/oci_cli_container_engine/containerengine_cli_extended.py +++ b/services/container_engine/src/oci_cli_container_engine/containerengine_cli_extended.py @@ -731,6 +731,18 @@ def _merge_kubeconfig_yaml(dst_yaml, src_yaml, merge_key): # It is either an update or repeat of an existing record so we need to update the existing record with # new one match = True + # we preserve some fields from the config cause the user might have set them for better dex + # this is a simple approach, if the list grows too big, consider another; + # like whitelisting on our side and only copying those + preserved_fields = { + 'contexts': ('context', ['namespace']), + 'clusters': ('cluster', ['proxy-url']) + }.get(merge_key) + if preserved_fields: + section, fields = preserved_fields + for field in fields: + if field in j[section]: + i[section][field] = j[section][field] dst_yaml[merge_key][idx] = i if not match: # It is a new record so we need to add it to the list diff --git a/services/container_engine/tests/unit/test_kubeconfig_merge.py b/services/container_engine/tests/unit/test_kubeconfig_merge.py new file mode 100644 index 000000000..fc268fa45 --- /dev/null +++ b/services/container_engine/tests/unit/test_kubeconfig_merge.py @@ -0,0 +1,48 @@ +# coding: utf-8 +# Copyright (c) 2026, Oracle and/or its affiliates. All rights reserved. + +import unittest + +from services.container_engine.src.oci_cli_container_engine.containerengine_cli_extended import _merge_kubeconfig_yaml + + +class TestKubeconfigMerge(unittest.TestCase): + def test_preserves_namespace_when_updating_context(self): + destination = { + 'contexts': [{ + 'name': 'cluster', + 'context': {'cluster': 'cluster', 'user': 'user', 'namespace': 'workloads'} + }] + } + source = { + 'contexts': [{ + 'name': 'cluster', + 'context': {'cluster': 'cluster', 'user': 'updated-user'} + }] + } + + _merge_kubeconfig_yaml(destination, source, 'contexts') + + assert destination['contexts'][0]['context'] == { + 'cluster': 'cluster', 'user': 'updated-user', 'namespace': 'workloads' + } + + def test_preserves_proxy_url_when_updating_cluster(self): + destination = { + 'clusters': [{ + 'name': 'cluster', + 'cluster': {'server': 'https://old.example', 'proxy-url': 'http://proxy.example'} + }] + } + source = { + 'clusters': [{ + 'name': 'cluster', + 'cluster': {'server': 'https://new.example'} + }] + } + + _merge_kubeconfig_yaml(destination, source, 'clusters') + + assert destination['clusters'][0]['cluster'] == { + 'server': 'https://new.example', 'proxy-url': 'http://proxy.example' + } From 0d325ab297a2e1cd34a8a4f3a0de321224edcf5c Mon Sep 17 00:00:00 2001 From: Ivan Gonzalez Date: Sat, 4 Jul 2026 17:21:39 -0600 Subject: [PATCH 2/2] gitignore .venv/ --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4692276de..3e08fba16 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ tests/temp .cache/ .project .wercker/ +.venv/