Fix nil pointer dereference in syncCriticalOpPodDisruptionBudget

When the PDB creation fails with "already exists" error, the pdb
variable is nil since the initial Get failed. Using pdb.ObjectMeta
would cause a panic. Use the cluster method to get the PDB name instead.
This commit is contained in:
Alec Thomas 2026-01-18 01:09:55 -06:00
parent 513291c58d
commit 0f2cb12219
1 changed files with 4 additions and 3 deletions

View File

@ -548,9 +548,10 @@ func (c *Cluster) syncCriticalOpPodDisruptionBudget(isUpdate bool) error {
if !k8sutil.ResourceAlreadyExists(err) {
return fmt.Errorf("could not create pod disruption budget for critical operations: %v", err)
}
c.logger.Infof("pod disruption budget %q already exists", util.NameFromMeta(pdb.ObjectMeta))
if pdb, err = c.KubeClient.PodDisruptionBudgets(c.Namespace).Get(context.TODO(), c.criticalOpPodDisruptionBudgetName(), metav1.GetOptions{}); err != nil {
return fmt.Errorf("could not fetch existing %q pod disruption budget", util.NameFromMeta(pdb.ObjectMeta))
pdbName := c.criticalOpPodDisruptionBudgetName()
c.logger.Infof("pod disruption budget %q already exists", pdbName)
if pdb, err = c.KubeClient.PodDisruptionBudgets(c.Namespace).Get(context.TODO(), pdbName, metav1.GetOptions{}); err != nil {
return fmt.Errorf("could not fetch existing %q pod disruption budget", pdbName)
}
}