Skip to main content

Mutating Webhooks

Introduction

Mutating webhooks are most frequently used for setting default values. They can modify objects by creating a patch that will be sent back in the admission response.

Example Mutating Webhook

[Webhook(
name: "pod-policy.neonkube.io",
admissionReviewVersions: "v1",
failurePolicy: "Ignore")]
[WebhookRule(
apiGroups: V1Pod.KubeGroup,
apiVersions: V1Pod.KubeApiVersion,
operations: AdmissionOperations.Create | AdmissionOperations.Update,
resources: V1Pod.KubePluralName,
scope: "*")]
public class PodWebhook : MutatingWebhookBase<V1Pod>
{
private bool modified = false;

public override async Task<MutationResult> CreateAsync(V1Pod entity, bool dryRun, CancellationToken cancellationToken = default)
{
if (modified)
{
return await Task.FromResult(MutationResult.Modified(entity));
}

return await Task.FromResult(MutationResult.NoChanges());
}

public override async Task<MutationResult> UpdateAsync(V1Pod entity, V1Pod oldEntity, bool dryRun, CancellationToken cancellationToken = default)
{
if (modified)
{
return await Task.FromResult(MutationResult.Modified(entity));
}

return await Task.FromResult(MutationResult.NoChanges());
}
}