diff --git a/pkg/controller/cloud/pvlcontroller.go b/pkg/controller/cloud/pvlcontroller.go index 3ae1fbf6bc9..a567643bfdd 100644 --- a/pkg/controller/cloud/pvlcontroller.go +++ b/pkg/controller/cloud/pvlcontroller.go @@ -182,7 +182,7 @@ func (pvlc *PersistentVolumeLabelController) addLabels(key string) error { func (pvlc *PersistentVolumeLabelController) addLabelsToVolume(vol *v1.PersistentVolume) error { var volumeLabels map[string]string - // Only add labels if in the list of initializers + // Only add labels if the next pending initializer. if needsInitialization(vol.Initializers, initializerName) { if labeler, ok := (pvlc.cloud).(cloudprovider.PVLabeler); ok { labels, err := labeler.GetLabelsForVolume(vol) @@ -265,16 +265,17 @@ func removeInitializer(initializers *metav1.Initializers, name string) *metav1.I return &metav1.Initializers{Pending: updated} } +// needsInitialization checks whether or not the PVL is the next pending initializer. func needsInitialization(initializers *metav1.Initializers, name string) bool { - hasInitializer := false - - if initializers != nil { - for _, pending := range initializers.Pending { - if pending.Name == name { - hasInitializer = true - break - } - } + if initializers == nil { + return false } - return hasInitializer + + if len(initializers.Pending) == 0 { + return false + } + + // There is at least one initializer still pending so check to + // see if the PVL is the next in line. + return initializers.Pending[0].Name == name } diff --git a/pkg/controller/cloud/pvlcontroller_test.go b/pkg/controller/cloud/pvlcontroller_test.go index 48b079122c5..2ab2f11394d 100644 --- a/pkg/controller/cloud/pvlcontroller_test.go +++ b/pkg/controller/cloud/pvlcontroller_test.go @@ -146,11 +146,16 @@ func TestAddLabelsToVolume(t *testing.T) { initializers: &metav1.Initializers{Pending: []metav1.Initializer{{Name: initializerName}}}, shouldLabel: true, }, - "PV with other initializers": { + "PV with other initializers only": { vol: pv, initializers: &metav1.Initializers{Pending: []metav1.Initializer{{Name: "OtherInit"}}}, shouldLabel: false, }, + "PV with other initializers first": { + vol: pv, + initializers: &metav1.Initializers{Pending: []metav1.Initializer{{Name: "OtherInit"}, {Name: initializerName}}}, + shouldLabel: false, + }, } for d, tc := range testCases {