From fb3523b37f5224d278b5ae934e7180e346a44a6b Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Thu, 12 Sep 2024 07:40:19 +0400 Subject: [PATCH] chore: remove legacy AgentIP address (#14640) Removes the support for the Agent's "legacy IP" which was a hardcoded IP address all agents used to use, before we introduced "single tailnet". Single tailnet went GA in 2.7.0. --- agent/agent.go | 3 -- codersdk/workspacesdk/workspacesdk.go | 9 ------ enterprise/tailnet/pgcoord_test.go | 43 --------------------------- site/e2e/tests/outdatedCLI.spec.ts | 3 +- tailnet/coordinator_test.go | 36 ---------------------- 5 files changed, 1 insertion(+), 93 deletions(-) diff --git a/agent/agent.go b/agent/agent.go index dbd355669b..e401331c5c 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -1119,9 +1119,6 @@ func (a *agent) wireguardAddresses(agentID uuid.UUID) []netip.Prefix { return []netip.Prefix{ // This is the IP that should be used primarily. netip.PrefixFrom(tailnet.IPFromUUID(agentID), 128), - // We also listen on the legacy codersdk.WorkspaceAgentIP. This - // allows for a transition away from wsconncache. - netip.PrefixFrom(workspacesdk.AgentIP, 128), } } diff --git a/codersdk/workspacesdk/workspacesdk.go b/codersdk/workspacesdk/workspacesdk.go index e4b64f5702..b273d69712 100644 --- a/codersdk/workspacesdk/workspacesdk.go +++ b/codersdk/workspacesdk/workspacesdk.go @@ -25,15 +25,6 @@ import ( "github.com/coder/quartz" ) -// AgentIP is a static IPv6 address with the Tailscale prefix that is used to route -// connections from clients to this node. A dynamic address is not required because a Tailnet -// client only dials a single agent at a time. -// -// Deprecated: use tailnet.IP() instead. This is kept for backwards -// compatibility with outdated CLI clients and Workspace Proxies that dial it. -// See: https://github.com/coder/coder/issues/11819 -var AgentIP = netip.MustParseAddr("fd7a:115c:a1e0:49d6:b259:b7ac:b1b2:48f4") - var ErrSkipClose = xerrors.New("skip tailnet close") const ( diff --git a/enterprise/tailnet/pgcoord_test.go b/enterprise/tailnet/pgcoord_test.go index 7ed0b7a7d1..118fdead98 100644 --- a/enterprise/tailnet/pgcoord_test.go +++ b/enterprise/tailnet/pgcoord_test.go @@ -25,7 +25,6 @@ import ( "github.com/coder/coder/v2/coderd/database/dbmock" "github.com/coder/coder/v2/coderd/database/dbtestutil" "github.com/coder/coder/v2/coderd/database/pubsub" - "github.com/coder/coder/v2/codersdk/workspacesdk" "github.com/coder/coder/v2/enterprise/tailnet" agpl "github.com/coder/coder/v2/tailnet" "github.com/coder/coder/v2/tailnet/proto" @@ -210,48 +209,6 @@ func TestPGCoordinatorSingle_AgentValidIP(t *testing.T) { assertEventuallyLost(ctx, t, store, agent.id) } -func TestPGCoordinatorSingle_AgentValidIPLegacy(t *testing.T) { - t.Parallel() - if !dbtestutil.WillUsePostgres() { - t.Skip("test only with postgres") - } - store, ps := dbtestutil.NewDB(t) - ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitSuperLong) - defer cancel() - logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug) - coordinator, err := tailnet.NewPGCoord(ctx, logger, ps, store) - require.NoError(t, err) - defer coordinator.Close() - - agent := newTestAgent(t, coordinator, "agent") - defer agent.close() - agent.sendNode(&agpl.Node{ - Addresses: []netip.Prefix{ - netip.PrefixFrom(workspacesdk.AgentIP, 128), - }, - PreferredDERP: 10, - }) - require.Eventually(t, func() bool { - agents, err := store.GetTailnetPeers(ctx, agent.id) - if err != nil && !xerrors.Is(err, sql.ErrNoRows) { - t.Fatalf("database error: %v", err) - } - if len(agents) == 0 { - return false - } - node := new(proto.Node) - err = gProto.Unmarshal(agents[0].Node, node) - assert.NoError(t, err) - assert.EqualValues(t, 10, node.PreferredDerp) - return true - }, testutil.WaitShort, testutil.IntervalFast) - err = agent.close() - require.NoError(t, err) - <-agent.errChan - <-agent.closeChan - assertEventuallyLost(ctx, t, store, agent.id) -} - func TestPGCoordinatorSingle_AgentWithClient(t *testing.T) { t.Parallel() if !dbtestutil.WillUsePostgres() { diff --git a/site/e2e/tests/outdatedCLI.spec.ts b/site/e2e/tests/outdatedCLI.spec.ts index ccc5ba63e0..6118f195ff 100644 --- a/site/e2e/tests/outdatedCLI.spec.ts +++ b/site/e2e/tests/outdatedCLI.spec.ts @@ -11,8 +11,7 @@ import { } from "../helpers"; import { beforeCoderTest } from "../hooks"; -// we no longer support versions prior to single tailnet: https://github.com/coder/coder/commit/d7cbdbd9c64ad26821e6b35834c59ecf85dcd9d4 -const clientVersion = "v0.27.0"; +const clientVersion = "v2.8.0"; test.beforeEach(({ page }) => beforeCoderTest(page)); diff --git a/tailnet/coordinator_test.go b/tailnet/coordinator_test.go index 196c9e5fce..851d489150 100644 --- a/tailnet/coordinator_test.go +++ b/tailnet/coordinator_test.go @@ -22,7 +22,6 @@ import ( "cdr.dev/slog" "cdr.dev/slog/sloggers/slogtest" - "github.com/coder/coder/v2/codersdk/workspacesdk" "github.com/coder/coder/v2/tailnet" "github.com/coder/coder/v2/tailnet/proto" "github.com/coder/coder/v2/tailnet/tailnettest" @@ -133,41 +132,6 @@ func TestCoordinator(t *testing.T) { _ = testutil.RequireRecvCtx(ctx, t, closeChan) }) - t.Run("AgentWithoutClients_ValidIPLegacy", func(t *testing.T) { - t.Parallel() - logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug) - ctx := testutil.Context(t, testutil.WaitMedium) - coordinator := tailnet.NewCoordinator(logger) - defer func() { - err := coordinator.Close() - require.NoError(t, err) - }() - client, server := net.Pipe() - sendNode, errChan := tailnet.ServeCoordinator(client, func(node []*tailnet.Node) error { - return nil - }) - id := uuid.New() - closeChan := make(chan struct{}) - go func() { - err := coordinator.ServeAgent(server, id, "") - assert.NoError(t, err) - close(closeChan) - }() - sendNode(&tailnet.Node{ - Addresses: []netip.Prefix{ - netip.PrefixFrom(workspacesdk.AgentIP, 128), - }, - PreferredDERP: 10, - }) - require.Eventually(t, func() bool { - return coordinator.Node(id) != nil - }, testutil.WaitShort, testutil.IntervalFast) - err := client.Close() - require.NoError(t, err) - _ = testutil.RequireRecvCtx(ctx, t, errChan) - _ = testutil.RequireRecvCtx(ctx, t, closeChan) - }) - t.Run("AgentWithoutClients_InvalidIP", func(t *testing.T) { t.Parallel() logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}).Leveled(slog.LevelDebug)