-
Notifications
You must be signed in to change notification settings - Fork 48
/
pod_mutator.go
51 lines (42 loc) · 1.49 KB
/
pod_mutator.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
package webhook
import (
"context"
"github.com/aws/aws-application-networking-k8s/pkg/utils/gwlog"
"github.com/aws/aws-application-networking-k8s/pkg/webhook/core"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)
const (
apiPathMutatePod = "/mutate-pod"
)
func NewPodMutator(log gwlog.Logger, scheme *runtime.Scheme, podReadinessGateInjector *PodReadinessGateInjector) *podMutator {
return &podMutator{
log: log,
podReadinessGateInjector: podReadinessGateInjector,
scheme: scheme,
}
}
var _ core.Mutator = &podMutator{}
type podMutator struct {
log gwlog.Logger
podReadinessGateInjector *PodReadinessGateInjector
scheme *runtime.Scheme
}
func (m *podMutator) Prototype(_ admission.Request) (runtime.Object, error) {
return &corev1.Pod{}, nil
}
func (m *podMutator) MutateCreate(ctx context.Context, obj runtime.Object) (runtime.Object, error) {
pod := obj.(*corev1.Pod)
if err := m.podReadinessGateInjector.MutateCreate(ctx, pod); err != nil {
return pod, err
}
return pod, nil
}
func (m *podMutator) MutateUpdate(ctx context.Context, obj runtime.Object, oldObj runtime.Object) (runtime.Object, error) {
return obj, nil
}
func (m *podMutator) SetupWithManager(log gwlog.Logger, mgr ctrl.Manager) {
mgr.GetWebhookServer().Register(apiPathMutatePod, core.MutatingWebhookForMutator(log, m.scheme, m))
}