| 560 | } |
| 561 | |
| 562 | func (a *InmemTailnetDialer) Dial(ctx context.Context, _ tailnet.ResumeTokenController) (tailnet.ControlProtocolClients, error) { |
| 563 | if a.DatabaseHealthCheck != nil { |
| 564 | if _, err := a.DatabaseHealthCheck.Ping(ctx); err != nil { |
| 565 | return tailnet.ControlProtocolClients{}, xerrors.Errorf("%w: %v", codersdk.ErrDatabaseNotReachable, err) |
| 566 | } |
| 567 | } |
| 568 | |
| 569 | coord := a.CoordPtr.Load() |
| 570 | if coord == nil { |
| 571 | return tailnet.ControlProtocolClients{}, xerrors.Errorf("tailnet coordinator not initialized") |
| 572 | } |
| 573 | coordClient := tailnet.NewInMemoryCoordinatorClient( |
| 574 | a.Logger, a.ClientID, tailnet.SingleTailnetCoordinateeAuth{}, *coord) |
| 575 | derpClient := newPollingDERPClient(a.DERPFn, a.Logger) |
| 576 | return tailnet.ControlProtocolClients{ |
| 577 | Closer: closeAll{coord: coordClient, derp: derpClient}, |
| 578 | Coordinator: coordClient, |
| 579 | DERP: derpClient, |
| 580 | }, nil |
| 581 | } |
| 582 | |
| 583 | func newPollingDERPClient(derpFn func() *tailcfg.DERPMap, logger slog.Logger) tailnet.DERPClient { |
| 584 | ctx, cancel := context.WithCancel(context.Background()) |