the pvc also need to be relabeled
This commit is contained in:
parent
e7ed314ffb
commit
b992029528
|
|
@ -250,6 +250,40 @@ func (c *Cluster) relabelPodsForSelector(oldSelector, newSelector map[string]str
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Cluster) relabelPVCsForSelector(oldSelector, newSelector map[string]string) error {
|
||||||
|
listOptions := metav1.ListOptions{
|
||||||
|
LabelSelector: labels.Set(oldSelector).String(),
|
||||||
|
}
|
||||||
|
pvcList, err := c.KubeClient.PersistentVolumeClaims(c.Namespace).List(context.TODO(), listOptions)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not list PVCs for relabeling: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, pvc := range pvcList.Items {
|
||||||
|
needsPatch := false
|
||||||
|
for k, v := range newSelector {
|
||||||
|
if pvc.Labels[k] != v {
|
||||||
|
needsPatch = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !needsPatch {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
patchData, err := metaLabelsPatch(newSelector)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not form label patch for PVC %q: %v", pvc.Name, err)
|
||||||
|
}
|
||||||
|
if _, err := c.KubeClient.PersistentVolumeClaims(pvc.Namespace).Patch(context.TODO(), pvc.Name, types.MergePatchType, patchData, metav1.PatchOptions{}); err != nil {
|
||||||
|
return fmt.Errorf("could not relabel PVC %q: %v", pvc.Name, err)
|
||||||
|
}
|
||||||
|
c.logger.Infof("relabeled PVC %q with new selector labels", pvc.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Cluster) replaceStatefulSet(newStatefulSet *appsv1.StatefulSet) error {
|
func (c *Cluster) replaceStatefulSet(newStatefulSet *appsv1.StatefulSet) error {
|
||||||
c.setProcessName("replacing statefulset")
|
c.setProcessName("replacing statefulset")
|
||||||
if c.Statefulset == nil {
|
if c.Statefulset == nil {
|
||||||
|
|
@ -265,6 +299,9 @@ func (c *Cluster) replaceStatefulSet(newStatefulSet *appsv1.StatefulSet) error {
|
||||||
if err := c.relabelPodsForSelector(c.Statefulset.Spec.Selector.MatchLabels, newStatefulSet.Spec.Selector.MatchLabels); err != nil {
|
if err := c.relabelPodsForSelector(c.Statefulset.Spec.Selector.MatchLabels, newStatefulSet.Spec.Selector.MatchLabels); err != nil {
|
||||||
return fmt.Errorf("could not relabel pods before statefulset replacement: %v", err)
|
return fmt.Errorf("could not relabel pods before statefulset replacement: %v", err)
|
||||||
}
|
}
|
||||||
|
if err := c.relabelPVCsForSelector(c.Statefulset.Spec.Selector.MatchLabels, newStatefulSet.Spec.Selector.MatchLabels); err != nil {
|
||||||
|
return fmt.Errorf("could not relabel PVCs before statefulset replacement: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete the current statefulset without deleting the pods
|
// Delete the current statefulset without deleting the pods
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue