Skip to content

Commit 9e6f87c

Browse files
committed
feat(agent): add CODER_AGENT_DEVCONTAINERS_ENABLE option to allow disabling devcontainer integration
1 parent 34b46f9 commit 9e6f87c

File tree

2 files changed

+40
-15
lines changed

2 files changed

+40
-15
lines changed

agent/agentcontainers/containers.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,10 @@ type Lister interface {
140140
// This should include running and stopped containers.
141141
List(ctx context.Context) (codersdk.WorkspaceAgentListContainersResponse, error)
142142
}
143+
144+
// NoopLister is a Lister interface that never returns any containers.
145+
type NoopLister struct{}
146+
147+
func (*NoopLister) List(_ context.Context) (codersdk.WorkspaceAgentListContainersResponse, error) {
148+
return codersdk.WorkspaceAgentListContainersResponse{}, nil
149+
}

cli/agent.go

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"cdr.dev/slog/sloggers/slogjson"
2626
"cdr.dev/slog/sloggers/slogstackdriver"
2727
"github.com/coder/coder/v2/agent"
28+
"github.com/coder/coder/v2/agent/agentcontainers"
2829
"github.com/coder/coder/v2/agent/agentexec"
2930
"github.com/coder/coder/v2/agent/agentssh"
3031
"github.com/coder/coder/v2/agent/reaper"
@@ -37,21 +38,22 @@ import (
3738

3839
func (r *RootCmd) workspaceAgent() *serpent.Command {
3940
var (
40-
auth string
41-
logDir string
42-
scriptDataDir string
43-
pprofAddress string
44-
noReap bool
45-
sshMaxTimeout time.Duration
46-
tailnetListenPort int64
47-
prometheusAddress string
48-
debugAddress string
49-
slogHumanPath string
50-
slogJSONPath string
51-
slogStackdriverPath string
52-
blockFileTransfer bool
53-
agentHeaderCommand string
54-
agentHeader []string
41+
auth string
42+
logDir string
43+
scriptDataDir string
44+
pprofAddress string
45+
noReap bool
46+
sshMaxTimeout time.Duration
47+
tailnetListenPort int64
48+
prometheusAddress string
49+
debugAddress string
50+
slogHumanPath string
51+
slogJSONPath string
52+
slogStackdriverPath string
53+
blockFileTransfer bool
54+
agentHeaderCommand string
55+
agentHeader []string
56+
devcontainersEnabled bool
5557
)
5658
cmd := &serpent.Command{
5759
Use: "agent",
@@ -314,6 +316,14 @@ func (r *RootCmd) workspaceAgent() *serpent.Command {
314316
return xerrors.Errorf("create agent execer: %w", err)
315317
}
316318

319+
var containerLister agentcontainers.Lister
320+
if !devcontainersEnabled {
321+
containerLister = &agentcontainers.NoopLister{}
322+
} else {
323+
logger.Info(ctx, "agent devcontainer detection not enabled")
324+
containerLister = agentcontainers.NewDocker(execer)
325+
}
326+
317327
agnt := agent.New(agent.Options{
318328
Client: client,
319329
Logger: logger,
@@ -339,6 +349,7 @@ func (r *RootCmd) workspaceAgent() *serpent.Command {
339349
PrometheusRegistry: prometheusRegistry,
340350
BlockFileTransfer: blockFileTransfer,
341351
Execer: execer,
352+
ContainerLister: containerLister,
342353
})
343354

344355
promHandler := agent.PrometheusMetricsHandler(prometheusRegistry, logger)
@@ -461,6 +472,13 @@ func (r *RootCmd) workspaceAgent() *serpent.Command {
461472
Description: fmt.Sprintf("Block file transfer using known applications: %s.", strings.Join(agentssh.BlockedFileTransferCommands, ",")),
462473
Value: serpent.BoolOf(&blockFileTransfer),
463474
},
475+
{
476+
Flag: "devcontainers-enable",
477+
Default: "true",
478+
Env: "CODER_AGENT_DEVCONTAINERS_ENABLE",
479+
Description: "Allow the agent to automatically detect running devcontainers.",
480+
Value: serpent.BoolOf(&devcontainersEnabled),
481+
},
464482
}
465483

466484
return cmd

0 commit comments

Comments
 (0)