From 7fc5315cf20e32a9ce9c1a06680e6acb686f4367 Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Tue, 12 Dec 2023 15:21:18 +0400 Subject: [PATCH] feat: promote single-tailnet out of experimental --- coderd/apidoc/docs.go | 2 - coderd/apidoc/swagger.json | 2 - coderd/coderd.go | 32 ++++------ codersdk/deployment.go | 6 -- docs/api/schemas.md | 1 - enterprise/wsproxy/wsproxy.go | 34 ++++------- enterprise/wsproxy/wsproxy_test.go | 59 +------------------ site/src/api/typesGenerated.ts | 2 - .../GeneralSettingsPageView.stories.tsx | 6 +- 9 files changed, 30 insertions(+), 114 deletions(-) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index ee1277d3bc7c4..c5e16f97ea62b 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -9110,13 +9110,11 @@ const docTemplate = `{ "enum": [ "workspace_actions", "tailnet_pg_coordinator", - "single_tailnet", "deployment_health_page" ], "x-enum-varnames": [ "ExperimentWorkspaceActions", "ExperimentTailnetPGCoordinator", - "ExperimentSingleTailnet", "ExperimentDeploymentHealthPage" ] }, diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index 83689a31c6168..784fc2ea3a009 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -8156,13 +8156,11 @@ "enum": [ "workspace_actions", "tailnet_pg_coordinator", - "single_tailnet", "deployment_health_page" ], "x-enum-varnames": [ "ExperimentWorkspaceActions", "ExperimentTailnetPGCoordinator", - "ExperimentSingleTailnet", "ExperimentDeploymentHealthPage" ] }, diff --git a/coderd/coderd.go b/coderd/coderd.go index ae861d568791e..88af4925578c8 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -458,25 +458,19 @@ func New(options *Options) *API { api.Auditor.Store(&options.Auditor) api.TailnetCoordinator.Store(&options.TailnetCoordinator) - if api.Experiments.Enabled(codersdk.ExperimentSingleTailnet) { - api.agentProvider, err = NewServerTailnet(api.ctx, - options.Logger, - options.DERPServer, - api.DERPMap, - options.DeploymentValues.DERP.Config.ForceWebSockets.Value(), - func(context.Context) (tailnet.MultiAgentConn, error) { - return (*api.TailnetCoordinator.Load()).ServeMultiAgent(uuid.New()), nil - }, - wsconncache.New(api._dialWorkspaceAgentTailnet, 0), - api.TracerProvider, - ) - if err != nil { - panic("failed to setup server tailnet: " + err.Error()) - } - } else { - api.agentProvider = &wsconncache.AgentProvider{ - Cache: wsconncache.New(api._dialWorkspaceAgentTailnet, 0), - } + api.agentProvider, err = NewServerTailnet(api.ctx, + options.Logger, + options.DERPServer, + api.DERPMap, + options.DeploymentValues.DERP.Config.ForceWebSockets.Value(), + func(context.Context) (tailnet.MultiAgentConn, error) { + return (*api.TailnetCoordinator.Load()).ServeMultiAgent(uuid.New()), nil + }, + wsconncache.New(api._dialWorkspaceAgentTailnet, 0), + api.TracerProvider, + ) + if err != nil { + panic("failed to setup server tailnet: " + err.Error()) } api.TailnetClientService, err = tailnet.NewClientService( api.Logger.Named("tailnetclient"), diff --git a/codersdk/deployment.go b/codersdk/deployment.go index 9117a5131d43b..831ac91291c2b 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -2084,11 +2084,6 @@ const ( // only Coordinator ExperimentTailnetPGCoordinator Experiment = "tailnet_pg_coordinator" - // ExperimentSingleTailnet replaces workspace connections inside coderd to - // all use a single tailnet, instead of the previous behavior of creating a - // single tailnet for each agent. - ExperimentSingleTailnet Experiment = "single_tailnet" - // Deployment health page ExperimentDeploymentHealthPage Experiment = "deployment_health_page" @@ -2102,7 +2097,6 @@ const ( // not be included here and will be essentially hidden. var ExperimentsAll = Experiments{ ExperimentDeploymentHealthPage, - ExperimentSingleTailnet, } // Experiments is a list of experiments. diff --git a/docs/api/schemas.md b/docs/api/schemas.md index 407bb4e34e982..c11b9ae77d906 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -2880,7 +2880,6 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in | ------------------------ | | `workspace_actions` | | `tailnet_pg_coordinator` | -| `single_tailnet` | | `deployment_health_page` | ## codersdk.ExternalAuth diff --git a/enterprise/wsproxy/wsproxy.go b/enterprise/wsproxy/wsproxy.go index d626a7ea51cdd..d43939805d680 100644 --- a/enterprise/wsproxy/wsproxy.go +++ b/enterprise/wsproxy/wsproxy.go @@ -239,27 +239,19 @@ func New(ctx context.Context, opts *Options) (*Server, error) { return nil, xerrors.Errorf("parse app security key: %w", err) } - var agentProvider workspaceapps.AgentProvider - if opts.Experiments.Enabled(codersdk.ExperimentSingleTailnet) { - stn, err := coderd.NewServerTailnet(ctx, - s.Logger, - nil, - func() *tailcfg.DERPMap { - return s.latestDERPMap.Load() - }, - regResp.DERPForceWebSockets, - s.DialCoordinator, - wsconncache.New(s.DialWorkspaceAgent, 0), - s.TracerProvider, - ) - if err != nil { - return nil, xerrors.Errorf("create server tailnet: %w", err) - } - agentProvider = stn - } else { - agentProvider = &wsconncache.AgentProvider{ - Cache: wsconncache.New(s.DialWorkspaceAgent, 0), - } + agentProvider, err := coderd.NewServerTailnet(ctx, + s.Logger, + nil, + func() *tailcfg.DERPMap { + return s.latestDERPMap.Load() + }, + regResp.DERPForceWebSockets, + s.DialCoordinator, + wsconncache.New(s.DialWorkspaceAgent, 0), + s.TracerProvider, + ) + if err != nil { + return nil, xerrors.Errorf("create server tailnet: %w", err) } workspaceAppsLogger := opts.Logger.Named("workspaceapps") diff --git a/enterprise/wsproxy/wsproxy_test.go b/enterprise/wsproxy/wsproxy_test.go index e80d8b1cabf12..312fdf98be047 100644 --- a/enterprise/wsproxy/wsproxy_test.go +++ b/enterprise/wsproxy/wsproxy_test.go @@ -17,7 +17,6 @@ import ( "cdr.dev/slog/sloggers/slogtest" "github.com/coder/coder/v2/agent/agenttest" "github.com/coder/coder/v2/cli/clibase" - "github.com/coder/coder/v2/coderd" "github.com/coder/coder/v2/coderd/coderdtest" "github.com/coder/coder/v2/coderd/healthcheck/derphealth" "github.com/coder/coder/v2/coderd/httpmw" @@ -431,7 +430,7 @@ resourceLoop: require.False(t, p2p) } -func TestWorkspaceProxyWorkspaceApps_Wsconncache(t *testing.T) { +func TestWorkspaceProxyWorkspaceApps(t *testing.T) { t.Parallel() apptest.Run(t, false, func(t *testing.T, opts *apptest.DeploymentOptions) *apptest.Deployment { @@ -487,59 +486,3 @@ func TestWorkspaceProxyWorkspaceApps_Wsconncache(t *testing.T) { } }) } - -func TestWorkspaceProxyWorkspaceApps_SingleTailnet(t *testing.T) { - t.Parallel() - - apptest.Run(t, false, func(t *testing.T, opts *apptest.DeploymentOptions) *apptest.Deployment { - deploymentValues := coderdtest.DeploymentValues(t) - deploymentValues.DisablePathApps = clibase.Bool(opts.DisablePathApps) - deploymentValues.Dangerous.AllowPathAppSharing = clibase.Bool(opts.DangerousAllowPathAppSharing) - deploymentValues.Dangerous.AllowPathAppSiteOwnerAccess = clibase.Bool(opts.DangerousAllowPathAppSiteOwnerAccess) - deploymentValues.Experiments = []string{ - string(codersdk.ExperimentSingleTailnet), - "*", - } - - client, _, api, user := coderdenttest.NewWithAPI(t, &coderdenttest.Options{ - Options: &coderdtest.Options{ - DeploymentValues: deploymentValues, - AppHostname: "*.primary.test.coder.com", - IncludeProvisionerDaemon: true, - RealIPConfig: &httpmw.RealIPConfig{ - TrustedOrigins: []*net.IPNet{{ - IP: net.ParseIP("127.0.0.1"), - Mask: net.CIDRMask(8, 32), - }}, - TrustedHeaders: []string{ - "CF-Connecting-IP", - }, - }, - WorkspaceAppsStatsCollectorOptions: opts.StatsCollectorOptions, - }, - LicenseOptions: &coderdenttest.LicenseOptions{ - Features: license.Features{ - codersdk.FeatureWorkspaceProxy: 1, - }, - }, - }) - - // Create the external proxy - if opts.DisableSubdomainApps { - opts.AppHost = "" - } - proxyAPI := coderdenttest.NewWorkspaceProxy(t, api, client, &coderdenttest.ProxyOptions{ - Name: "best-proxy", - Experiments: coderd.ReadExperiments(api.Logger, deploymentValues.Experiments.Value()), - AppHostname: opts.AppHost, - DisablePathApps: opts.DisablePathApps, - }) - - return &apptest.Deployment{ - Options: opts, - SDKClient: client, - FirstUser: user, - PathAppBaseURL: proxyAPI.Options.AccessURL, - } - }) -} diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 98def777d9a91..75adb47ba22ca 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1813,12 +1813,10 @@ export const Entitlements: Entitlement[] = [ // From codersdk/deployment.go export type Experiment = | "deployment_health_page" - | "single_tailnet" | "tailnet_pg_coordinator" | "workspace_actions"; export const Experiments: Experiment[] = [ "deployment_health_page", - "single_tailnet", "tailnet_pg_coordinator", "workspace_actions", ]; diff --git a/site/src/pages/DeploySettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx b/site/src/pages/DeploySettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx index 2b3ec0afa13d5..f47e456a10353 100644 --- a/site/src/pages/DeploySettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx +++ b/site/src/pages/DeploySettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx @@ -34,13 +34,13 @@ const meta: Meta = { description: "Enable one or more experiments. These are not ready for production. Separate multiple experiments with commas, or enter '*' to opt-in to all available experiments.", flag: "experiments", - value: ["single_tailnet"], + value: ["workspace_actions"], flag_shorthand: "", hidden: false, }, ], deploymentDAUs: MockDeploymentDAUResponse, - safeExperiments: ["single_tailnet", "deployment_health_page"], + safeExperiments: ["deployment_health_page"], }, }; @@ -102,6 +102,6 @@ export const allExperimentsEnabled: Story = { hidden: false, }, ], - safeExperiments: ["single_tailnet", "deployment_health_page"], + safeExperiments: ["deployment_health_page"], }, };