Skip to content

Commit

Permalink
Fix hostport custom port settings (#1067) (#1081)
Browse files Browse the repository at this point in the history
Co-authored-by: khewonc <[email protected]>
  • Loading branch information
celenechang and khewonc authored Feb 9, 2024
1 parent a47abb5 commit 8937242
Show file tree
Hide file tree
Showing 6 changed files with 252 additions and 34 deletions.
10 changes: 6 additions & 4 deletions apis/datadoghq/v2alpha1/test/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ func (builder *DatadogAgentBuilder) WithDogstatsdHostPortEnabled(enabled bool) *

func (builder *DatadogAgentBuilder) WithDogstatsdHostPortConfig(port int32) *DatadogAgentBuilder {
builder.initDogstatsd()
builder.datadogAgent.Spec.Features.Dogstatsd.HostPortConfig.Port = apiutils.NewInt32Pointer(1234)
builder.datadogAgent.Spec.Features.Dogstatsd.HostPortConfig.Port = apiutils.NewInt32Pointer(port)
return builder
}

Expand Down Expand Up @@ -346,11 +346,13 @@ func (builder *DatadogAgentBuilder) WithAPMEnabled(enabled bool) *DatadogAgentBu
return builder
}

func (builder *DatadogAgentBuilder) WithAPMHostPortEnabled(enabled bool, port int32) *DatadogAgentBuilder {
func (builder *DatadogAgentBuilder) WithAPMHostPortEnabled(enabled bool, port *int32) *DatadogAgentBuilder {
builder.initAPM()
builder.datadogAgent.Spec.Features.APM.HostPortConfig = &v2alpha1.HostPortConfig{
Enabled: apiutils.NewBoolPointer(enabled),
Port: apiutils.NewInt32Pointer(port),
}
if port != nil {
builder.datadogAgent.Spec.Features.APM.HostPortConfig.Port = port
}
return builder
}
Expand Down Expand Up @@ -500,6 +502,6 @@ func (builder *DatadogAgentBuilder) WithComponentOverride(componentName v2alpha1
builder.datadogAgent.Spec.Override = map[v2alpha1.ComponentName]*v2alpha1.DatadogAgentComponentOverride{}
}

builder.datadogAgent.Spec.Override[componentName] = &v2alpha1.DatadogAgentComponentOverride{}
builder.datadogAgent.Spec.Override[componentName] = &override
return builder
}
10 changes: 6 additions & 4 deletions controllers/datadogagent/feature/apm/feature.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,18 +261,20 @@ func (f *apmFeature) manageNodeAgent(agentContainerName apicommonv1.AgentContain
}
if f.hostPortEnabled {
apmPort.HostPort = f.hostPortHostPort
receiverPortEnvVarValue := apicommon.DefaultApmPort
// if using host network, host port should be set and needs to match container port
if f.useHostNetwork {
apmPort.ContainerPort = f.hostPortHostPort
receiverPortEnvVarValue = int(f.hostPortHostPort)
}
managers.EnvVar().AddEnvVarToContainer(agentContainerName, &corev1.EnvVar{
Name: apicommon.DDAPMReceiverPort,
Value: strconv.FormatInt(int64(f.hostPortHostPort), 10),
})
managers.EnvVar().AddEnvVarToContainer(agentContainerName, &corev1.EnvVar{
Name: apicommon.DDAPMNonLocalTraffic,
Value: "true",
})
managers.EnvVar().AddEnvVarToContainer(agentContainerName, &corev1.EnvVar{
Name: apicommon.DDAPMReceiverPort,
Value: strconv.Itoa(receiverPortEnvVarValue),
})
}
managers.Port().AddPortToContainer(agentContainerName, apmPort)

Expand Down
140 changes: 121 additions & 19 deletions controllers/datadogagent/feature/apm/feature_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
package apm

import (
"strconv"
"testing"

apicommon "github.com/DataDog/datadog-operator/apis/datadoghq/common"
apicommonv1 "github.com/DataDog/datadog-operator/apis/datadoghq/common/v1"
"github.com/DataDog/datadog-operator/apis/datadoghq/v1alpha1"
"github.com/DataDog/datadog-operator/apis/datadoghq/v2alpha1"
v2alpha1test "github.com/DataDog/datadog-operator/apis/datadoghq/v2alpha1/test"
apiutils "github.com/DataDog/datadog-operator/apis/utils"
"github.com/DataDog/datadog-operator/controllers/datadogagent/feature"
Expand Down Expand Up @@ -47,7 +49,7 @@ func TestAPMFeature(t *testing.T) {
Name: "v1alpha1 apm enabled, use uds and hostport",
DDAv1: newV1Agent(true, true),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.TraceAgentContainerName),
Agent: testAgentHostPortUDS(apicommonv1.TraceAgentContainerName, 8126, false),
},

//////////////////////////
Expand All @@ -72,7 +74,7 @@ func TestAPMFeature(t *testing.T) {
Name: "v2alpha1 apm enabled, use uds",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(false, 8126).
WithAPMHostPortEnabled(false, apiutils.NewInt32Pointer(8126)).
WithAPMUDSEnabled(true, apmSocketHostPath).
Build(),
WantConfigure: true,
Expand All @@ -82,7 +84,7 @@ func TestAPMFeature(t *testing.T) {
Name: "v2alpha1 apm enabled, use uds with single container strategy",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(false, 8126).
WithAPMHostPortEnabled(false, apiutils.NewInt32Pointer(8126)).
WithAPMUDSEnabled(true, apmSocketHostPath).
WithSingleContainerStrategy(true).
Build(),
Expand All @@ -93,22 +95,114 @@ func TestAPMFeature(t *testing.T) {
Name: "v2alpha1 apm enabled, use uds and host port",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(true, 8126).
WithAPMHostPortEnabled(true, apiutils.NewInt32Pointer(8126)).
WithAPMUDSEnabled(true, apmSocketHostPath).
Build(),
BuildWithDefaults(),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.TraceAgentContainerName),
Agent: testAgentHostPortUDS(apicommonv1.TraceAgentContainerName, 8126, false),
},
{
Name: "v2alpha1 apm enabled, use uds and host port with single container strategy",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(true, 8126).
WithAPMHostPortEnabled(true, apiutils.NewInt32Pointer(8126)).
WithAPMUDSEnabled(true, apmSocketHostPath).
WithSingleContainerStrategy(true).
Build(),
BuildWithDefaults(),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.UnprivilegedSingleAgentContainerName, 8126, false),
},
{
Name: "v2alpha1 apm enabled, use uds and custom host port",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(true, apiutils.NewInt32Pointer(1234)).
WithAPMUDSEnabled(true, apmSocketHostPath).
BuildWithDefaults(),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.TraceAgentContainerName, 1234, false),
},
{
Name: "v2alpha1 apm enabled, use uds and custom host port with single container strategy",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(true, apiutils.NewInt32Pointer(1234)).
WithAPMUDSEnabled(true, apmSocketHostPath).
WithSingleContainerStrategy(true).
BuildWithDefaults(),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.UnprivilegedSingleAgentContainerName),
Agent: testAgentHostPortUDS(apicommonv1.UnprivilegedSingleAgentContainerName, 1234, false),
},
{
Name: "v2alpha1 apm enabled, use uds and host port enabled but no custom host port",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(true, nil).
WithAPMUDSEnabled(true, apmSocketHostPath).
BuildWithDefaults(),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.TraceAgentContainerName, 8126, false),
},
{
Name: "v2alpha1 apm enabled, use uds and host port enabled but no custom host port with single container strategy",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(true, nil).
WithAPMUDSEnabled(true, apmSocketHostPath).
WithSingleContainerStrategy(true).
BuildWithDefaults(),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.UnprivilegedSingleAgentContainerName, 8126, false),
},
{
Name: "v2alpha1 apm enabled, host port enabled host network",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(true, nil).
WithComponentOverride(v2alpha1.NodeAgentComponentName, v2alpha1.DatadogAgentComponentOverride{
HostNetwork: apiutils.NewBoolPointer(true),
}).
BuildWithDefaults(),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.TraceAgentContainerName, 8126, true),
},
{
Name: "v2alpha1 apm enabled, host port enabled host network with single container strategy",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(true, nil).
WithComponentOverride(v2alpha1.NodeAgentComponentName, v2alpha1.DatadogAgentComponentOverride{
HostNetwork: apiutils.NewBoolPointer(true),
}).
WithSingleContainerStrategy(true).
BuildWithDefaults(),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.UnprivilegedSingleAgentContainerName, 8126, true),
},
{
Name: "v2alpha1 apm enabled, custom host port host network",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(true, apiutils.NewInt32Pointer(1234)).
WithComponentOverride(v2alpha1.NodeAgentComponentName, v2alpha1.DatadogAgentComponentOverride{
HostNetwork: apiutils.NewBoolPointer(true),
}).
BuildWithDefaults(),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.TraceAgentContainerName, 1234, true),
},
{
Name: "v2alpha1 apm enabled, custom host port host network with single container strategy",
DDAv2: v2alpha1test.NewDatadogAgentBuilder().
WithAPMEnabled(true).
WithAPMHostPortEnabled(true, apiutils.NewInt32Pointer(1234)).
WithComponentOverride(v2alpha1.NodeAgentComponentName, v2alpha1.DatadogAgentComponentOverride{
HostNetwork: apiutils.NewBoolPointer(true),
}).
WithSingleContainerStrategy(true).
BuildWithDefaults(),
WantConfigure: true,
Agent: testAgentHostPortUDS(apicommonv1.UnprivilegedSingleAgentContainerName, 1234, true),
},
}

Expand Down Expand Up @@ -143,14 +237,14 @@ func testAgentHostPortOnly() *test.ComponentTest {
Name: apicommon.DDAPMEnabled,
Value: "true",
},
{
Name: apicommon.DDAPMReceiverPort,
Value: "8126",
},
{
Name: apicommon.DDAPMNonLocalTraffic,
Value: "true",
},
{
Name: apicommon.DDAPMReceiverPort,
Value: "8126",
},
}
assert.True(
t,
Expand Down Expand Up @@ -248,25 +342,30 @@ func testAgentUDSOnly(agentContainerName apicommonv1.AgentContainerName) *test.C
)
}

func testAgentHostPortUDS(agentContainerName apicommonv1.AgentContainerName) *test.ComponentTest {
func testAgentHostPortUDS(agentContainerName apicommonv1.AgentContainerName, hostPort int32, hostNetwork bool) *test.ComponentTest {
return test.NewDefaultComponentTest().WithWantFunc(
func(t testing.TB, mgrInterface feature.PodTemplateManagers) {
mgr := mgrInterface.(*fake.PodTemplateManagers)

receiverPortValue := int32(8126)
if hostNetwork {
receiverPortValue = hostPort
}

agentEnvs := mgr.EnvVarMgr.EnvVarsByC[agentContainerName]
expectedAgentEnvs := []*corev1.EnvVar{
{
Name: apicommon.DDAPMEnabled,
Value: "true",
},
{
Name: apicommon.DDAPMReceiverPort,
Value: "8126",
},
{
Name: apicommon.DDAPMNonLocalTraffic,
Value: "true",
},
{
Name: apicommon.DDAPMReceiverPort,
Value: strconv.Itoa(int(receiverPortValue)),
},
{
Name: apicommon.DDAPMReceiverSocket,
Value: apmSocketLocalPath,
Expand Down Expand Up @@ -316,10 +415,13 @@ func testAgentHostPortUDS(agentContainerName apicommonv1.AgentContainerName) *te
{
Name: "traceport",
ContainerPort: 8126,
HostPort: 8126,
HostPort: hostPort,
Protocol: corev1.ProtocolTCP,
},
}
if hostNetwork {
expectedPorts[0].ContainerPort = hostPort
}
assert.True(
t,
apiutils.IsEqualStruct(agentPorts, expectedPorts),
Expand Down
12 changes: 7 additions & 5 deletions controllers/datadogagent/feature/dogstatsd/feature.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,18 +196,20 @@ func (f *dogstatsdFeature) manageNodeAgent(agentContainerName apicommonv1.AgentC
if f.hostPortEnabled {
// f.hostPortHostPort will be 0 if HostPort is not set in v1alpha1
// f.hostPortHostPort will default to 8125 in v2alpha1
dsdPortEnvVarValue := apicommon.DefaultDogstatsdPort
if f.hostPortHostPort != 0 {
dogstatsdPort.HostPort = f.hostPortHostPort
// if using host network, host port should be set and needs to match container port
if f.useHostNetwork {
dogstatsdPort.ContainerPort = f.hostPortHostPort
dsdPortEnvVarValue = int(f.hostPortHostPort)
}
managers.EnvVar().AddEnvVarToContainer(agentContainerName, &corev1.EnvVar{
// defaults to 8125 in datadog-agent code
Name: apicommon.DDDogstatsdPort,
Value: strconv.FormatInt(int64(f.hostPortHostPort), 10),
})
}
managers.EnvVar().AddEnvVarToContainer(agentContainerName, &corev1.EnvVar{
// defaults to 8125 in datadog-agent code
Name: apicommon.DDDogstatsdPort,
Value: strconv.Itoa(dsdPortEnvVarValue),
})
managers.EnvVar().AddEnvVarToContainer(agentContainerName, &corev1.EnvVar{
Name: apicommon.DDDogstatsdNonLocalTraffic,
Value: "true",
Expand Down
Loading

0 comments on commit 8937242

Please sign in to comment.