From 53222a97560614856a3f815bf8d248ab3c483d4c Mon Sep 17 00:00:00 2001 From: garciadeblas Date: Thu, 11 Sep 2025 11:38:02 +0200 Subject: [PATCH] Support of proxy-url in kubeconfig through Kubernetes Python library Change-Id: I8b89d00a85d2869ba738d291e360efbc6772f803 Signed-off-by: garciadeblas --- osm_lcm/n2vc/kubectl.py | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/osm_lcm/n2vc/kubectl.py b/osm_lcm/n2vc/kubectl.py index 2c1a5b06..9ac4a271 100644 --- a/osm_lcm/n2vc/kubectl.py +++ b/osm_lcm/n2vc/kubectl.py @@ -20,6 +20,7 @@ import logging import typing import uuid import json +import yaml import tarfile import io from time import sleep @@ -71,15 +72,44 @@ class Kubectl: self.logger = logging.getLogger("lcm.kubectl") self._config_file = config_file self.logger.info(f"Kubectl cfg file: {config_file}") - # kconfig.load_kube_config(config_file=config_file) - self._api_client = kconfig.new_client_from_config(config_file=config_file) + + # Create default configuration for API client + self._configuration = kclient.Configuration() + + # Get proxy_url + proxy_url = None + if config_file: + with open(config_file, "r", encoding="utf-8") as f: + kubeconfig_yaml = f.read() + try: + kubeconfig_dict = yaml.safe_load(kubeconfig_yaml) + except yaml.YAMLError as e: + raise e + proxy_url = ( + kubeconfig_dict.get("clusters", [])[0] + .get("cluster", {}) + .get("proxy-url") + ) + + # If kubeconfig has proxy configured, use it + if proxy_url: + self._configuration.proxy = proxy_url + self.logger.info(f"Using proxy for kubernetes: {proxy_url}") + + # Create API client + self._api_client = kconfig.new_client_from_config( + config_file=config_file, + client_configuration=self._configuration, + ) + # self._configuration = self._api_client.configuration.get_default_copy() + + # Carga la config base self._clients = { CORE_CLIENT: kclient.CoreV1Api(api_client=self._api_client), RBAC_CLIENT: kclient.RbacAuthorizationV1Api(api_client=self._api_client), STORAGE_CLIENT: kclient.StorageV1Api(api_client=self._api_client), CUSTOM_OBJECT_CLIENT: kclient.CustomObjectsApi(api_client=self._api_client), } - self._configuration = self._api_client.configuration.get_default_copy() self.logger.info(f"Kubectl cfg file: {config_file}") @property -- 2.25.1