Skip to content

Commit

Permalink
Add NodeLabelsAsTags and NamespaceLabelsAsTags, remove default Pod en…
Browse files Browse the repository at this point in the history
…v vars (#471)

Remove POD_X_AS_TAGS as no longer defaulting to {}

Test cases for various metadata as tags configs

Move the xyzAsTags to the common set of environment variables

Revert "Move the xyzAsTags to the common set of environment variables"

This reverts commit 11a8cfa.

Update tests to use NodeAgentConfig/EnvVar rather than generics

Add port names to agent service (#468)

Update default DCA image to 1.19.0 (#470)

Share common structs in common/v1 and adds missing fields to v2alpha1 (#438)

fix: k8s version detection for agent service (#472)

Rename Test_getEnvVarsForMetadataAsTags function

Co-authored-by: Celene Chang <celene@datadoghq.com>
  • Loading branch information
JacksonDavenport and celenechang committed Apr 27, 2022
1 parent 43e558c commit 7bdd616
Show file tree
Hide file tree
Showing 11 changed files with 249 additions and 55 deletions.
2 changes: 2 additions & 0 deletions apis/datadoghq/v1alpha1/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ const (
DDddURL = "DD_DD_URL"
DDHealthPort = "DD_HEALTH_PORT"
DDLogLevel = "DD_LOG_LEVEL"
DDNamespaceLabelsAsTags = "DD_KUBERNETES_NAMESPACE_LABELS_AS_TAGS"
DDNodeLabelsAsTags = "DD_KUBERNETES_NODE_LABELS_AS_TAGS"
DDPodLabelsAsTags = "DD_KUBERNETES_POD_LABELS_AS_TAGS"
DDPodAnnotationsAsTags = "DD_KUBERNETES_POD_ANNOTATIONS_AS_TAGS"
DDTags = "DD_TAGS"
Expand Down
8 changes: 0 additions & 8 deletions apis/datadoghq/v1alpha1/datadogagent_default.go
Original file line number Diff line number Diff line change
Expand Up @@ -402,14 +402,6 @@ func DefaultDatadogAgentSpecAgentConfig(agent *DatadogAgentSpecAgentSpec) *NodeA
agent.Config.Resources = &corev1.ResourceRequirements{}
}

if agent.Config.PodLabelsAsTags == nil {
agent.Config.PodLabelsAsTags = map[string]string{}
}

if agent.Config.PodAnnotationsAsTags == nil {
agent.Config.PodAnnotationsAsTags = map[string]string{}
}

if agent.Config.Tags == nil {
agent.Config.Tags = []string{}
}
Expand Down
14 changes: 12 additions & 2 deletions apis/datadoghq/v1alpha1/datadogagent_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -768,12 +768,22 @@ type NodeAgentConfig struct {
// +optional
Checksd *ConfigDirSpec `json:"checksd,omitempty"`

// Provide a mapping of Kubernetes Labels to Datadog Tags.
// Provide a mapping of Kubernetes Namespace Labels to Datadog Tags.
// <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>
// +optional
NamespaceLabelsAsTags map[string]string `json:"namespaceLabelsAsTags,omitempty"`

// Provide a mapping of Kubernetes Node Labels to Datadog Tags.
// <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>
// +optional
NodeLabelsAsTags map[string]string `json:"nodeLabelsAsTags,omitempty"`

// Provide a mapping of Kubernetes Pod Labels to Datadog Tags.
// <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>
// +optional
PodLabelsAsTags map[string]string `json:"podLabelsAsTags,omitempty"`

// Provide a mapping of Kubernetes Annotations to Datadog Tags.
// Provide a mapping of Kubernetes Pod Annotations to Datadog Tags.
// <KUBERNETES_ANNOTATIONS>: <DATADOG_TAG_KEY>
// +optional
PodAnnotationsAsTags map[string]string `json:"podAnnotationsAsTags,omitempty"`
Expand Down
14 changes: 14 additions & 0 deletions apis/datadoghq/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 34 additions & 2 deletions apis/datadoghq/v1alpha1/zz_generated.openapi.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 15 additions & 3 deletions config/crd/bases/v1/datadoghq.com_datadogagents.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1851,17 +1851,29 @@ spec:
description: 'Set logging verbosity, valid log levels are:
trace, debug, info, warn, error, critical, and off'
type: string
namespaceLabelsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Namespace Labels
to Datadog Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
type: object
nodeLabelsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Node Labels
to Datadog Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
type: object
podAnnotationsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Annotations
description: 'Provide a mapping of Kubernetes Pod Annotations
to Datadog Tags. <KUBERNETES_ANNOTATIONS>: <DATADOG_TAG_KEY>'
type: object
podLabelsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Labels to Datadog
Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
description: 'Provide a mapping of Kubernetes Pod Labels to
Datadog Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
type: object
readinessProbe:
description: Configure the Readiness Probe of the Agent container
Expand Down
36 changes: 30 additions & 6 deletions config/crd/bases/v1beta1/datadoghq.com_datadogagents.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1855,17 +1855,29 @@ spec:
description: 'Set logging verbosity, valid log levels are:
trace, debug, info, warn, error, critical, and off'
type: string
namespaceLabelsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Namespace Labels
to Datadog Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
type: object
nodeLabelsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Node Labels
to Datadog Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
type: object
podAnnotationsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Annotations
description: 'Provide a mapping of Kubernetes Pod Annotations
to Datadog Tags. <KUBERNETES_ANNOTATIONS>: <DATADOG_TAG_KEY>'
type: object
podLabelsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Labels to Datadog
Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
description: 'Provide a mapping of Kubernetes Pod Labels to
Datadog Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
type: object
readinessProbe:
description: Configure the Readiness Probe of the Agent container
Expand Down Expand Up @@ -14128,17 +14140,29 @@ spec:
are: trace, debug, info, warn, error, critical, and
off'
type: string
namespaceLabelsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Namespace
Labels to Datadog Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
type: object
nodeLabelsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Node Labels
to Datadog Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
type: object
podAnnotationsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Annotations
description: 'Provide a mapping of Kubernetes Pod Annotations
to Datadog Tags. <KUBERNETES_ANNOTATIONS>: <DATADOG_TAG_KEY>'
type: object
podLabelsAsTags:
additionalProperties:
type: string
description: 'Provide a mapping of Kubernetes Labels to
Datadog Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
description: 'Provide a mapping of Kubernetes Pod Labels
to Datadog Tags. <KUBERNETES_LABEL>: <DATADOG_TAG_KEY>'
type: object
readinessProbe:
description: Configure the Readiness Probe of the Agent
Expand Down
16 changes: 0 additions & 16 deletions controllers/datadogagent/agent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -824,14 +824,6 @@ func defaultEnvVars(extraEnv map[string]string) []corev1.EnvVar {
Name: "DD_HEALTH_PORT",
Value: "5555",
},
{
Name: "DD_KUBERNETES_POD_LABELS_AS_TAGS",
Value: "{}",
},
{
Name: "DD_KUBERNETES_POD_ANNOTATIONS_AS_TAGS",
Value: "{}",
},
{
Name: "DD_COLLECT_KUBERNETES_EVENTS",
Value: "false",
Expand Down Expand Up @@ -1886,14 +1878,6 @@ func customKubeletConfigPodSpec(kubeletConfig *commonv1.KubeletConfig) corev1.Po
Name: "DD_HEALTH_PORT",
Value: "5555",
},
{
Name: "DD_KUBERNETES_POD_LABELS_AS_TAGS",
Value: "{}",
},
{
Name: "DD_KUBERNETES_POD_ANNOTATIONS_AS_TAGS",
Value: "{}",
},
{
Name: "DD_COLLECT_KUBERNETES_EVENTS",
Value: "false",
Expand Down
73 changes: 57 additions & 16 deletions controllers/datadogagent/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -804,34 +804,70 @@ func getEnvVarsForLogCollection(logSpec *datadoghqv1alpha1.LogCollectionConfig)
return envVars
}

// getEnvVarsForMetadataAsTags gathers the various labels, annotations, namespaces, ...AsTags NodeAgentConfigs
// and converts into the respective environment variables
func getEnvVarsForMetadataAsTags(agentConfig *datadoghqv1alpha1.NodeAgentConfig) ([]corev1.EnvVar, error) {
envVars := []corev1.EnvVar{}

if agentConfig.NodeLabelsAsTags != nil {
nodeLabelsAsTags, err := json.Marshal(agentConfig.NodeLabelsAsTags)
if err != nil {
return nil, err
}
envVars = append(envVars, corev1.EnvVar{
Name: datadoghqv1alpha1.DDNodeLabelsAsTags,
Value: string(nodeLabelsAsTags),
})
}

if agentConfig.PodLabelsAsTags != nil {
podLabelsAsTags, err := json.Marshal(agentConfig.PodLabelsAsTags)
if err != nil {
return nil, err
}
envVars = append(envVars, corev1.EnvVar{
Name: datadoghqv1alpha1.DDPodLabelsAsTags,
Value: string(podLabelsAsTags),
})
}

if agentConfig.PodAnnotationsAsTags != nil {
podAnnotationsAsTags, err := json.Marshal(agentConfig.PodAnnotationsAsTags)
if err != nil {
return nil, err
}
envVars = append(envVars, corev1.EnvVar{
Name: datadoghqv1alpha1.DDPodAnnotationsAsTags,
Value: string(podAnnotationsAsTags),
})
}

if agentConfig.NamespaceLabelsAsTags != nil {
namespaceLabelsAsTags, err := json.Marshal(agentConfig.NamespaceLabelsAsTags)
if err != nil {
return nil, err
}
envVars = append(envVars, corev1.EnvVar{
Name: datadoghqv1alpha1.DDNamespaceLabelsAsTags,
Value: string(namespaceLabelsAsTags),
})
}

return envVars, nil
}

// getEnvVarsForAgent converts Agent Config into container env vars
func getEnvVarsForAgent(logger logr.Logger, dda *datadoghqv1alpha1.DatadogAgent) ([]corev1.EnvVar, error) {
spec := dda.Spec
// Marshal tag fields
var envVars []corev1.EnvVar
config := dda.Spec.Agent.Config
if config != nil {
podLabelsAsTags, err := json.Marshal(spec.Agent.Config.PodLabelsAsTags)
if err != nil {
return nil, err
}
podAnnotationsAsTags, err := json.Marshal(spec.Agent.Config.PodAnnotationsAsTags)
if err != nil {
return nil, err
}
envVars = []corev1.EnvVar{
{
Name: datadoghqv1alpha1.DDHealthPort,
Value: strconv.Itoa(int(*spec.Agent.Config.HealthPort)),
},
{
Name: datadoghqv1alpha1.DDPodLabelsAsTags,
Value: string(podLabelsAsTags),
},
{
Name: datadoghqv1alpha1.DDPodAnnotationsAsTags,
Value: string(podAnnotationsAsTags),
},
{
Name: datadoghqv1alpha1.DDCollectKubeEvents,
Value: strconv.FormatBool(*spec.Agent.Config.CollectEvents),
Expand All @@ -841,6 +877,11 @@ func getEnvVarsForAgent(logger logr.Logger, dda *datadoghqv1alpha1.DatadogAgent)
Value: strconv.FormatBool(*spec.Agent.Config.LeaderElection),
},
}
metadataAsTagsEnv, err := getEnvVarsForMetadataAsTags(spec.Agent.Config)
if err != nil {
return nil, err
}
envVars = append(envVars, metadataAsTagsEnv...)
}
envVars = append(envVars, getEnvVarsForLogCollection(spec.Features.LogCollection)...)
commonEnvVars, err := getEnvVarsCommon(dda, true)
Expand Down

0 comments on commit 7bdd616

Please sign in to comment.