-
Notifications
You must be signed in to change notification settings - Fork 159
/
sync_pdb.go
57 lines (48 loc) · 1.61 KB
/
sync_pdb.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package scyllacluster
import (
"context"
"fmt"
scyllav1 "github.com/scylladb/scylla-operator/pkg/api/scylla/v1"
"github.com/scylladb/scylla-operator/pkg/resourceapply"
policyv1beta1 "k8s.io/api/policy/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
utilerrors "k8s.io/apimachinery/pkg/util/errors"
)
func (scc *Controller) syncPodDisruptionBudgets(
ctx context.Context,
sc *scyllav1.ScyllaCluster,
status *scyllav1.ScyllaClusterStatus,
pdbs map[string]*policyv1beta1.PodDisruptionBudget,
) (*scyllav1.ScyllaClusterStatus, error) {
var err error
requiredPDB := MakePodDisruptionBudget(sc)
// Delete any excessive PodDisruptionBudgets.
// Delete has to be the fist action to avoid getting stuck on quota.
var deletionErrors []error
for _, pdb := range pdbs {
if pdb.DeletionTimestamp != nil {
continue
}
if pdb.Name == requiredPDB.Name {
continue
}
propagationPolicy := metav1.DeletePropagationBackground
err = scc.kubeClient.PolicyV1beta1().PodDisruptionBudgets(pdb.Namespace).Delete(ctx, pdb.Name, metav1.DeleteOptions{
Preconditions: &metav1.Preconditions{
UID: &pdb.UID,
},
PropagationPolicy: &propagationPolicy,
})
deletionErrors = append(deletionErrors, err)
}
err = utilerrors.NewAggregate(deletionErrors)
if err != nil {
return status, fmt.Errorf("can't delete pdb(s): %w", err)
}
// TODO: Remove forced ownership in v1.5 (#672)
_, _, err = resourceapply.ApplyPodDisruptionBudget(ctx, scc.kubeClient.PolicyV1beta1(), scc.pdbLister, scc.eventRecorder, requiredPDB, true)
if err != nil {
return status, fmt.Errorf("can't apply pdb: %w", err)
}
return status, nil
}