Skip to content

Commit

Permalink
[E2E] Log executed commands using scrubber in host and docker (#27716)
Browse files Browse the repository at this point in the history
  • Loading branch information
pgimalac committed Jul 22, 2024
1 parent 6ebf66a commit 1eba586
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 39 deletions.
30 changes: 30 additions & 0 deletions pkg/util/scrubber/default_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -679,3 +679,33 @@ func TestAuthorization(t *testing.T) {
` authorization: some auth`,
` authorization: "********"`)
}

func TestScrubCommandsEnv(t *testing.T) {
testCases := []struct {
name string
input string
expected string
}{
{
"api key",
`DD_API_KEY=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa agent run`,
`DD_API_KEY=***************************aaaaa agent run`,
}, {
"app key",
`DD_APP_KEY=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa agent run`,
`DD_APP_KEY=***********************************aaaaa agent run`,
},
}

for _, tc := range testCases {
t.Run("line "+tc.name, func(t *testing.T) {
scrubbed := ScrubLine(tc.input)
assert.EqualValues(t, tc.expected, scrubbed)
})
t.Run("bytes "+tc.name, func(t *testing.T) {
scrubbed, err := ScrubBytes([]byte(tc.input))
require.NoError(t, err)
assert.EqualValues(t, tc.expected, scrubbed)
})
}
}
62 changes: 29 additions & 33 deletions test/new-e2e/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,17 @@ replace (
github.com/DataDog/datadog-agent/pkg/proto => ../../pkg/proto
github.com/DataDog/datadog-agent/pkg/util/optional => ../../pkg/util/optional
github.com/DataDog/datadog-agent/pkg/util/pointer => ../../pkg/util/pointer
github.com/DataDog/datadog-agent/pkg/util/scrubber => ../../pkg/util/scrubber
github.com/DataDog/datadog-agent/pkg/util/testutil => ../../pkg/util/testutil
github.com/DataDog/datadog-agent/pkg/version => ../../pkg/version
github.com/DataDog/datadog-agent/test/fakeintake => ../fakeintake
)

require (
github.com/DataDog/agent-payload/v5 v5.0.122
github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3
github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3
github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3
github.com/DataDog/datadog-agent/pkg/util/testutil v0.56.0-rc.3
github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3
github.com/DataDog/datadog-agent/test/fakeintake v0.56.0-rc.3
Expand All @@ -41,11 +44,17 @@ require (
github.com/fatih/color v1.16.0
github.com/google/uuid v1.6.0
github.com/kr/pretty v0.3.1
github.com/mitchellh/mapstructure v1.5.0
github.com/pkg/sftp v1.13.6
github.com/pulumi/pulumi-aws/sdk/v6 v6.44.0
github.com/pulumi/pulumi-awsx/sdk/v2 v2.13.0
github.com/pulumi/pulumi-eks/sdk/v2 v2.2.1
github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.13.1
github.com/pulumi/pulumi/sdk/v3 v3.122.0
github.com/samber/lo v1.39.0
github.com/sethvargo/go-retry v0.2.4
github.com/stretchr/testify v1.9.0
github.com/xeipuuv/gojsonschema v1.2.0
golang.org/x/crypto v0.24.0
golang.org/x/sys v0.21.0
golang.org/x/term v0.21.0
Expand All @@ -61,6 +70,8 @@ require (
require (
dario.cat/mergo v1.0.0 // indirect
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
github.com/BurntSushi/toml v1.2.1 // indirect
github.com/DataDog/datadog-agent/comp/netflow/payload v0.56.0-rc.3 // indirect
github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3
github.com/DataDog/mmh3 v0.0.0-20200805151601-30884ca2197a // indirect
github.com/DataDog/zstd v1.5.2 // indirect
Expand All @@ -72,6 +83,7 @@ require (
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
github.com/agext/levenshtein v1.2.3 // indirect
github.com/alessio/shellescape v1.4.2 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/atotto/clipboard v0.1.4 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.19 // indirect
Expand All @@ -80,6 +92,7 @@ require (
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.13 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.12 // indirect
github.com/aws/aws-sdk-go-v2/service/ecr v1.30.1 // indirect
github.com/aws/aws-sdk-go-v2/service/ecs v1.42.1
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.14 // indirect
Expand All @@ -100,22 +113,26 @@ require (
github.com/cheggaaa/pb v1.0.29 // indirect
github.com/cloudflare/circl v1.3.7 // indirect
github.com/containerd/console v1.0.4 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
github.com/davecgh/go-spew v1.1.1
github.com/distribution/reference v0.5.0 // indirect
github.com/djherbis/times v1.6.0 // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect
github.com/felixge/httpsnoop v1.0.3 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/fvbommel/sortorder v1.1.0 // indirect
github.com/go-errors/errors v1.4.2 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/go-git/go-billy/v5 v5.5.0 // indirect
github.com/go-git/go-git/v5 v5.12.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
Expand All @@ -128,7 +145,9 @@ require (
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
Expand Down Expand Up @@ -163,6 +182,7 @@ require (
github.com/muesli/reflow v0.3.0 // indirect
github.com/muesli/termenv v0.15.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/nxadm/tail v1.4.11 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.0.2 // indirect
Expand All @@ -178,6 +198,7 @@ require (
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect
github.com/pulumi/esc v0.9.1 // indirect
github.com/pulumi/pulumi-command/sdk v0.9.2 // indirect
github.com/pulumi/pulumi-docker/sdk/v4 v4.5.1 // indirect
github.com/pulumi/pulumi-libvirt/sdk v0.4.5 // indirect
github.com/pulumi/pulumi-random/sdk/v4 v4.16.0 // indirect
github.com/pulumi/pulumi-tls/sdk/v4 v4.11.1 // indirect
Expand All @@ -200,9 +221,17 @@ require (
github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
github.com/xanzy/ssh-agent v0.3.3 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/xlab/treeprint v1.2.0 // indirect
github.com/zclconf/go-cty v1.14.3 // indirect
github.com/zorkian/go-datadog-api v2.30.0+incompatible
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 // indirect
go.opentelemetry.io/otel v1.28.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 // indirect
go.opentelemetry.io/otel/metric v1.28.0 // indirect
go.opentelemetry.io/otel/sdk v1.28.0 // indirect
go.opentelemetry.io/otel/trace v1.28.0 // indirect
go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect
go.uber.org/atomic v1.11.0 // indirect
golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 // indirect
Expand Down Expand Up @@ -233,36 +262,3 @@ require (
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)

require (
github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3
github.com/mitchellh/mapstructure v1.5.0
github.com/pulumi/pulumi-aws/sdk/v6 v6.44.0
github.com/pulumi/pulumi-awsx/sdk/v2 v2.13.0
github.com/pulumi/pulumi-eks/sdk/v2 v2.2.1
github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.13.1
github.com/xeipuuv/gojsonschema v1.2.0
)

require (
github.com/BurntSushi/toml v1.2.1 // indirect
github.com/DataDog/datadog-agent/comp/netflow/payload v0.56.0-rc.3 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/aws/aws-sdk-go-v2/service/ecr v1.30.1 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/distribution/reference v0.5.0 // indirect
github.com/felixge/httpsnoop v1.0.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/pulumi/pulumi-docker/sdk/v4 v4.5.1 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 // indirect
go.opentelemetry.io/otel v1.28.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 // indirect
go.opentelemetry.io/otel/metric v1.28.0 // indirect
go.opentelemetry.io/otel/sdk v1.28.0 // indirect
go.opentelemetry.io/otel/trace v1.28.0 // indirect
)
16 changes: 11 additions & 5 deletions test/new-e2e/pkg/utils/e2e/client/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/docker/docker/pkg/stdcopy"
"github.com/stretchr/testify/require"

"github.com/DataDog/datadog-agent/pkg/util/scrubber"
"github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner"
"github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner/parameters"
)
Expand All @@ -28,8 +29,9 @@ import (
//
// [docker.Deamon]: https://pkg.go.dev/github.com/DataDog/test-infra-definitions@main/components/datadog/agent/docker#Deamon
type Docker struct {
t *testing.T
client *client.Client
t *testing.T
client *client.Client
scrubber *scrubber.Scrubber
}

// NewDocker creates a new instance of Docker
Expand Down Expand Up @@ -63,8 +65,9 @@ func NewDocker(t *testing.T, dockerOutput docker.ManagerOutput) (*Docker, error)
}

return &Docker{
t: t,
client: client,
t: t,
client: client,
scrubber: scrubber.NewWithDefaults(),
}, nil
}

Expand All @@ -86,8 +89,11 @@ func (docker *Docker) ExecuteCommandWithErr(containerName string, commands ...st

// ExecuteCommandStdoutStdErr executes a command on containerName and returns the output, the error output and an error.
func (docker *Docker) ExecuteCommandStdoutStdErr(containerName string, commands ...string) (stdout string, stderr string, err error) {
context := context.Background()
cmd := strings.Join(commands, " ")
scrubbedCommand := docker.scrubber.ScrubLine(cmd) // scrub the command in case it contains secrets
docker.t.Logf("Executing command `%s`", scrubbedCommand)

context := context.Background()
execConfig := types.ExecConfig{Cmd: commands, AttachStderr: true, AttachStdout: true}
execCreateResp, err := docker.client.ContainerExecCreate(context, containerName, execConfig)
require.NoError(docker.t, err)
Expand Down
6 changes: 5 additions & 1 deletion test/new-e2e/pkg/utils/e2e/client/host.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/stretchr/testify/require"
"golang.org/x/crypto/ssh"

"github.com/DataDog/datadog-agent/pkg/util/scrubber"
"github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e"
"github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner"
"github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner/parameters"
Expand Down Expand Up @@ -57,6 +58,7 @@ type Host struct {
osFamily oscomp.Family
// as per the documentation of http.Transport: "Transports should be reused instead of created as needed."
httpTransport *http.Transport
scrubber *scrubber.Scrubber
}

// NewHost creates a new ssh client to connect to a remote host with
Expand Down Expand Up @@ -89,6 +91,7 @@ func NewHost(context e2e.Context, hostOutput remote.HostOutput) (*Host, error) {
buildCommand: buildCommandFactory(hostOutput.OSFamily),
convertPathSeparator: convertPathSeparatorFactory(hostOutput.OSFamily),
osFamily: hostOutput.OSFamily,
scrubber: scrubber.NewWithDefaults(),
}

host.httpTransport = host.newHTTPTransport()
Expand Down Expand Up @@ -124,7 +127,8 @@ func (h *Host) Execute(command string, options ...ExecuteOption) (string, error)
}

func (h *Host) executeAndReconnectOnError(command string) (string, error) {
h.context.T().Logf("Executing command...") // don't print the command in case it contains secrets
scrubbedCommand := h.scrubber.ScrubLine(command) // scrub the command in case it contains secrets
h.context.T().Logf("Executing command `%s`", scrubbedCommand)
stdout, err := execute(h.client, command)
if err != nil && strings.Contains(err.Error(), "failed to create session:") {
err = h.Reconnect()
Expand Down

0 comments on commit 1eba586

Please sign in to comment.