chore: build
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
package demos
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"strconv"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// Projets vitrine (voir internal/projects) : même infrastructure que les
|
||||
@@ -121,6 +125,70 @@ func (h *HelmProvisioner) TeardownProject(namespace string) error {
|
||||
return h.Teardown(Demo{Namespace: namespace})
|
||||
}
|
||||
|
||||
// Valeur du label app.kubernetes.io/name des pods de chaque composant d'un
|
||||
// projet vitrine (voir deploy/chart-vitrine/*/templates). Les pods des Jobs de
|
||||
// migration et de création du compte admin portent d'autres noms
|
||||
// (vitrine-backend-migrate / vitrine-backend-seed) : ils ne sont donc jamais
|
||||
// pris pour le backend.
|
||||
const (
|
||||
vitrineLabelBackend = "vitrine-backend"
|
||||
vitrineLabelFrontend = "vitrine-frontend"
|
||||
vitrineLabelPostgreSQL = "postgresql"
|
||||
vitrineLabelRedis = "redis"
|
||||
)
|
||||
|
||||
// ProjectState : phase + usage CPU/mémoire live de chaque composant d'un projet
|
||||
// vitrine, dans le même format que GetResourceState pour les démos (le panneau
|
||||
// du back-office est commun). L'usage (metrics-server) est best-effort. Les
|
||||
// limites viennent du pod lui-même : elles suivent les values des charts sans
|
||||
// table à maintenir ici.
|
||||
func (h *HelmProvisioner) ProjectState(ctx context.Context, namespace string) (ResourceState, error) {
|
||||
pods, err := h.k8sClient.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{})
|
||||
if err != nil {
|
||||
return ResourceState{}, err
|
||||
}
|
||||
return buildProjectState(pods.Items, h.podUsage(ctx, namespace)), nil
|
||||
}
|
||||
|
||||
// buildProjectState range les pods d'un projet par composant (voir
|
||||
// ProjectState). usage : nom de pod -> [cpuMilli, memMi].
|
||||
func buildProjectState(pods []corev1.Pod, usage map[string][2]int64) ResourceState {
|
||||
var state ResourceState
|
||||
for i := range pods {
|
||||
pod := &pods[i]
|
||||
var target *ComponentState
|
||||
switch pod.Labels["app.kubernetes.io/name"] {
|
||||
case vitrineLabelBackend:
|
||||
target = &state.API
|
||||
case vitrineLabelFrontend:
|
||||
target = &state.Web
|
||||
case vitrineLabelPostgreSQL:
|
||||
target = &state.DB
|
||||
case vitrineLabelRedis:
|
||||
target = &state.DBM
|
||||
default:
|
||||
continue
|
||||
}
|
||||
|
||||
cs := ComponentState{Phase: string(pod.Status.Phase)}
|
||||
for _, c := range pod.Spec.Containers {
|
||||
cs.CPULimitMilli += c.Resources.Limits.Cpu().MilliValue()
|
||||
cs.MemoryLimitMi += c.Resources.Limits.Memory().Value() / (1024 * 1024)
|
||||
}
|
||||
if u, ok := usage[pod.Name]; ok {
|
||||
cs.CPUMilli, cs.MemoryMi = u[0], u[1]
|
||||
}
|
||||
|
||||
// Pendant un rolling update deux pods coexistent : celui qui tourne
|
||||
// prime sur l'ancien en cours d'arrêt.
|
||||
if target.Phase == string(corev1.PodRunning) && cs.Phase != string(corev1.PodRunning) {
|
||||
continue
|
||||
}
|
||||
*target = cs
|
||||
}
|
||||
return state
|
||||
}
|
||||
|
||||
func (h *HelmProvisioner) buildVitrinePostgresValues(password string) map[string]interface{} {
|
||||
// Nom de base et utilisateur : défauts du chart (vitrine_db / postgres),
|
||||
// alignés sur database.name / database.user du chart backend.
|
||||
|
||||
Reference in New Issue
Block a user