Skip to content

Commit c841259

Browse files
authored
Merge pull request #387 from rollandf/unavailable
Requeue if pod not available in AutoUpgrade
2 parents bc03f8f + d4f2a8a commit c841259

File tree

1 file changed

+33
-14
lines changed

1 file changed

+33
-14
lines changed

controllers/upgrade_controller.go

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package controllers
1818

1919
import (
2020
"context"
21+
"fmt"
2122
"time"
2223

2324
corev1 "k8s.io/api/core/v1"
@@ -162,22 +163,19 @@ func (r *UpgradeReconciler) BuildState(ctx context.Context) (*upgrade.ClusterUpg
162163
return nil, err
163164
}
164165

165-
for i := range podList.Items {
166-
pod := &podList.Items[i]
167-
if pod.OwnerReferences == nil || len(pod.OwnerReferences) < 1 {
168-
r.Log.V(consts.LogLevelWarning).Info("OFED Driver Pod has no owner DaemonSet", "pod", pod)
169-
continue
170-
}
171-
r.Log.V(consts.LogLevelDebug).Info("Pod", "pod", pod.Name, "owner", pod.OwnerReferences[0].Name)
172-
173-
ownerDaemonSet, ok := daemonSets[pod.OwnerReferences[0].UID]
174-
175-
if !ok {
176-
r.Log.V(consts.LogLevelWarning).Info("OFED Driver Pod is not owned by an OFED Driver DaemonSet",
177-
"pod", pod, "actual owner", pod.OwnerReferences[0])
178-
continue
166+
filteredPodList := []corev1.Pod{}
167+
for _, ds := range daemonSets {
168+
dsPods := r.getPodsOwnedbyDs(ds, podList.Items)
169+
if int(ds.Status.DesiredNumberScheduled) < len(dsPods) {
170+
r.Log.V(consts.LogLevelInfo).Info("Driver daemon set has Unscheduled pods", "name", ds.Name)
171+
return nil, fmt.Errorf("DS should not have Unscheduled pods")
179172
}
173+
filteredPodList = append(filteredPodList, dsPods...)
174+
}
180175

176+
for i := range filteredPodList {
177+
pod := &filteredPodList[i]
178+
ownerDaemonSet := daemonSets[pod.OwnerReferences[0].UID]
181179
nodeState, err := r.buildNodeUpgradeState(ctx, pod, ownerDaemonSet)
182180
if err != nil {
183181
r.Log.V(consts.LogLevelError).Error(err, "Failed to build node upgrade state for pod", "pod", pod)
@@ -229,6 +227,27 @@ func (r *UpgradeReconciler) getDriverDaemonSets(ctx context.Context) (map[types.
229227
return daemonSetMap, nil
230228
}
231229

230+
// getPodsOwnedbyDs gets a list of pods return a list of the pods owned by the specified DaemonSet
231+
func (r *UpgradeReconciler) getPodsOwnedbyDs(ds *appsv1.DaemonSet, pods []corev1.Pod) []corev1.Pod {
232+
dsPodList := []corev1.Pod{}
233+
for i := range pods {
234+
pod := &pods[i]
235+
if pod.OwnerReferences == nil || len(pod.OwnerReferences) < 1 {
236+
r.Log.V(consts.LogLevelWarning).Info("OFED Driver Pod has no owner DaemonSet", "pod", pod)
237+
continue
238+
}
239+
r.Log.V(consts.LogLevelDebug).Info("Pod", "pod", pod.Name, "owner", pod.OwnerReferences[0].Name)
240+
241+
if ds.UID == pod.OwnerReferences[0].UID {
242+
dsPodList = append(dsPodList, *pod)
243+
} else {
244+
r.Log.V(consts.LogLevelWarning).Info("OFED Driver Pod is not owned by an OFED Driver DaemonSet",
245+
"pod", pod, "actual owner", pod.OwnerReferences[0])
246+
}
247+
}
248+
return dsPodList
249+
}
250+
232251
// SetupWithManager sets up the controller with the Manager.
233252
//nolint:dupl
234253
func (r *UpgradeReconciler) SetupWithManager(mgr ctrl.Manager) error {

0 commit comments

Comments
 (0)