@@ -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