Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CONTP-402] Store config values in config webhook struct #30001

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 26 additions & 13 deletions pkg/clusteragent/admission/mutate/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,18 @@ type Webhook struct {
endpoint string
resources []string
operations []admissionregistrationv1.OperationType
mode string
wmeta workloadmeta.Component
injectionFilter mutatecommon.InjectionFilter
datadogConfig config.Component

// These fields store datadog agent config parameters
// to avoid calling the config resolution each time the webhook
// receives requests because the resolution is CPU expensive.
mode string
localServiceName string
traceAgentSocket string
dogStatsDSocket string
socketPath string
typeSocketVolumes bool
}

// NewWebhook returns a new Webhook
Expand All @@ -84,10 +92,15 @@ func NewWebhook(wmeta workloadmeta.Component, injectionFilter mutatecommon.Injec
endpoint: datadogConfig.GetString("admission_controller.inject_config.endpoint"),
resources: []string{"pods"},
operations: []admissionregistrationv1.OperationType{admissionregistrationv1.Create},
mode: datadogConfig.GetString("admission_controller.inject_config.mode"),
wmeta: wmeta,
injectionFilter: injectionFilter,
datadogConfig: datadogConfig,

mode: datadogConfig.GetString("admission_controller.inject_config.mode"),
localServiceName: datadogConfig.GetString("admission_controller.inject_config.local_service_name"),
traceAgentSocket: datadogConfig.GetString("admission_controller.inject_config.trace_agent_socket"),
dogStatsDSocket: datadogConfig.GetString("admission_controller.inject_config.dogstatsd_socket"),
socketPath: datadogConfig.GetString("admission_controller.inject_config.socket_path"),
typeSocketVolumes: datadogConfig.GetBool("admission_controller.inject_config.type_socket_volumes"),
}
}

Expand Down Expand Up @@ -155,7 +168,7 @@ func (w *Webhook) inject(pod *corev1.Pod, _ string, _ dynamic.Interface) (bool,

agentHostServiceEnvVar = corev1.EnvVar{
Name: agentHostEnvVarName,
Value: w.datadogConfig.GetString("admission_controller.inject_config.local_service_name") + "." + apiCommon.GetMyNamespace() + ".svc.cluster.local",
Value: w.localServiceName + "." + apiCommon.GetMyNamespace() + ".svc.cluster.local",
}

defaultDdEntityIDEnvVar = corev1.EnvVar{
Expand All @@ -170,12 +183,12 @@ func (w *Webhook) inject(pod *corev1.Pod, _ string, _ dynamic.Interface) (bool,

traceURLSocketEnvVar = corev1.EnvVar{
Name: traceURLEnvVarName,
Value: w.datadogConfig.GetString("admission_controller.inject_config.trace_agent_socket"),
Value: w.traceAgentSocket,
}

dogstatsdURLSocketEnvVar = corev1.EnvVar{
Name: dogstatsdURLEnvVarName,
Value: w.datadogConfig.GetString("admission_controller.inject_config.dogstatsd_socket"),
Value: w.dogStatsDSocket,
}
)

Expand All @@ -194,7 +207,7 @@ func (w *Webhook) inject(pod *corev1.Pod, _ string, _ dynamic.Interface) (bool,
case service:
injectedConfig = mutatecommon.InjectEnv(pod, agentHostServiceEnvVar)
case socket:
injectedVolumes := injectSocketVolumes(pod, w.datadogConfig)
injectedVolumes := w.injectSocketVolumes(pod)
injectedEnv := mutatecommon.InjectEnv(pod, traceURLSocketEnvVar)
injectedEnv = mutatecommon.InjectEnv(pod, dogstatsdURLSocketEnvVar) || injectedEnv
injectedConfig = injectedVolumes || injectedEnv
Expand Down Expand Up @@ -283,16 +296,16 @@ func buildVolume(volumeName, path string, hostpathType corev1.HostPathType, read
// wait if the agent has issues that prevent it from creating the sockets.
//
// This function returns true if at least one volume was injected.
func injectSocketVolumes(pod *corev1.Pod, datadogConfig config.Component) bool {
func (w *Webhook) injectSocketVolumes(pod *corev1.Pod) bool {
var injectedVolNames []string

if datadogConfig.GetBool("admission_controller.inject_config.type_socket_volumes") {
if w.typeSocketVolumes {
volumes := map[string]string{
DogstatsdSocketVolumeName: strings.TrimPrefix(
datadogConfig.GetString("admission_controller.inject_config.dogstatsd_socket"), "unix://",
w.dogStatsDSocket, "unix://",
),
TraceAgentSocketVolumeName: strings.TrimPrefix(
datadogConfig.GetString("admission_controller.inject_config.trace_agent_socket"), "unix://",
w.traceAgentSocket, "unix://",
),
}

Expand All @@ -306,7 +319,7 @@ func injectSocketVolumes(pod *corev1.Pod, datadogConfig config.Component) bool {
} else {
volume, volumeMount := buildVolume(
DatadogVolumeName,
datadogConfig.GetString("admission_controller.inject_config.socket_path"),
w.socketPath,
corev1.HostPathDirectoryOrCreate,
true,
)
Expand Down
Loading