-
Notifications
You must be signed in to change notification settings - Fork 8
/
multicluster_reconcilers.go
161 lines (130 loc) · 6.72 KB
/
multicluster_reconcilers.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
// Code generated by skv2. DO NOT EDIT.
//go:generate mockgen -source ./multicluster_reconcilers.go -destination mocks/multicluster_reconcilers.go
// Definitions for the multicluster Kubernetes Controllers
package controller
import (
"context"
things_test_io_v1 "github.com/solo-io/skv2/codegen/test/api/things.test.io/v1"
"github.com/pkg/errors"
"github.com/solo-io/skv2/pkg/ezkube"
"github.com/solo-io/skv2/pkg/multicluster"
mc_reconcile "github.com/solo-io/skv2/pkg/multicluster/reconcile"
"github.com/solo-io/skv2/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/predicate"
)
// Reconcile Upsert events for the Paint Resource across clusters.
// implemented by the user
type MulticlusterPaintReconciler interface {
ReconcilePaint(clusterName string, obj *things_test_io_v1.Paint) (reconcile.Result, error)
}
// Reconcile deletion events for the Paint Resource across clusters.
// Deletion receives a reconcile.Request as we cannot guarantee the last state of the object
// before being deleted.
// implemented by the user
type MulticlusterPaintDeletionReconciler interface {
ReconcilePaintDeletion(clusterName string, req reconcile.Request) error
}
type MulticlusterPaintReconcilerFuncs struct {
OnReconcilePaint func(clusterName string, obj *things_test_io_v1.Paint) (reconcile.Result, error)
OnReconcilePaintDeletion func(clusterName string, req reconcile.Request) error
}
func (f *MulticlusterPaintReconcilerFuncs) ReconcilePaint(clusterName string, obj *things_test_io_v1.Paint) (reconcile.Result, error) {
if f.OnReconcilePaint == nil {
return reconcile.Result{}, nil
}
return f.OnReconcilePaint(clusterName, obj)
}
func (f *MulticlusterPaintReconcilerFuncs) ReconcilePaintDeletion(clusterName string, req reconcile.Request) error {
if f.OnReconcilePaintDeletion == nil {
return nil
}
return f.OnReconcilePaintDeletion(clusterName, req)
}
type MulticlusterPaintReconcileLoop interface {
// AddMulticlusterPaintReconciler adds a MulticlusterPaintReconciler to the MulticlusterPaintReconcileLoop.
AddMulticlusterPaintReconciler(ctx context.Context, rec MulticlusterPaintReconciler, predicates ...predicate.Predicate)
}
type multiclusterPaintReconcileLoop struct {
loop multicluster.Loop
}
func (m *multiclusterPaintReconcileLoop) AddMulticlusterPaintReconciler(ctx context.Context, rec MulticlusterPaintReconciler, predicates ...predicate.Predicate) {
genericReconciler := genericPaintMulticlusterReconciler{reconciler: rec}
m.loop.AddReconciler(ctx, genericReconciler, predicates...)
}
func NewMulticlusterPaintReconcileLoop(name string, cw multicluster.ClusterWatcher, options reconcile.Options) MulticlusterPaintReconcileLoop {
return &multiclusterPaintReconcileLoop{loop: mc_reconcile.NewLoop(name, cw, &things_test_io_v1.Paint{}, options)}
}
type genericPaintMulticlusterReconciler struct {
reconciler MulticlusterPaintReconciler
}
func (g genericPaintMulticlusterReconciler) ReconcileDeletion(cluster string, req reconcile.Request) error {
if deletionReconciler, ok := g.reconciler.(MulticlusterPaintDeletionReconciler); ok {
return deletionReconciler.ReconcilePaintDeletion(cluster, req)
}
return nil
}
func (g genericPaintMulticlusterReconciler) Reconcile(cluster string, object ezkube.Object) (reconcile.Result, error) {
obj, ok := object.(*things_test_io_v1.Paint)
if !ok {
return reconcile.Result{}, errors.Errorf("internal error: Paint handler received event for %T", object)
}
return g.reconciler.ReconcilePaint(cluster, obj)
}
// Reconcile Upsert events for the ClusterResource Resource across clusters.
// implemented by the user
type MulticlusterClusterResourceReconciler interface {
ReconcileClusterResource(clusterName string, obj *things_test_io_v1.ClusterResource) (reconcile.Result, error)
}
// Reconcile deletion events for the ClusterResource Resource across clusters.
// Deletion receives a reconcile.Request as we cannot guarantee the last state of the object
// before being deleted.
// implemented by the user
type MulticlusterClusterResourceDeletionReconciler interface {
ReconcileClusterResourceDeletion(clusterName string, req reconcile.Request) error
}
type MulticlusterClusterResourceReconcilerFuncs struct {
OnReconcileClusterResource func(clusterName string, obj *things_test_io_v1.ClusterResource) (reconcile.Result, error)
OnReconcileClusterResourceDeletion func(clusterName string, req reconcile.Request) error
}
func (f *MulticlusterClusterResourceReconcilerFuncs) ReconcileClusterResource(clusterName string, obj *things_test_io_v1.ClusterResource) (reconcile.Result, error) {
if f.OnReconcileClusterResource == nil {
return reconcile.Result{}, nil
}
return f.OnReconcileClusterResource(clusterName, obj)
}
func (f *MulticlusterClusterResourceReconcilerFuncs) ReconcileClusterResourceDeletion(clusterName string, req reconcile.Request) error {
if f.OnReconcileClusterResourceDeletion == nil {
return nil
}
return f.OnReconcileClusterResourceDeletion(clusterName, req)
}
type MulticlusterClusterResourceReconcileLoop interface {
// AddMulticlusterClusterResourceReconciler adds a MulticlusterClusterResourceReconciler to the MulticlusterClusterResourceReconcileLoop.
AddMulticlusterClusterResourceReconciler(ctx context.Context, rec MulticlusterClusterResourceReconciler, predicates ...predicate.Predicate)
}
type multiclusterClusterResourceReconcileLoop struct {
loop multicluster.Loop
}
func (m *multiclusterClusterResourceReconcileLoop) AddMulticlusterClusterResourceReconciler(ctx context.Context, rec MulticlusterClusterResourceReconciler, predicates ...predicate.Predicate) {
genericReconciler := genericClusterResourceMulticlusterReconciler{reconciler: rec}
m.loop.AddReconciler(ctx, genericReconciler, predicates...)
}
func NewMulticlusterClusterResourceReconcileLoop(name string, cw multicluster.ClusterWatcher, options reconcile.Options) MulticlusterClusterResourceReconcileLoop {
return &multiclusterClusterResourceReconcileLoop{loop: mc_reconcile.NewLoop(name, cw, &things_test_io_v1.ClusterResource{}, options)}
}
type genericClusterResourceMulticlusterReconciler struct {
reconciler MulticlusterClusterResourceReconciler
}
func (g genericClusterResourceMulticlusterReconciler) ReconcileDeletion(cluster string, req reconcile.Request) error {
if deletionReconciler, ok := g.reconciler.(MulticlusterClusterResourceDeletionReconciler); ok {
return deletionReconciler.ReconcileClusterResourceDeletion(cluster, req)
}
return nil
}
func (g genericClusterResourceMulticlusterReconciler) Reconcile(cluster string, object ezkube.Object) (reconcile.Result, error) {
obj, ok := object.(*things_test_io_v1.ClusterResource)
if !ok {
return reconcile.Result{}, errors.Errorf("internal error: ClusterResource handler received event for %T", object)
}
return g.reconciler.ReconcileClusterResource(cluster, obj)
}