tailscale/tailscale · error
failed to delete %s %q: %w
Error message
failed to delete %s %q: %w
What it means
ProxyGroupPolicy cleanup path: deleting a generated ValidatingAdmissionPolicy (or its binding) failed with a non-NotFound error. NotFound is deliberately ignored (already gone); any other API-server error is wrapped and returned so reconcile retries.
Source
Thrown at k8s-operator/reconciler/proxygrouppolicy/proxygrouppolicy.go:116
Name: egress,
},
},
&admr.ValidatingAdmissionPolicyBinding{
ObjectMeta: metav1.ObjectMeta{
Name: egress,
},
},
}
for _, obj := range objects {
err := r.Delete(ctx, obj)
switch {
case apierrors.IsNotFound(err):
// A resource may have already been deleted in a previous reconciliation that failed for
// some reason, so we'll ignore it if it doesn't exist.
continue
case err != nil:
return reconcile.Result{}, fmt.Errorf("failed to delete %s %q: %w", obj.GetObjectKind().GroupVersionKind().Kind, obj.GetName(), err)
}
}
return reconcile.Result{}, nil
}
func (r *Reconciler) createOrUpdate(ctx context.Context, namespace string, policies tsapi.ProxyGroupPolicyList) (reconcile.Result, error) {
ingressNames := set.Set[string]{}
egressNames := set.Set[string]{}
// If this namespace has multiple ProxyGroupPolicy resources, we'll reduce them down to just their distinct
// egress/ingress names.
for _, policy := range policies.Items {
ingressNames.AddSlice(policy.Spec.Ingress)
egressNames.AddSlice(policy.Spec.Egress)
}
ingress, err := r.generateIngressPolicy(ctx, namespace, ingressNames)View on GitHub (pinned to 0fd2f14deb)
Solutions
- Check operator RBAC delete permissions and that the resource exists.
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at k8s-operator/reconciler/proxygrouppolicy/proxygrouppolicy.go:116 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tailscale/tailscale@0fd2f14deb (2026-08-18).
Data as JSON: /api/errors/8e0561b812f0ad03.
Report an issue: GitHub.