Skip to content

Commit

Permalink
[introspection][profiles][CECO-851] Refactor introspection (#1086)
Browse files Browse the repository at this point in the history
* Add profiles base (#966)

* Add profiles base

* Fix ci + apply renames in crd

* Add profile sample manifest (#974)

* First version to support Agent profiles (#976)

* [override/daemonset] Apply only if it's not empty

* [config/rbac/role] Add profiles

* Add basic version of profiles manager

* [controllers/datadogagent] Create DaemonSets according to profiles

* [override/container] Don't override resource if not specified

* [agentprofile] Add support for overrides in all node agent containers

* [agentprofile] Take into account namespace when setting DS name

* [profiles] Add label to DaemonSets (#1000)

* [profiles] Add integration tests (#992)

* [datadogagent_controller_v2_test] Make create/delete funcs more generic

* Add integration tests for agent profiles

* [profiles] Handle conflicts between profiles (#999)

* Profile manifest validation (#973)

* Add profile validation

* At least one container resource must be defined

* Remove redundant assert and update boilerplate text

* [profiles] Create default profile with a node anti affinity (#1002)

* [profiles] Add support for profiles with multiple affinity requirements

* [profiles] Cleanup integration tests

* [datadogagent/finalizer] Delete profile labels

Also fixes the finalizer handle so that it no longer ignores errors.

* [override/podtemplatespec] Merge affinities (#1004)

* [profiles] Add pod-antiaffinity to agent pods (#1003)

This avoids scheduling multiple agent pods of different profiles on the same
node during rollouts.

* Validate dap (#1028)

* [profiles] Add support for EDS (#1032)

* Add node informer and Node store (#1025)

* add node informer

* add nodestore tests and update existing profiles tests

* refactor profile store

* update tests

* update func name

* cleanup

* apply review suggestions

* apply review suggestions

* tests need fixing

* Simplify nodestore

* Review suggestions

---------

Co-authored-by: khewonc <39867936+khewonc@users.noreply.github.com>

* [profiles] Fix Watches call for Profiles (#1043)

* [profiles] Fix container resources override with 0 (#1054)

* Bump k8s dependencies to 0.24.x (#1064)

* Bump k8s dependencies

These should have been updated when operator-sdk was updated to 1.23.0 according to the docs:
https://sdk.operatorframework.io/docs/upgrading-sdk-version/v1.23.0/

* Run "make manifests"

* Update licenses

* [profiles] Reduce mem usage in pods cleanup (#1065)

* [profiles] Replace custom node cache with k8s client one (#1070)

* [profiles] Replace custom node cache with k8s client one

* [profiles/test] Use random node names to avoid conflicts between tests

* [profiles/test] Use Eventually() when checking node labels

* [profiles/test] Comment node labels part for now

* Change node labels to use dap ns-name format (#1071)

* [profiles] Merge main and fix issues from test (#1078)

* [defaulting/images] Set default version of agent and cluster agent to `7.49.0` (#968)

* Allow enabling SBOM collection for host and container images (#836)

* Allow enabling SBOM collection for host and container images

* small fixes and add test

* actually add test

* address comments

---------

Co-authored-by: Celene <celene@datadoghq.com>

* Bump go-grpc to 1.56.3 (#970)

* Remove SecurityContextConstraints parameter and references (#977)

* remove references to scc creation

* rm commented tests

* rm unused functions

* Add GCR EU and Asia registries with auto defaulting (#978)

* update examples for v2 datadogagent (#980)

* Update default Agent/DCA version to 7.49.1 (#984)

7.49.1 has just been released. it would be great to have it in Operator 1.3.0

* Enable by default container-image collection (#983)

We want to enabled container-image collection by default. it will
be the case from agent 7.50.0. But in Operator 1.3.0, the Agent is
defaulted to 7.49.0 since 7.50.0 is not yet released.

This commit set the envvar DD_CONTAINER_IMAGE_ENABLED=true by default
in the NodeAgent's "agent" container.

* [Docs] OpenShift docs update (#991)

* OpenShift docs update
* Resize and crop image

* Update integrations_autodiscovery.md (#985)

* Update integrations_autodiscovery.md

Noticed a mismatched https://a.cl.ly/qGuYnRqn

* Update integrations_autodiscovery.md

Updated the configuration to match the graph title "Use the spec.override.nodeAgent.extraConfd.configDataMap" -> "Use the spec.override.clusterAgent.extraConfd.configDataMap"
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
 global:
   credentials:
     apiKey: "<DATADOG_API_KEY>"
     appKey: "<DATADOG_APP_KEY>"
 override:
  nodeAgent:
    extraConfd:
      configDataMap:
        http_check.yaml: |-
          init_config:
          instances:
            - url: "http://%%host%%"
              name: "My service"

* update patch-bundle script to include spec.replaces field in bundle (#990)

* Support `CanaryAutoPauseMaxSlowStartDuration` option (#997)

* Add support for max slow start duration config param

* Update max slow start arg name to include auto pause

* fixup! Update max slow start arg name to include auto pause

* update datadog-api-client-go (#986)

* update datadog-api-client-go

* update license

* add dependabot.yaml file (#989)

* Update boilerplate text (#1005)

* Enabling APM by default (#1006)

* feat: add NotificationPresetName to monitor options (#1001)

* feat: add NotificationPresetName to monitor options

In datadog, we have the possibility to toggle the "Content display in notification" for every monitor. This PR enables this.

More info in https://docs.datadoghq.com/monitors/notify/#toggle-additional-content

* pr review

Co-authored-by: Celene <celene@datadoghq.com>

* Update datadogmonitor_types.go

Co-authored-by: Celene <celene@datadoghq.com>

* Update datadogmonitor_types.go

Co-authored-by: Celene <celene@datadoghq.com>

* Update datadogmonitor_types.go

Co-authored-by: Celene <celene@datadoghq.com>

* update generated files

---------

Co-authored-by: Celene <celene@datadoghq.com>

* [APMON-406] Set Datadog namespace env variable on Cluster Agent (#1012)

* [APMON-406] Set env variable for the Datadog resources namespace

* DCA namespace resources env var added for V2

---------

Co-authored-by: julia-elsammak <julia.elsammak@datadoghq.com>
Co-authored-by: Julia-elsammak <109159652+Julia-elsammak@users.noreply.github.com>

* Add `createdAd`, `support` fields to bundle CSV file (#1018)

* Add createAd, support fields to bundle CSV file

* Update hack/patch-bundle.sh

Co-authored-by: Celene <celene@datadoghq.com>

* Update hack/patch-bundle.sh

Co-authored-by: Celene <celene@datadoghq.com>

---------

Co-authored-by: Celene <celene@datadoghq.com>

* update feature default values and tests (#1015)

* Provide default probe handler httpGet values if not configured in override (#998)

* Provide default readinessProbe.httpGet if not configured

* apply review suggestions

* Update bundles to match 1.3.0 release (#1019)

* Fix patch_bundle.sh `spec.replaces` formatting (#1026)

* [defaulting/images] Update agents to 7.50.1 (#1029)

* ContainerProcessStrategy, allow running non-privileged agents in one container (#921)

* Add mono-container config to CRD

* mono-container support implementation

* livecontainer feature unit test and factory fix

* cluster checks feature test; change in CC feature

* ksm feature test; change in the feature

* APM feature test

* OTLP feature test; feature change

* add ManageMonoContainerNodeAgent to ebpfcheck feature

* add ManageMonoContainerNodeAgent to process discovery feature

* Basic global_test.go test, minor refactor

* feature factory test

* Refactor tests to reduce direct use of mono-container CRD

* Change CRD and container name

* Rename ManageMonoContainerNodeAgent -> ManageMultiProcessNodeAgent

* Updates after merge; doc update

* refactor around ApplyGlobalSettings

* drop 'mono' from naming, comments

* Update tests with trace agent enabled by default now

* Update apis/datadoghq/v2alpha1/datadogagent_types.go

Co-authored-by: Celene <celene@datadoghq.com>

* Update apis/datadoghq/v2alpha1/datadogagent_types.go

Co-authored-by: Celene <celene@datadoghq.com>

* Update apis/datadoghq/v2alpha1/datadogagent_types.go

Co-authored-by: Celene <celene@datadoghq.com>

* Update apis/datadoghq/v2alpha1/datadogagent_types.go

Co-authored-by: Celene <celene@datadoghq.com>

* Update controllers/datadogagent/feature/admissioncontroller/feature.go

Co-authored-by: Celene <celene@datadoghq.com>

* Update controllers/datadogagent/feature/factory.go

Co-authored-by: Celene <celene@datadoghq.com>

* updates on PR feedback

* updates on PR feedback

* Update apis/datadoghq/v2alpha1/test/builder.go

Co-authored-by: Celene <celene@datadoghq.com>

* rename UsesMultiProcessContainer

* Update apis/datadoghq/v2alpha1/datadogagent_types.go

Co-authored-by: Charly Fontaine <charly@datadoghq.com>

* PR feedback updates

---------

Co-authored-by: Celene <celene@datadoghq.com>
Co-authored-by: Charly Fontaine <charly@datadoghq.com>

* [defaulting/images] Update agents to 7.50.2 (#1033)

* [Onboarding telemetry] Set install id, install time and install type env variables (#1034)

* [Onboarding telemetry] Set install id, install time and install type env variables

* Add APM prefix to env variables

* [CECO-570] Add operator introspection (#817)

* Add operator introspection

* [defaulting/images] Update agents to 7.50.3 (#1038)

* [gitlab] Add nightly operator and operator_check jobs (#1039)

* add gitlab job to release nightly image

* update non-privileged to unprivileged (#1040)

* Change gcp to gke (#1046)

* Mount host files for proper os detection in SBOMs (#1044)

* [gitlab] auto push nightly image (#1048)

* [introspection] Fix override name combining (#1049)

* Fix override name combining

* Add a test for the change

---------

Co-authored-by: Levan Machablishvili <levan.machablishvili@datadoghq.com>

* [override/podtemplatespec] Merge affinities (#1004) (#1052)

Co-authored-by: David Ortiz <david.ortiz@datadoghq.com>

* [gitlab] update runners for build jobs (#1056)

* test image build jobs

* rename docker-push-ci

* test fix (#1057)

* update monocontainer config (#1059)

* update monocontainer config

* Update docs/configuration.v2alpha1.md

Co-authored-by: May Lee <mayl@alumni.cmu.edu>

* fix generated file

* fix missed var names

---------

Co-authored-by: May Lee <mayl@alumni.cmu.edu>

* Correct a malformed example command in installation.md (#1066)

Fix installation document

* Fix errors for tests and allow both introspection and profiles to run

---------

Co-authored-by: Jennifer Chen <32009013+jennchenn@users.noreply.github.com>
Co-authored-by: Sylvain Baubeau <lebauce@gmail.com>
Co-authored-by: Celene <celene@datadoghq.com>
Co-authored-by: Charly Fontaine <charly@datadoghq.com>
Co-authored-by: Vincent Boulineau <58430298+vboulineau@users.noreply.github.com>
Co-authored-by: Cedric Lamoriniere <cedric.lamoriniere@datadoghq.com>
Co-authored-by: tbavelier <97530782+tbavelier@users.noreply.github.com>
Co-authored-by: Julia-elsammak <109159652+Julia-elsammak@users.noreply.github.com>
Co-authored-by: bakayolo <benjamin.apprederisse@gmail.com>
Co-authored-by: Liliya Belaus <59583867+liliyadd@users.noreply.github.com>
Co-authored-by: julia-elsammak <julia.elsammak@datadoghq.com>
Co-authored-by: levan-m <116471169+levan-m@users.noreply.github.com>
Co-authored-by: Fanny Jiang <fanny.jiang@datadoghq.com>
Co-authored-by: David Ortiz <david.ortiz@datadoghq.com>
Co-authored-by: Levan Machablishvili <levan.machablishvili@datadoghq.com>
Co-authored-by: May Lee <mayl@alumni.cmu.edu>
Co-authored-by: David Goffredo <dmgoffredo@gmail.com>

* Refactor introspection

* Fix default provider only case

---------

Co-authored-by: David Ortiz <david.ortiz@datadoghq.com>
Co-authored-by: Fanny Jiang <fanny.jiang@datadoghq.com>
Co-authored-by: Jennifer Chen <32009013+jennchenn@users.noreply.github.com>
Co-authored-by: Sylvain Baubeau <lebauce@gmail.com>
Co-authored-by: Celene <celene@datadoghq.com>
Co-authored-by: Charly Fontaine <charly@datadoghq.com>
Co-authored-by: Vincent Boulineau <58430298+vboulineau@users.noreply.github.com>
Co-authored-by: Cedric Lamoriniere <cedric.lamoriniere@datadoghq.com>
Co-authored-by: tbavelier <97530782+tbavelier@users.noreply.github.com>
Co-authored-by: Julia-elsammak <109159652+Julia-elsammak@users.noreply.github.com>
Co-authored-by: bakayolo <benjamin.apprederisse@gmail.com>
Co-authored-by: Liliya Belaus <59583867+liliyadd@users.noreply.github.com>
Co-authored-by: julia-elsammak <julia.elsammak@datadoghq.com>
Co-authored-by: levan-m <116471169+levan-m@users.noreply.github.com>
Co-authored-by: Levan Machablishvili <levan.machablishvili@datadoghq.com>
Co-authored-by: May Lee <mayl@alumni.cmu.edu>
Co-authored-by: David Goffredo <dmgoffredo@gmail.com>
  • Loading branch information
18 people committed Feb 22, 2024
1 parent 910ccf3 commit ae9b739
Show file tree
Hide file tree
Showing 10 changed files with 351 additions and 749 deletions.
37 changes: 17 additions & 20 deletions controllers/datadogagent/controller.go
Expand Up @@ -74,31 +74,28 @@ type ReconcilerOptions struct {

// Reconciler is the internal reconciler for Datadog Agent
type Reconciler struct {
options ReconcilerOptions
client client.Client
versionInfo *version.Info
platformInfo kubernetes.PlatformInfo
providerStore *kubernetes.ProviderStore
scheme *runtime.Scheme
log logr.Logger
recorder record.EventRecorder
forwarders datadog.MetricForwardersManager
options ReconcilerOptions
client client.Client
versionInfo *version.Info
platformInfo kubernetes.PlatformInfo
scheme *runtime.Scheme
log logr.Logger
recorder record.EventRecorder
forwarders datadog.MetricForwardersManager
}

// NewReconciler returns a reconciler for DatadogAgent
func NewReconciler(options ReconcilerOptions, client client.Client, versionInfo *version.Info, platformInfo kubernetes.PlatformInfo,
providerStore *kubernetes.ProviderStore, scheme *runtime.Scheme, log logr.Logger, recorder record.EventRecorder,
metricForwarder datadog.MetricForwardersManager) (*Reconciler, error) {
scheme *runtime.Scheme, log logr.Logger, recorder record.EventRecorder, metricForwarder datadog.MetricForwardersManager) (*Reconciler, error) {
return &Reconciler{
options: options,
client: client,
versionInfo: versionInfo,
platformInfo: platformInfo,
providerStore: providerStore,
scheme: scheme,
log: log,
recorder: recorder,
forwarders: metricForwarder,
options: options,
client: client,
versionInfo: versionInfo,
platformInfo: platformInfo,
scheme: scheme,
log: log,
recorder: recorder,
forwarders: metricForwarder,
}, nil
}

Expand Down
159 changes: 50 additions & 109 deletions controllers/datadogagent/controller_reconcile_agent.go
Expand Up @@ -34,7 +34,7 @@ import (

func (r *Reconciler) reconcileV2Agent(logger logr.Logger, requiredComponents feature.RequiredComponents, features []feature.Feature,
dda *datadoghqv2alpha1.DatadogAgent, resourcesManager feature.ResourceManagers, newStatus *datadoghqv2alpha1.DatadogAgentStatus,
provider string, profile *v1alpha1.DatadogAgentProfile) (reconcile.Result, error) {
provider string, providerList map[string]struct{}, profile *v1alpha1.DatadogAgentProfile) (reconcile.Result, error) {
var result reconcile.Result
var eds *edsv1alpha1.ExtendedDaemonSet
var daemonset *appsv1.DaemonSet
Expand Down Expand Up @@ -87,9 +87,7 @@ func (r *Reconciler) reconcileV2Agent(logger logr.Logger, requiredComponents fea
overrideName = *componentOverride.Name
}
}
affinity := eds.Spec.Template.Spec.Affinity.DeepCopy()
combinedAffinity := r.generateNodeAffinity(provider, affinity)
overrideFromProvider := kubernetes.ComponentOverrideFromProvider(overrideName, provider, combinedAffinity)
overrideFromProvider := kubernetes.ComponentOverrideFromProvider(overrideName, provider, providerList)
componentOverrides = append(componentOverrides, &overrideFromProvider)
} else {
eds.Labels[apicommon.MD5AgentDeploymentProviderLabelKey] = kubernetes.LegacyProvider
Expand Down Expand Up @@ -158,9 +156,7 @@ func (r *Reconciler) reconcileV2Agent(logger logr.Logger, requiredComponents fea
overrideName = *componentOverride.Name
}
}
affinity := daemonset.Spec.Template.Spec.Affinity.DeepCopy()
combinedAffinity := r.generateNodeAffinity(provider, affinity)
overrideFromProvider := kubernetes.ComponentOverrideFromProvider(overrideName, provider, combinedAffinity)
overrideFromProvider := kubernetes.ComponentOverrideFromProvider(overrideName, provider, providerList)
componentOverrides = append(componentOverrides, &overrideFromProvider)
} else {
daemonset.Labels[apicommon.MD5AgentDeploymentProviderLabelKey] = kubernetes.LegacyProvider
Expand Down Expand Up @@ -256,118 +252,63 @@ func (r *Reconciler) cleanupV2ExtendedDaemonSet(logger logr.Logger, dda *datadog
return reconcile.Result{}, nil
}

func (r *Reconciler) generateNodeAffinity(p string, affinity *corev1.Affinity) *corev1.Affinity {
nodeSelectorReq := r.providerStore.GenerateProviderNodeAffinity(p)
if len(nodeSelectorReq) > 0 {
// check for an existing affinity and merge
if affinity == nil {
affinity = &corev1.Affinity{}
}
if affinity.NodeAffinity == nil {
affinity.NodeAffinity = &corev1.NodeAffinity{}
}
if affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution == nil {
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution = &corev1.NodeSelector{}
}
// NodeSelectorTerms are ORed
if len(affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms) == 0 {
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms = append(
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms,
corev1.NodeSelectorTerm{},
)
}
// NodeSelectorTerms are ANDed
if affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions == nil {
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions = []corev1.NodeSelectorRequirement{}
}
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions = append(
affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions,
nodeSelectorReq...,
)
}

return affinity
}

func (r *Reconciler) handleProviders(ctx context.Context, dda *datadoghqv2alpha1.DatadogAgent, ddaStatus *datadoghqv2alpha1.DatadogAgentStatus) (map[string]struct{}, error) {
providerList, err := r.updateProviderStore(ctx)
if err != nil {
return nil, err
}
func (r *Reconciler) handleProviders(ctx context.Context, dda *datadoghqv2alpha1.DatadogAgent, ddaStatus *datadoghqv2alpha1.DatadogAgentStatus,
nodeList []corev1.Node, logger logr.Logger) (map[string]struct{}, error) {
providerList := kubernetes.GetProviderListFromNodeList(nodeList, logger)

if err := r.cleanupDaemonSetsForProvidersThatNoLongerApply(ctx, dda, ddaStatus); err != nil {
if err := r.cleanupDaemonSetsForProvidersThatNoLongerApply(ctx, dda, ddaStatus, providerList); err != nil {
return nil, err
}

return providerList, nil
}

// updateProviderStore recomputes the required providers by making a
// call to the apiserver for an updated list of nodes
func (r *Reconciler) updateProviderStore(ctx context.Context) (map[string]struct{}, error) {
nodeList := corev1.NodeList{}
err := r.client.List(ctx, &nodeList)
if err != nil {
return nil, err
}

// recompute providers using updated node list
providersList := make(map[string]struct{})
for _, node := range nodeList.Items {
provider := kubernetes.DetermineProvider(node.Labels)
if _, ok := providersList[provider]; !ok {
providersList[provider] = struct{}{}
r.log.V(1).Info("New provider detected", "provider", provider)
}
}

return r.providerStore.Reset(providersList), nil
}

// cleanupDaemonSetsForProvidersThatNoLongerApply deletes ds/eds from providers
// that are not present in the provider store. If there are no providers in the
// provider store, do not delete any ds/eds since that would delete all node
// agents.
func (r *Reconciler) cleanupDaemonSetsForProvidersThatNoLongerApply(ctx context.Context, dda *datadoghqv2alpha1.DatadogAgent, ddaStatus *datadoghqv2alpha1.DatadogAgentStatus) error {
if r.options.ExtendedDaemonsetOptions.Enabled {
edsList := edsv1alpha1.ExtendedDaemonSetList{}
if err := r.client.List(ctx, &edsList, client.HasLabels{apicommon.MD5AgentDeploymentProviderLabelKey}); err != nil {
return err
}
func (r *Reconciler) cleanupDaemonSetsForProvidersThatNoLongerApply(ctx context.Context, dda *datadoghqv2alpha1.DatadogAgent,
ddaStatus *datadoghqv2alpha1.DatadogAgentStatus, providerList map[string]struct{}) error {
if len(providerList) > 0 {
if r.options.ExtendedDaemonsetOptions.Enabled {
edsList := edsv1alpha1.ExtendedDaemonSetList{}
if err := r.client.List(ctx, &edsList, client.HasLabels{apicommon.MD5AgentDeploymentProviderLabelKey}); err != nil {
return err
}

for _, eds := range edsList.Items {
provider := eds.Labels[apicommon.MD5AgentDeploymentProviderLabelKey]
if len(*r.providerStore.GetProviders()) > 0 && !r.providerStore.IsPresent(provider) {
if err := r.client.Delete(ctx, &eds); err != nil {
return err
for _, eds := range edsList.Items {
provider := eds.Labels[apicommon.MD5AgentDeploymentProviderLabelKey]
if _, ok := providerList[provider]; !ok {
if err := r.client.Delete(ctx, &eds); err != nil {
return err
}
r.log.Info("Deleted ExtendedDaemonSet", "extendedDaemonSet.Namespace", eds.Namespace, "extendedDaemonSet.Name", eds.Name)
event := buildEventInfo(eds.Name, eds.Namespace, extendedDaemonSetKind, datadog.DeletionEvent)
r.recordEvent(dda, event)

removeStaleStatus(ddaStatus, eds.Name)
}
r.log.Info("Deleted ExtendedDaemonSet", "extendedDaemonSet.Namespace", eds.Namespace, "extendedDaemonSet.Name", eds.Name)
event := buildEventInfo(eds.Name, eds.Namespace, extendedDaemonSetKind, datadog.DeletionEvent)
r.recordEvent(dda, event)

removeStaleStatus(ddaStatus, eds.Name)
}
}

return nil
}
return nil
}

daemonSetList := appsv1.DaemonSetList{}
if err := r.client.List(ctx, &daemonSetList, client.HasLabels{apicommon.MD5AgentDeploymentProviderLabelKey}); err != nil {
return err
}
daemonSetList := appsv1.DaemonSetList{}
if err := r.client.List(ctx, &daemonSetList, client.HasLabels{apicommon.MD5AgentDeploymentProviderLabelKey}); err != nil {
return err
}
for _, ds := range daemonSetList.Items {
provider := ds.Labels[apicommon.MD5AgentDeploymentProviderLabelKey]
if _, ok := providerList[provider]; !ok {
if err := r.client.Delete(ctx, &ds); err != nil {
return err
}
r.log.Info("Deleted DaemonSet", "daemonSet.Namespace", ds.Namespace, "daemonSet.Name", ds.Name)
event := buildEventInfo(ds.Name, ds.Namespace, daemonSetKind, datadog.DeletionEvent)
r.recordEvent(dda, event)

for _, ds := range daemonSetList.Items {
provider := ds.Labels[apicommon.MD5AgentDeploymentProviderLabelKey]
if len(*r.providerStore.GetProviders()) > 0 && !r.providerStore.IsPresent(provider) {
if err := r.client.Delete(ctx, &ds); err != nil {
return err
removeStaleStatus(ddaStatus, ds.Name)
}
r.log.Info("Deleted DaemonSet", "daemonSet.Namespace", ds.Namespace, "daemonSet.Name", ds.Name)
event := buildEventInfo(ds.Name, ds.Namespace, daemonSetKind, datadog.DeletionEvent)
r.recordEvent(dda, event)

removeStaleStatus(ddaStatus, ds.Name)
}
}

Expand All @@ -388,8 +329,9 @@ func removeStaleStatus(ddaStatus *datadoghqv2alpha1.DatadogAgentStatus, name str
}
}

func (r *Reconciler) handleProfiles(ctx context.Context, profiles []v1alpha1.DatadogAgentProfile, profilesByNode map[string]types.NamespacedName, ddaNamespace string) error {
if err := r.cleanupDaemonSetsForProfilesThatNoLongerApply(ctx, profiles); err != nil {
func (r *Reconciler) handleProfiles(ctx context.Context, profiles []v1alpha1.DatadogAgentProfile, profilesByNode map[string]types.NamespacedName,
ddaNamespace string, providerList map[string]struct{}) error {
if err := r.cleanupDaemonSetsForProfilesThatNoLongerApply(ctx, profiles, providerList); err != nil {
return err
}

Expand All @@ -404,7 +346,7 @@ func (r *Reconciler) handleProfiles(ctx context.Context, profiles []v1alpha1.Dat
return nil
}

func (r *Reconciler) cleanupDaemonSetsForProfilesThatNoLongerApply(ctx context.Context, profiles []v1alpha1.DatadogAgentProfile) error {
func (r *Reconciler) cleanupDaemonSetsForProfilesThatNoLongerApply(ctx context.Context, profiles []v1alpha1.DatadogAgentProfile, providerList map[string]struct{}) error {
daemonSets, err := r.agentProfileDaemonSetsCreatedByOperator(ctx)
if err != nil {
return err
Expand All @@ -416,15 +358,14 @@ func (r *Reconciler) cleanupDaemonSetsForProfilesThatNoLongerApply(ctx context.C
Namespace: profile.Namespace,
Name: profile.Name,
}
dsProfileName := agentprofile.DaemonSetName(name)

if r.options.IntrospectionEnabled {
providerList := r.providerStore.GetProviders()
for provider := range *providerList {
name.Name = kubernetes.GetAgentNameWithProvider(name.Name, provider)
daemonSetNamesBelongingToProfiles[agentprofile.DaemonSetName(name)] = struct{}{}
for provider := range providerList {
daemonSetNamesBelongingToProfiles[kubernetes.GetAgentNameWithProvider(dsProfileName, provider)] = struct{}{}
}
} else {
daemonSetNamesBelongingToProfiles[agentprofile.DaemonSetName(name)] = struct{}{}
daemonSetNamesBelongingToProfiles[dsProfileName] = struct{}{}
}
}

Expand Down

0 comments on commit ae9b739

Please sign in to comment.