webhooks/core/pod_mutator.go (36 lines of code) (raw):
package core
import (
"context"
"github.com/aws/aws-app-mesh-controller-for-k8s/pkg/inject"
"github.com/aws/aws-app-mesh-controller-for-k8s/pkg/webhook"
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-v1-pod"
// NewPodMutator returns a mutator for Pod.
func NewPodMutator(injector *inject.SidecarInjector) *podMutator {
return &podMutator{
sidecarInjector: injector,
}
}
var _ webhook.Mutator = &podMutator{}
type podMutator struct {
sidecarInjector *inject.SidecarInjector
}
func (m *podMutator) Prototype(req 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.sidecarInjector.Inject(ctx, pod); err != nil {
return nil, err
}
return pod, nil
}
func (m *podMutator) MutateUpdate(ctx context.Context, obj runtime.Object, oldObj runtime.Object) (runtime.Object, error) {
return obj, nil
}
// +kubebuilder:webhook:path=/mutate-v1-pod,mutating=true,failurePolicy=fail,groups="",resources=pods,verbs=create,versions=v1,name=mpod.appmesh.k8s.aws,sideEffects=None,webhookVersions=v1beta1
func (m *podMutator) SetupWithManager(mgr ctrl.Manager) {
mgr.GetWebhookServer().Register(apiPathMutatePod, webhook.MutatingWebhookForMutator(m))
}