@ -308,8 +308,7 @@ func (r *ProxyGroupReconciler) maybeProvision(ctx context.Context, tailscaleClie
var err error
var err error
svcToNodePorts , tailscaledPort , err = r . ensureNodePortServiceCreated ( ctx , pg , proxyClass )
svcToNodePorts , tailscaledPort , err = r . ensureNodePortServiceCreated ( ctx , pg , proxyClass )
if err != nil {
if err != nil {
var allocatePortErr * allocatePortsErr
if _ , ok := errors . AsType [ * allocatePortsErr ] ( err ) ; ok {
if errors . As ( err , & allocatePortErr ) {
reason := reasonProxyGroupCreationFailed
reason := reasonProxyGroupCreationFailed
msg := fmt . Sprintf ( "error provisioning NodePort Services for static endpoints: %v" , err )
msg := fmt . Sprintf ( "error provisioning NodePort Services for static endpoints: %v" , err )
r . recorder . Event ( pg , corev1 . EventTypeWarning , reason , msg )
r . recorder . Event ( pg , corev1 . EventTypeWarning , reason , msg )
@ -321,8 +320,7 @@ func (r *ProxyGroupReconciler) maybeProvision(ctx context.Context, tailscaleClie
staticEndpoints , err := r . ensureConfigSecretsCreated ( ctx , tailscaleClient , pg , proxyClass , svcToNodePorts )
staticEndpoints , err := r . ensureConfigSecretsCreated ( ctx , tailscaleClient , pg , proxyClass , svcToNodePorts )
if err != nil {
if err != nil {
var selectorErr * FindStaticEndpointErr
if _ , ok := errors . AsType [ * FindStaticEndpointErr ] ( err ) ; ok {
if errors . As ( err , & selectorErr ) {
reason := reasonProxyGroupCreationFailed
reason := reasonProxyGroupCreationFailed
msg := fmt . Sprintf ( "error provisioning config Secrets: %v" , err )
msg := fmt . Sprintf ( "error provisioning config Secrets: %v" , err )
r . recorder . Event ( pg , corev1 . EventTypeWarning , reason , msg )
r . recorder . Event ( pg , corev1 . EventTypeWarning , reason , msg )
@ -718,8 +716,7 @@ func (r *ProxyGroupReconciler) maybeCleanup(ctx context.Context, tailscaleClient
func ( r * ProxyGroupReconciler ) deleteTailnetDevice ( ctx context . Context , tailscaleClient tsClient , id tailcfg . StableNodeID , logger * zap . SugaredLogger ) error {
func ( r * ProxyGroupReconciler ) deleteTailnetDevice ( ctx context . Context , tailscaleClient tsClient , id tailcfg . StableNodeID , logger * zap . SugaredLogger ) error {
logger . Debugf ( "deleting device %s from control" , string ( id ) )
logger . Debugf ( "deleting device %s from control" , string ( id ) )
if err := tailscaleClient . DeleteDevice ( ctx , string ( id ) ) ; err != nil {
if err := tailscaleClient . DeleteDevice ( ctx , string ( id ) ) ; err != nil {
errResp := & tailscale . ErrResponse { }
if errResp , ok := errors . AsType [ tailscale . ErrResponse ] ( err ) ; ok && errResp . Status == http . StatusNotFound {
if ok := errors . As ( err , errResp ) ; ok && errResp . Status == http . StatusNotFound {
logger . Debugf ( "device %s not found, likely because it has already been deleted from control" , string ( id ) )
logger . Debugf ( "device %s not found, likely because it has already been deleted from control" , string ( id ) )
} else {
} else {
return fmt . Errorf ( "error deleting device: %w" , err )
return fmt . Errorf ( "error deleting device: %w" , err )