From 9e6f87c7001a8184ed568e723bee01d328061b2d Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Tue, 11 Feb 2025 13:59:50 +0000 Subject: [PATCH 1/3] feat(agent): add CODER_AGENT_DEVCONTAINERS_ENABLE option to allow disabling devcontainer integration --- agent/agentcontainers/containers.go | 7 +++++ cli/agent.go | 48 ++++++++++++++++++++--------- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/agent/agentcontainers/containers.go b/agent/agentcontainers/containers.go index 8578f03337fbe..d195d36f69aae 100644 --- a/agent/agentcontainers/containers.go +++ b/agent/agentcontainers/containers.go @@ -140,3 +140,10 @@ type Lister interface { // This should include running and stopped containers. List(ctx context.Context) (codersdk.WorkspaceAgentListContainersResponse, error) } + +// NoopLister is a Lister interface that never returns any containers. +type NoopLister struct{} + +func (*NoopLister) List(_ context.Context) (codersdk.WorkspaceAgentListContainersResponse, error) { + return codersdk.WorkspaceAgentListContainersResponse{}, nil +} diff --git a/cli/agent.go b/cli/agent.go index fc96aa6d323c3..26205da223afe 100644 --- a/cli/agent.go +++ b/cli/agent.go @@ -25,6 +25,7 @@ import ( "cdr.dev/slog/sloggers/slogjson" "cdr.dev/slog/sloggers/slogstackdriver" "github.com/coder/coder/v2/agent" + "github.com/coder/coder/v2/agent/agentcontainers" "github.com/coder/coder/v2/agent/agentexec" "github.com/coder/coder/v2/agent/agentssh" "github.com/coder/coder/v2/agent/reaper" @@ -37,21 +38,22 @@ import ( func (r *RootCmd) workspaceAgent() *serpent.Command { var ( - auth string - logDir string - scriptDataDir string - pprofAddress string - noReap bool - sshMaxTimeout time.Duration - tailnetListenPort int64 - prometheusAddress string - debugAddress string - slogHumanPath string - slogJSONPath string - slogStackdriverPath string - blockFileTransfer bool - agentHeaderCommand string - agentHeader []string + auth string + logDir string + scriptDataDir string + pprofAddress string + noReap bool + sshMaxTimeout time.Duration + tailnetListenPort int64 + prometheusAddress string + debugAddress string + slogHumanPath string + slogJSONPath string + slogStackdriverPath string + blockFileTransfer bool + agentHeaderCommand string + agentHeader []string + devcontainersEnabled bool ) cmd := &serpent.Command{ Use: "agent", @@ -314,6 +316,14 @@ func (r *RootCmd) workspaceAgent() *serpent.Command { return xerrors.Errorf("create agent execer: %w", err) } + var containerLister agentcontainers.Lister + if !devcontainersEnabled { + containerLister = &agentcontainers.NoopLister{} + } else { + logger.Info(ctx, "agent devcontainer detection not enabled") + containerLister = agentcontainers.NewDocker(execer) + } + agnt := agent.New(agent.Options{ Client: client, Logger: logger, @@ -339,6 +349,7 @@ func (r *RootCmd) workspaceAgent() *serpent.Command { PrometheusRegistry: prometheusRegistry, BlockFileTransfer: blockFileTransfer, Execer: execer, + ContainerLister: containerLister, }) promHandler := agent.PrometheusMetricsHandler(prometheusRegistry, logger) @@ -461,6 +472,13 @@ func (r *RootCmd) workspaceAgent() *serpent.Command { Description: fmt.Sprintf("Block file transfer using known applications: %s.", strings.Join(agentssh.BlockedFileTransferCommands, ",")), Value: serpent.BoolOf(&blockFileTransfer), }, + { + Flag: "devcontainers-enable", + Default: "true", + Env: "CODER_AGENT_DEVCONTAINERS_ENABLE", + Description: "Allow the agent to automatically detect running devcontainers.", + Value: serpent.BoolOf(&devcontainersEnabled), + }, } return cmd From f14207e83843d53899447b58e6a431c6e6304ceb Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Tue, 11 Feb 2025 14:32:29 +0000 Subject: [PATCH 2/3] update golden files --- cli/testdata/coder_agent_--help.golden | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cli/testdata/coder_agent_--help.golden b/cli/testdata/coder_agent_--help.golden index 3394b43a9e900..3dcbb343149d3 100644 --- a/cli/testdata/coder_agent_--help.golden +++ b/cli/testdata/coder_agent_--help.golden @@ -33,6 +33,9 @@ OPTIONS: --debug-address string, $CODER_AGENT_DEBUG_ADDRESS (default: 127.0.0.1:2113) The bind address to serve a debug HTTP server. + --devcontainers-enable bool, $CODER_AGENT_DEVCONTAINERS_ENABLE (default: true) + Allow the agent to automatically detect running devcontainers. + --log-dir string, $CODER_AGENT_LOG_DIR (default: /tmp) Specify the location for the agent log files. From 3360b430a566119f65ee7d13d60808c17c85a1f0 Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Tue, 11 Feb 2025 15:00:30 +0000 Subject: [PATCH 3/3] whoops --- agent/agentcontainers/containers.go | 2 +- cli/agent.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/agent/agentcontainers/containers.go b/agent/agentcontainers/containers.go index d195d36f69aae..4f03f35ed5710 100644 --- a/agent/agentcontainers/containers.go +++ b/agent/agentcontainers/containers.go @@ -144,6 +144,6 @@ type Lister interface { // NoopLister is a Lister interface that never returns any containers. type NoopLister struct{} -func (*NoopLister) List(_ context.Context) (codersdk.WorkspaceAgentListContainersResponse, error) { +func (NoopLister) List(_ context.Context) (codersdk.WorkspaceAgentListContainersResponse, error) { return codersdk.WorkspaceAgentListContainersResponse{}, nil } diff --git a/cli/agent.go b/cli/agent.go index 26205da223afe..f87959aec1c49 100644 --- a/cli/agent.go +++ b/cli/agent.go @@ -318,9 +318,10 @@ func (r *RootCmd) workspaceAgent() *serpent.Command { var containerLister agentcontainers.Lister if !devcontainersEnabled { + logger.Info(ctx, "agent devcontainer detection not enabled") containerLister = &agentcontainers.NoopLister{} } else { - logger.Info(ctx, "agent devcontainer detection not enabled") + logger.Info(ctx, "agent devcontainer detection enabled") containerLister = agentcontainers.NewDocker(execer) } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy