Skip to content

Commit c892d19

Browse files
Fix panic when petset deployed without placementpolicy (#18)
Signed-off-by: souravbiswassanto <[email protected]>
1 parent 28b9650 commit c892d19

File tree

3 files changed

+29
-21
lines changed

3 files changed

+29
-21
lines changed

apis/apps/v1/constants.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ const (
2121
ManifestWorkClusterNameLabel = "open-cluster-management.io/cluster-name"
2222
RolePod = "pod"
2323
RolePVC = "pvc"
24+
DeletionPolicyAnnotation = GroupName + "/deletion-policy"
25+
DeletionPolicyOrphan = "Orphan"
2426
)

pkg/controller/petset/pet_pod_control.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -407,12 +407,14 @@ func (spc *StatefulPodControl) createPersistentVolumeClaims(set *api.PetSet, pod
407407
pvc, err := spc.objectMgr.GetClaim(claim.Namespace, claim.Name, set)
408408
switch {
409409
case apierrors.IsNotFound(err):
410-
placementPolicy, err := spc.objectMgr.GetPlacementPolicy(set.Spec.PodPlacementPolicy.Name)
411-
if err != nil && !apierrors.IsNotFound(err) {
412-
errs = append(errs, err)
410+
if set.Spec.Distributed {
411+
placementPolicy, err := spc.objectMgr.GetPlacementPolicy(set.Spec.PodPlacementPolicy.Name)
412+
if err != nil && !apierrors.IsNotFound(err) {
413+
errs = append(errs, err)
414+
}
415+
ordinal, _ := strconv.Atoi(getOrdinalFromResource(claim.Name))
416+
setOCMPlacementForPVC(set, ordinal, &claim, placementPolicy)
413417
}
414-
ordinal, _ := strconv.Atoi(getOrdinalFromResource(claim.Name))
415-
setOCMPlacementForPVC(set, ordinal, &claim, placementPolicy)
416418

417419
err = spc.objectMgr.CreateClaim(&claim, set)
418420
if err != nil && !apierrors.IsAlreadyExists(err) {

pkg/controller/petset/pet_set.go

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -658,29 +658,33 @@ func (ssc *PetSetController) syncPetSet(ctx context.Context, set *api.PetSet, po
658658
}
659659

660660
func (ssc *PetSetController) handleFinalizerRemove(set *api.PetSet) error {
661-
// TODO: cc@Arnob vai. should Delete all the Manifestworks
661+
anno := set.ObjectMeta.Annotations
662662

663-
sel := set.Spec.Selector.DeepCopy()
664-
// This role is added during manifestwork deletion
665-
sel.MatchLabels[api.ManifestWorkRoleLabel] = api.RolePod
663+
if anno == nil || anno[api.DeletionPolicyAnnotation] != api.DeletionPolicyOrphan {
664+
sel := set.Spec.Selector.DeepCopy()
665+
// This role is added during manifestwork deletion
666+
// For now we are only deleting the pod manifests
667+
// Deleting pvc support not added yet
668+
sel.MatchLabels[api.ManifestWorkRoleLabel] = api.RolePod
666669

667-
selector, err := metav1.LabelSelectorAsSelector(sel)
668-
if err != nil {
669-
return err
670-
}
671-
mws, err := ssc.manifestLister.List(selector)
672-
if err != nil {
673-
return err
674-
}
675-
for _, mw := range mws {
676-
err := ssc.ocmClient.WorkV1().ManifestWorks(mw.Namespace).Delete(context.TODO(), mw.Name, metav1.DeleteOptions{})
677-
if err != nil && !errors.IsNotFound(err) {
670+
selector, err := metav1.LabelSelectorAsSelector(sel)
671+
if err != nil {
678672
return err
679673
}
674+
mws, err := ssc.manifestLister.List(selector)
675+
if err != nil {
676+
return err
677+
}
678+
for _, mw := range mws {
679+
err := ssc.ocmClient.WorkV1().ManifestWorks(mw.Namespace).Delete(context.TODO(), mw.Name, metav1.DeleteOptions{})
680+
if err != nil && !errors.IsNotFound(err) {
681+
return err
682+
}
683+
}
680684
}
681685
setCopy := set.DeepCopy()
682686
setCopy.ObjectMeta = core_util.RemoveFinalizer(setCopy.ObjectMeta, api.GroupName)
683-
_, err = ssc.apiClient.AppsV1().PetSets(set.Namespace).Update(context.TODO(), setCopy, metav1.UpdateOptions{})
687+
_, err := ssc.apiClient.AppsV1().PetSets(set.Namespace).Update(context.TODO(), setCopy, metav1.UpdateOptions{})
684688
return err
685689
}
686690

0 commit comments

Comments
 (0)