fixed deployment update

This commit is contained in:
vy.boyko 2025-10-26 21:38:29 +03:00
parent cc43885279
commit 83ff9af4d6

View File

@ -342,28 +342,41 @@ class K8sClient:
def get_deployment_yaml(self, namespace: str, name: str) -> Optional[str]: def get_deployment_yaml(self, namespace: str, name: str) -> Optional[str]:
"""Get deployment as YAML string.""" """Get deployment as YAML string."""
try: try:
from kubernetes import utils import yaml
deployment = self.apps_v1.read_namespaced_deployment(name, namespace) deployment = self.apps_v1.read_namespaced_deployment(name, namespace)
# Convert to dict and remove managed fields and status # Use ApiClient to properly serialize the object
deployment_dict = deployment.to_dict() api_client = client.ApiClient()
deployment_dict = api_client.sanitize_for_serialization(deployment)
# Remove fields that shouldn't be edited # Remove fields that shouldn't be edited
if 'metadata' in deployment_dict: if 'metadata' in deployment_dict:
deployment_dict['metadata'].pop('managed_fields', None) deployment_dict['metadata'].pop('managedFields', None)
deployment_dict['metadata'].pop('resource_version', None) deployment_dict['metadata'].pop('resourceVersion', None)
deployment_dict['metadata'].pop('uid', None) deployment_dict['metadata'].pop('uid', None)
deployment_dict['metadata'].pop('self_link', None) deployment_dict['metadata'].pop('selfLink', None)
deployment_dict['metadata'].pop('creation_timestamp', None) deployment_dict['metadata'].pop('creationTimestamp', None)
deployment_dict['metadata'].pop('generation', None) deployment_dict['metadata'].pop('generation', None)
# Remove status # Remove status
deployment_dict.pop('status', None) deployment_dict.pop('status', None)
# Convert to YAML # Custom YAML representer to avoid ugly formatting
import yaml def represent_none(self, _):
yaml_str = yaml.dump(deployment_dict, default_flow_style=False, sort_keys=False) 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 return yaml_str
except ApiException as e: except ApiException as e:
console.print(f"[red]Error reading deployment:[/red] {e}") console.print(f"[red]Error reading deployment:[/red] {e}")