@@ -25,6 +25,7 @@ import (
25
25
"cdr.dev/slog/sloggers/slogjson"
26
26
"cdr.dev/slog/sloggers/slogstackdriver"
27
27
"github.com/coder/coder/v2/agent"
28
+ "github.com/coder/coder/v2/agent/agentcontainers"
28
29
"github.com/coder/coder/v2/agent/agentexec"
29
30
"github.com/coder/coder/v2/agent/agentssh"
30
31
"github.com/coder/coder/v2/agent/reaper"
@@ -37,21 +38,22 @@ import (
37
38
38
39
func (r * RootCmd ) workspaceAgent () * serpent.Command {
39
40
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
55
57
)
56
58
cmd := & serpent.Command {
57
59
Use : "agent" ,
@@ -314,6 +316,15 @@ func (r *RootCmd) workspaceAgent() *serpent.Command {
314
316
return xerrors .Errorf ("create agent execer: %w" , err )
315
317
}
316
318
319
+ var containerLister agentcontainers.Lister
320
+ if ! devcontainersEnabled {
321
+ logger .Info (ctx , "agent devcontainer detection not enabled" )
322
+ containerLister = & agentcontainers.NoopLister {}
323
+ } else {
324
+ logger .Info (ctx , "agent devcontainer detection enabled" )
325
+ containerLister = agentcontainers .NewDocker (execer )
326
+ }
327
+
317
328
agnt := agent .New (agent.Options {
318
329
Client : client ,
319
330
Logger : logger ,
@@ -339,6 +350,7 @@ func (r *RootCmd) workspaceAgent() *serpent.Command {
339
350
PrometheusRegistry : prometheusRegistry ,
340
351
BlockFileTransfer : blockFileTransfer ,
341
352
Execer : execer ,
353
+ ContainerLister : containerLister ,
342
354
})
343
355
344
356
promHandler := agent .PrometheusMetricsHandler (prometheusRegistry , logger )
@@ -461,6 +473,13 @@ func (r *RootCmd) workspaceAgent() *serpent.Command {
461
473
Description : fmt .Sprintf ("Block file transfer using known applications: %s." , strings .Join (agentssh .BlockedFileTransferCommands , "," )),
462
474
Value : serpent .BoolOf (& blockFileTransfer ),
463
475
},
476
+ {
477
+ Flag : "devcontainers-enable" ,
478
+ Default : "true" ,
479
+ Env : "CODER_AGENT_DEVCONTAINERS_ENABLE" ,
480
+ Description : "Allow the agent to automatically detect running devcontainers." ,
481
+ Value : serpent .BoolOf (& devcontainersEnabled ),
482
+ },
464
483
}
465
484
466
485
return cmd
0 commit comments