From 83ff9af4d69680a654ce09cd5d5213b0773b08c7 Mon Sep 17 00:00:00 2001 From: "vy.boyko" Date: Sun, 26 Oct 2025 21:38:29 +0300 Subject: [PATCH] fixed deployment update --- k8s_tool/k8s_client.py | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/k8s_tool/k8s_client.py b/k8s_tool/k8s_client.py index dd263ad..38efa8e 100644 --- a/k8s_tool/k8s_client.py +++ b/k8s_tool/k8s_client.py @@ -342,28 +342,41 @@ class K8sClient: def get_deployment_yaml(self, namespace: str, name: str) -> Optional[str]: """Get deployment as YAML string.""" try: - from kubernetes import utils + import yaml deployment = self.apps_v1.read_namespaced_deployment(name, namespace) - # Convert to dict and remove managed fields and status - deployment_dict = deployment.to_dict() + # Use ApiClient to properly serialize the object + api_client = client.ApiClient() + deployment_dict = api_client.sanitize_for_serialization(deployment) # Remove fields that shouldn't be edited if 'metadata' in deployment_dict: - deployment_dict['metadata'].pop('managed_fields', None) - deployment_dict['metadata'].pop('resource_version', None) + deployment_dict['metadata'].pop('managedFields', None) + deployment_dict['metadata'].pop('resourceVersion', None) deployment_dict['metadata'].pop('uid', None) - deployment_dict['metadata'].pop('self_link', None) - deployment_dict['metadata'].pop('creation_timestamp', None) + deployment_dict['metadata'].pop('selfLink', None) + deployment_dict['metadata'].pop('creationTimestamp', None) deployment_dict['metadata'].pop('generation', None) # Remove status deployment_dict.pop('status', None) - # Convert to YAML - import yaml - yaml_str = yaml.dump(deployment_dict, default_flow_style=False, sort_keys=False) + # Custom YAML representer to avoid ugly formatting + def represent_none(self, _): + return self.represent_scalar('tag:yaml.org,2002:null', '') + + yaml.add_representer(type(None), represent_none) + + # Convert to YAML with proper indentation + yaml_str = yaml.dump( + deployment_dict, + default_flow_style=False, + sort_keys=False, + indent=2, + allow_unicode=True, + explicit_start=False + ) return yaml_str except ApiException as e: console.print(f"[red]Error reading deployment:[/red] {e}")