- Ready = true avant découverte endpoint (l.110-112) — CAPI pense que l'infra est prête alors que le control plane endpoint est encore vide.
r.Update()appelé à chaque réco pour le finalizer (l.65-69), sans vérifier s'il a vraiment changé.- Pas de re-fetch avant
Status().Update()(l.114-117) — risque de conflitobject has been modified. getOwnerCluster()liste tous les Clusters du namespace (l.150-165) — utiliserOwnerReferencesà la place.- Ne watch pas les Clusters/Machines (l.210-215) — changements sur le Cluster parent ne déclenchent pas de réco.
- ProviderID dans Spec + Status sans re-fetch entre les deux (l.137-148) — conflit potentiel.
- Erreurs de résolution réseau silencieuses (l.59-62) —
continuesans erreur, VM créée avec moins de VIFs que demandé. - Orphelin XO si
c.Update()ouStatus().Update()échoue aprèsCreateVM(l.137-148) — VM existe dans XO mais pas dans K8s.
GetOwnerMachine()liste TOUTES les Machines du namespace (l.183-196) — O(n) à chaque réco, utiliserOwnerReferences.GetVatesClusterpas de nil-check surInfrastructureRef(l.161-166).
ResolveTemplateIDetResolvePoolIDpas de nil-check surV1Client()(l.72, 100) — panic si nil.
Start() + CleanShutdown()en séquence sans attendre (l.247-248) — race condition dans la suppression de VM.
vatesmachine_controller_test.go/vatescluster_controller_test.go— tests scaffold vides avecTODO(user), sans assertions utiles.- Pas de tests unitaires pour
CreateVM,StartVM,WaitForVMReady— fonctions critiques non couvertes. - Chemins d'erreur de
reconcileDeletenon testés — échecs Start/CleanShutdown/Delete.
| Fichier | Problème |
|---|---|
api/v1beta2/vatescluster_types.go:10 |
KubeVIPSpec.Enabled sans omitempty, toujours requis |
api/v1beta2/vatesmachine_types.go:83-87 |
Network.Name casse le pattern NetworkID / NetworkName |
api/v1beta2/vatesmachine_types.go:142 |
Print column Ready en type=string au lieu de type=boolean |
vatescluster_controller.go:225 / status.go:29 |
LastTransitionTime mis à jour à chaque condition write (devrait être seulement quand le status change) |
status.go:33-38 |
ObservedGeneration jamais défini dans les conditions |
vatescluster_controller.go:139 |
Log "Cleaning up" mais rien n'est nettoyé |
vatescluster_controller.go:187-193 |
Erreur de Get silencieuse dans discoverControlPlaneEndpoint |
client.go:17-18 |
GetOrCreateXOClient retourne nil, nil sans condition → machine "pending" sans explication |
vm_ops.go:85-105 |
DiskSize invalide silencieusement ignoré |
resolve.go:119 |
ResolveNetworkID n'a pas de paramètre ctx (incohérent avec les autres) |
vm_ops.go:199,289— variablevmshadowée deux foiscloud_config.go:66-81—ssh_authorized_keyslu deux fois de la mapcloud_config.go:88-90— nil-map guard après les lectures (marche par accident)vm_ops.go:253— adresse de variable de boucle passée àConnectVIFresolve.go:63,91— paramètrectxinutilisé dansResolveTemplateID/ResolvePoolID- Messages de log au présent au lieu du passé (vm_ops.go:40)
PROJECT— manque l'entréeVatesMachineTemplate