Files
openshift-resource-governance/app/models/resource_models.py
andersonid 4d60c0e039 Initial commit: OpenShift Resource Governance Tool
- Implementa ferramenta completa de governança de recursos
- Backend Python com FastAPI para coleta de dados
- Validações seguindo best practices Red Hat
- Integração com Prometheus e VPA
- UI web interativa para visualização
- Relatórios em JSON, CSV e PDF
- Deploy como DaemonSet com RBAC
- Scripts de automação para build e deploy
2025-09-25 14:26:24 -03:00

83 lines
2.2 KiB
Python

"""
Modelos de dados para recursos Kubernetes
"""
from typing import List, Dict, Any, Optional
from pydantic import BaseModel
class ContainerResource(BaseModel):
"""Recursos de um container"""
name: str
image: str
resources: Dict[str, Dict[str, str]]
class PodResource(BaseModel):
"""Recursos de um pod"""
name: str
namespace: str
node_name: Optional[str] = None
phase: str
containers: List[ContainerResource]
class NamespaceResources(BaseModel):
"""Recursos de um namespace"""
name: str
pods: List[PodResource]
total_cpu_requests: str = "0"
total_cpu_limits: str = "0"
total_memory_requests: str = "0"
total_memory_limits: str = "0"
class VPARecommendation(BaseModel):
"""Recomendação do VPA"""
name: str
namespace: str
target_ref: Dict[str, str]
recommendations: Dict[str, Any]
class ResourceValidation(BaseModel):
"""Resultado de validação de recursos"""
pod_name: str
namespace: str
container_name: str
validation_type: str # "missing_requests", "missing_limits", "invalid_ratio", "overcommit"
severity: str # "warning", "error", "critical"
message: str
recommendation: Optional[str] = None
class ClusterReport(BaseModel):
"""Relatório do cluster"""
timestamp: str
total_pods: int
total_namespaces: int
total_nodes: int
validations: List[ResourceValidation]
vpa_recommendations: List[VPARecommendation]
overcommit_info: Dict[str, Any]
summary: Dict[str, Any]
class NamespaceReport(BaseModel):
"""Relatório de um namespace"""
namespace: str
timestamp: str
total_pods: int
validations: List[ResourceValidation]
resource_usage: Dict[str, Any]
recommendations: List[str]
class ExportRequest(BaseModel):
"""Request para exportar relatório"""
format: str # "json", "csv", "pdf"
namespaces: Optional[List[str]] = None
include_vpa: bool = True
include_validations: bool = True
class ApplyRecommendationRequest(BaseModel):
"""Request para aplicar recomendação"""
pod_name: str
namespace: str
container_name: str
resource_type: str # "cpu", "memory"
action: str # "requests", "limits"
value: str
dry_run: bool = True