Skip to content

Commit 48cd4c3

Browse files
authored
feat: promote single-tailnet out of experimental (#11366)
1 parent ffa7722 commit 48cd4c3

File tree

9 files changed

+30
-114
lines changed

9 files changed

+30
-114
lines changed

coderd/apidoc/docs.go

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/coderd.go

+13-19
Original file line numberDiff line numberDiff line change
@@ -458,25 +458,19 @@ func New(options *Options) *API {
458458

459459
api.Auditor.Store(&options.Auditor)
460460
api.TailnetCoordinator.Store(&options.TailnetCoordinator)
461-
if api.Experiments.Enabled(codersdk.ExperimentSingleTailnet) {
462-
api.agentProvider, err = NewServerTailnet(api.ctx,
463-
options.Logger,
464-
options.DERPServer,
465-
api.DERPMap,
466-
options.DeploymentValues.DERP.Config.ForceWebSockets.Value(),
467-
func(context.Context) (tailnet.MultiAgentConn, error) {
468-
return (*api.TailnetCoordinator.Load()).ServeMultiAgent(uuid.New()), nil
469-
},
470-
wsconncache.New(api._dialWorkspaceAgentTailnet, 0),
471-
api.TracerProvider,
472-
)
473-
if err != nil {
474-
panic("failed to setup server tailnet: " + err.Error())
475-
}
476-
} else {
477-
api.agentProvider = &wsconncache.AgentProvider{
478-
Cache: wsconncache.New(api._dialWorkspaceAgentTailnet, 0),
479-
}
461+
api.agentProvider, err = NewServerTailnet(api.ctx,
462+
options.Logger,
463+
options.DERPServer,
464+
api.DERPMap,
465+
options.DeploymentValues.DERP.Config.ForceWebSockets.Value(),
466+
func(context.Context) (tailnet.MultiAgentConn, error) {
467+
return (*api.TailnetCoordinator.Load()).ServeMultiAgent(uuid.New()), nil
468+
},
469+
wsconncache.New(api._dialWorkspaceAgentTailnet, 0),
470+
api.TracerProvider,
471+
)
472+
if err != nil {
473+
panic("failed to setup server tailnet: " + err.Error())
480474
}
481475
api.TailnetClientService, err = tailnet.NewClientService(
482476
api.Logger.Named("tailnetclient"),

codersdk/deployment.go

-6
Original file line numberDiff line numberDiff line change
@@ -2084,11 +2084,6 @@ const (
20842084
// only Coordinator
20852085
ExperimentTailnetPGCoordinator Experiment = "tailnet_pg_coordinator"
20862086

2087-
// ExperimentSingleTailnet replaces workspace connections inside coderd to
2088-
// all use a single tailnet, instead of the previous behavior of creating a
2089-
// single tailnet for each agent.
2090-
ExperimentSingleTailnet Experiment = "single_tailnet"
2091-
20922087
// Deployment health page
20932088
ExperimentDeploymentHealthPage Experiment = "deployment_health_page"
20942089

@@ -2102,7 +2097,6 @@ const (
21022097
// not be included here and will be essentially hidden.
21032098
var ExperimentsAll = Experiments{
21042099
ExperimentDeploymentHealthPage,
2105-
ExperimentSingleTailnet,
21062100
}
21072101

21082102
// Experiments is a list of experiments.

docs/api/schemas.md

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

enterprise/wsproxy/wsproxy.go

+13-21
Original file line numberDiff line numberDiff line change
@@ -239,27 +239,19 @@ func New(ctx context.Context, opts *Options) (*Server, error) {
239239
return nil, xerrors.Errorf("parse app security key: %w", err)
240240
}
241241

242-
var agentProvider workspaceapps.AgentProvider
243-
if opts.Experiments.Enabled(codersdk.ExperimentSingleTailnet) {
244-
stn, err := coderd.NewServerTailnet(ctx,
245-
s.Logger,
246-
nil,
247-
func() *tailcfg.DERPMap {
248-
return s.latestDERPMap.Load()
249-
},
250-
regResp.DERPForceWebSockets,
251-
s.DialCoordinator,
252-
wsconncache.New(s.DialWorkspaceAgent, 0),
253-
s.TracerProvider,
254-
)
255-
if err != nil {
256-
return nil, xerrors.Errorf("create server tailnet: %w", err)
257-
}
258-
agentProvider = stn
259-
} else {
260-
agentProvider = &wsconncache.AgentProvider{
261-
Cache: wsconncache.New(s.DialWorkspaceAgent, 0),
262-
}
242+
agentProvider, err := coderd.NewServerTailnet(ctx,
243+
s.Logger,
244+
nil,
245+
func() *tailcfg.DERPMap {
246+
return s.latestDERPMap.Load()
247+
},
248+
regResp.DERPForceWebSockets,
249+
s.DialCoordinator,
250+
wsconncache.New(s.DialWorkspaceAgent, 0),
251+
s.TracerProvider,
252+
)
253+
if err != nil {
254+
return nil, xerrors.Errorf("create server tailnet: %w", err)
263255
}
264256

265257
workspaceAppsLogger := opts.Logger.Named("workspaceapps")

enterprise/wsproxy/wsproxy_test.go

+1-58
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
"cdr.dev/slog/sloggers/slogtest"
1818
"github.com/coder/coder/v2/agent/agenttest"
1919
"github.com/coder/coder/v2/cli/clibase"
20-
"github.com/coder/coder/v2/coderd"
2120
"github.com/coder/coder/v2/coderd/coderdtest"
2221
"github.com/coder/coder/v2/coderd/healthcheck/derphealth"
2322
"github.com/coder/coder/v2/coderd/httpmw"
@@ -431,7 +430,7 @@ resourceLoop:
431430
require.False(t, p2p)
432431
}
433432

434-
func TestWorkspaceProxyWorkspaceApps_Wsconncache(t *testing.T) {
433+
func TestWorkspaceProxyWorkspaceApps(t *testing.T) {
435434
t.Parallel()
436435

437436
apptest.Run(t, false, func(t *testing.T, opts *apptest.DeploymentOptions) *apptest.Deployment {
@@ -487,59 +486,3 @@ func TestWorkspaceProxyWorkspaceApps_Wsconncache(t *testing.T) {
487486
}
488487
})
489488
}
490-
491-
func TestWorkspaceProxyWorkspaceApps_SingleTailnet(t *testing.T) {
492-
t.Parallel()
493-
494-
apptest.Run(t, false, func(t *testing.T, opts *apptest.DeploymentOptions) *apptest.Deployment {
495-
deploymentValues := coderdtest.DeploymentValues(t)
496-
deploymentValues.DisablePathApps = clibase.Bool(opts.DisablePathApps)
497-
deploymentValues.Dangerous.AllowPathAppSharing = clibase.Bool(opts.DangerousAllowPathAppSharing)
498-
deploymentValues.Dangerous.AllowPathAppSiteOwnerAccess = clibase.Bool(opts.DangerousAllowPathAppSiteOwnerAccess)
499-
deploymentValues.Experiments = []string{
500-
string(codersdk.ExperimentSingleTailnet),
501-
"*",
502-
}
503-
504-
client, _, api, user := coderdenttest.NewWithAPI(t, &coderdenttest.Options{
505-
Options: &coderdtest.Options{
506-
DeploymentValues: deploymentValues,
507-
AppHostname: "*.primary.test.coder.com",
508-
IncludeProvisionerDaemon: true,
509-
RealIPConfig: &httpmw.RealIPConfig{
510-
TrustedOrigins: []*net.IPNet{{
511-
IP: net.ParseIP("127.0.0.1"),
512-
Mask: net.CIDRMask(8, 32),
513-
}},
514-
TrustedHeaders: []string{
515-
"CF-Connecting-IP",
516-
},
517-
},
518-
WorkspaceAppsStatsCollectorOptions: opts.StatsCollectorOptions,
519-
},
520-
LicenseOptions: &coderdenttest.LicenseOptions{
521-
Features: license.Features{
522-
codersdk.FeatureWorkspaceProxy: 1,
523-
},
524-
},
525-
})
526-
527-
// Create the external proxy
528-
if opts.DisableSubdomainApps {
529-
opts.AppHost = ""
530-
}
531-
proxyAPI := coderdenttest.NewWorkspaceProxy(t, api, client, &coderdenttest.ProxyOptions{
532-
Name: "best-proxy",
533-
Experiments: coderd.ReadExperiments(api.Logger, deploymentValues.Experiments.Value()),
534-
AppHostname: opts.AppHost,
535-
DisablePathApps: opts.DisablePathApps,
536-
})
537-
538-
return &apptest.Deployment{
539-
Options: opts,
540-
SDKClient: client,
541-
FirstUser: user,
542-
PathAppBaseURL: proxyAPI.Options.AccessURL,
543-
}
544-
})
545-
}

site/src/api/typesGenerated.ts

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

site/src/pages/DeploySettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ const meta: Meta<typeof GeneralSettingsPageView> = {
3434
description:
3535
"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.",
3636
flag: "experiments",
37-
value: ["single_tailnet"],
37+
value: ["workspace_actions"],
3838
flag_shorthand: "",
3939
hidden: false,
4040
},
4141
],
4242
deploymentDAUs: MockDeploymentDAUResponse,
43-
safeExperiments: ["single_tailnet", "deployment_health_page"],
43+
safeExperiments: ["deployment_health_page"],
4444
},
4545
};
4646

@@ -102,6 +102,6 @@ export const allExperimentsEnabled: Story = {
102102
hidden: false,
103103
},
104104
],
105-
safeExperiments: ["single_tailnet", "deployment_health_page"],
105+
safeExperiments: ["deployment_health_page"],
106106
},
107107
};

0 commit comments

Comments
 (0)