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
This commit is contained in:
82
app/models/resource_models.py
Normal file
82
app/models/resource_models.py
Normal file
@@ -0,0 +1,82 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user