mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: agent uses Tailnet v2 API for DERPMap updates (#11698)
Switches the Agent to use Tailnet v2 API to get DERPMap updates. Subsequent PRs will do the same for the CLI (`codersdk`) and `wsproxy`.
This commit is contained in:
+17
-3
@@ -2,6 +2,7 @@ package tailnet
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/netip"
|
||||
@@ -146,14 +147,14 @@ func (c *configMaps) configLoop() {
|
||||
if c.derpMapDirty {
|
||||
derpMap := c.derpMapLocked()
|
||||
actions = append(actions, func() {
|
||||
c.logger.Debug(context.Background(), "updating engine DERP map", slog.F("derp_map", derpMap))
|
||||
c.logger.Info(context.Background(), "updating engine DERP map", slog.F("derp_map", (*derpMapStringer)(derpMap)))
|
||||
c.engine.SetDERPMap(derpMap)
|
||||
})
|
||||
}
|
||||
if c.netmapDirty {
|
||||
nm := c.netMapLocked()
|
||||
actions = append(actions, func() {
|
||||
c.logger.Debug(context.Background(), "updating engine network map", slog.F("network_map", nm))
|
||||
c.logger.Info(context.Background(), "updating engine network map", slog.F("network_map", nm))
|
||||
c.engine.SetNetworkMap(nm)
|
||||
c.reconfig(nm)
|
||||
})
|
||||
@@ -161,7 +162,7 @@ func (c *configMaps) configLoop() {
|
||||
if c.filterDirty {
|
||||
f := c.filterLocked()
|
||||
actions = append(actions, func() {
|
||||
c.logger.Debug(context.Background(), "updating engine filter", slog.F("filter", f))
|
||||
c.logger.Info(context.Background(), "updating engine filter", slog.F("filter", f))
|
||||
c.engine.SetFilter(f)
|
||||
})
|
||||
}
|
||||
@@ -570,3 +571,16 @@ func prefixesDifferent(a, b []netip.Prefix) bool {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// derpMapStringer converts a DERPMap into a readable string for logging, since
|
||||
// it includes pointers that we want to know the contents of, not actual pointer
|
||||
// address.
|
||||
type derpMapStringer tailcfg.DERPMap
|
||||
|
||||
func (d *derpMapStringer) String() string {
|
||||
out, err := json.Marshal((*tailcfg.DERPMap)(d))
|
||||
if err != nil {
|
||||
return fmt.Sprintf("!!!error marshaling DERPMap: %s", err.Error())
|
||||
}
|
||||
return string(out)
|
||||
}
|
||||
|
||||
@@ -132,6 +132,10 @@ func (s *DRPCService) StreamDERPMaps(_ *proto.StreamDERPMapsRequest, stream prot
|
||||
var lastDERPMap *tailcfg.DERPMap
|
||||
for {
|
||||
derpMap := s.DerpMapFn()
|
||||
if derpMap == nil {
|
||||
// in testing, we send nil to close the stream.
|
||||
return io.EOF
|
||||
}
|
||||
if lastDERPMap == nil || !CompareDERPMaps(lastDERPMap, derpMap) {
|
||||
protoDERPMap := DERPMapToProto(derpMap)
|
||||
err := stream.Send(protoDERPMap)
|
||||
|
||||
Reference in New Issue
Block a user