/
pdb.go
62 lines (54 loc) 路 1.84 KB
/
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
58
59
60
61
62
package dag
import (
"context"
"errors"
"github.com/derailed/popeye/internal/client"
"github.com/derailed/popeye/internal/dao"
polv1 "k8s.io/api/policy/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
)
// ListPodDisruptionBudgets list all included PodDisruptionBudgets.
func ListPodDisruptionBudgets(ctx context.Context) (map[string]*polv1.PodDisruptionBudget, error) {
return listAllPodDisruptionBudgets(ctx)
}
// ListAllPodDisruptionBudgets fetch all PodDisruptionBudgets on the cluster.
func listAllPodDisruptionBudgets(ctx context.Context) (map[string]*polv1.PodDisruptionBudget, error) {
ll, err := fetchPodDisruptionBudgets(ctx)
if err != nil {
return nil, err
}
pdbs := make(map[string]*polv1.PodDisruptionBudget, len(ll.Items))
for i := range ll.Items {
pdbs[metaFQN(ll.Items[i].ObjectMeta)] = &ll.Items[i]
}
return pdbs, nil
}
// fetchPodDisruptionBudgets retrieves all PodDisruptionBudgets on the cluster.
func fetchPodDisruptionBudgets(ctx context.Context) (*polv1.PodDisruptionBudgetList, error) {
f, cfg := mustExtractFactory(ctx), mustExtractConfig(ctx)
if cfg.Flags.StandAlone {
dial, err := f.Client().Dial()
if err != nil {
return nil, err
}
return dial.PolicyV1().PodDisruptionBudgets(f.Client().ActiveNamespace()).List(ctx, metav1.ListOptions{})
}
var res dao.Resource
res.Init(f, client.NewGVR("policy/v1beta1/poddisruptionbudgets"))
oo, err := res.List(ctx)
if err != nil {
return nil, err
}
var ll polv1.PodDisruptionBudgetList
for _, o := range oo {
var pdb polv1.PodDisruptionBudget
err = runtime.DefaultUnstructuredConverter.FromUnstructured(o.(*unstructured.Unstructured).Object, &pdb)
if err != nil {
return nil, errors.New("expecting pdb resource")
}
ll.Items = append(ll.Items, pdb)
}
return &ll, nil
}