From 087cccf1a1bc5ad81692fa6b28b8c627a3f6e46a Mon Sep 17 00:00:00 2001 From: aorcholski <84514340+aorcholski@users.noreply.github.com> Date: Tue, 20 Feb 2024 14:56:47 +0100 Subject: [PATCH] Use oneAgent.hostGroup in ApplicationMonitoring mode (#2776) --- pkg/api/v1beta1/dynakube/properties.go | 23 ++++-- .../dynakube/oneagent/daemonset/arguments.go | 4 +- .../oneagent/daemonset/arguments_test.go | 70 +++++++++++++++++++ pkg/injection/startup/dtclient_builder.go | 7 ++ pkg/injection/startup/run.go | 5 ++ .../validation/dynakube/oneagent_test.go | 32 +++++++++ 6 files changed, 131 insertions(+), 10 deletions(-) diff --git a/pkg/api/v1beta1/dynakube/properties.go b/pkg/api/v1beta1/dynakube/properties.go index 40c3b5359c..bad6dc6eca 100644 --- a/pkg/api/v1beta1/dynakube/properties.go +++ b/pkg/api/v1beta1/dynakube/properties.go @@ -480,13 +480,22 @@ func (dk *DynaKube) HostGroup() string { func (dk *DynaKube) HostGroupAsParam() string { var hostGroup string - if dk.CloudNativeFullstackMode() && dk.Spec.OneAgent.CloudNativeFullStack.Args != nil { - for _, arg := range dk.Spec.OneAgent.CloudNativeFullStack.Args { - key, value := splitArg(arg) - if key == "--set-host-group" { - hostGroup = value - break - } + var args []string + + switch { + case dk.CloudNativeFullstackMode() && dk.Spec.OneAgent.CloudNativeFullStack.Args != nil: + args = dk.Spec.OneAgent.CloudNativeFullStack.Args + case dk.ClassicFullStackMode() && dk.Spec.OneAgent.ClassicFullStack.Args != nil: + args = dk.Spec.OneAgent.ClassicFullStack.Args + case dk.HostMonitoringMode() && dk.Spec.OneAgent.HostMonitoring.Args != nil: + args = dk.Spec.OneAgent.HostMonitoring.Args + } + + for _, arg := range args { + key, value := splitArg(arg) + if key == "--set-host-group" { + hostGroup = value + break } } return hostGroup diff --git a/pkg/controllers/dynakube/oneagent/daemonset/arguments.go b/pkg/controllers/dynakube/oneagent/daemonset/arguments.go index 947bdc36f1..27d9e8d206 100644 --- a/pkg/controllers/dynakube/oneagent/daemonset/arguments.go +++ b/pkg/controllers/dynakube/oneagent/daemonset/arguments.go @@ -37,9 +37,7 @@ func (dsInfo *builderInfo) arguments() ([]string, error) { dsInfo.appendHostInjectArgs(argMap) - if dsInfo.dynakube.CloudNativeFullstackMode() { - dsInfo.appendHostGroupArg(argMap) - } + dsInfo.appendHostGroupArg(argMap) return argMap.AsKeyValueStrings(), nil } diff --git a/pkg/controllers/dynakube/oneagent/daemonset/arguments_test.go b/pkg/controllers/dynakube/oneagent/daemonset/arguments_test.go index 0c6e15029b..99160edda5 100644 --- a/pkg/controllers/dynakube/oneagent/daemonset/arguments_test.go +++ b/pkg/controllers/dynakube/oneagent/daemonset/arguments_test.go @@ -19,6 +19,10 @@ const ( testClusterID = "test-cluster-id" testURL = "https://testing.dev.dynatracelabs.com/api" testName = "test-name" + + testNewHostGroupName = "newhostgroup" + testOldHostGroupArgument = "--set-host-group=oldhostgroup" + testNewHostGroupArgument = "--set-host-group=newhostgroup" ) func TestArguments(t *testing.T) { @@ -231,4 +235,70 @@ func TestPodSpec_Arguments(t *testing.T) { podSpecs := daemonset.Spec.Template.Spec assert.Contains(t, podSpecs.Containers[0].Args, "--set-host-id-source=k8s-node-name") }) + t.Run(`has host-group for classicFullstack`, func(t *testing.T) { + classicInstance := &dynatracev1beta1.DynaKube{ + Spec: dynatracev1beta1.DynaKubeSpec{ + OneAgent: dynatracev1beta1.OneAgentSpec{ + HostGroup: testNewHostGroupName, + ClassicFullStack: &dynatracev1beta1.HostInjectSpec{ + Args: []string{testOldHostGroupArgument}, + }, + }, + }, + } + + dsInfo := HostMonitoring{ + builderInfo{ + dynakube: classicInstance, + hostInjectSpec: classicInstance.Spec.OneAgent.ClassicFullStack, + }, + } + arguments, err := dsInfo.arguments() + require.NoError(t, err) + assert.Contains(t, arguments, testNewHostGroupArgument) + }) + t.Run(`has host-group for cloudNativeFullstack`, func(t *testing.T) { + cloudNativeInstance := &dynatracev1beta1.DynaKube{ + Spec: dynatracev1beta1.DynaKubeSpec{ + OneAgent: dynatracev1beta1.OneAgentSpec{ + HostGroup: testNewHostGroupName, + CloudNativeFullStack: &dynatracev1beta1.CloudNativeFullStackSpec{ + HostInjectSpec: dynatracev1beta1.HostInjectSpec{Args: []string{testOldHostGroupArgument}}, + }, + }, + }, + } + + dsInfo := HostMonitoring{ + builderInfo{ + dynakube: cloudNativeInstance, + hostInjectSpec: &cloudNativeInstance.Spec.OneAgent.CloudNativeFullStack.HostInjectSpec, + }, + } + arguments, err := dsInfo.arguments() + require.NoError(t, err) + assert.Contains(t, arguments, testNewHostGroupArgument) + }) + t.Run(`has host-group for HostMonitoring`, func(t *testing.T) { + hostMonitoringInstance := &dynatracev1beta1.DynaKube{ + Spec: dynatracev1beta1.DynaKubeSpec{ + OneAgent: dynatracev1beta1.OneAgentSpec{ + HostGroup: testNewHostGroupName, + HostMonitoring: &dynatracev1beta1.HostInjectSpec{ + Args: []string{testOldHostGroupArgument}, + }, + }, + }, + } + + dsInfo := HostMonitoring{ + builderInfo{ + dynakube: hostMonitoringInstance, + hostInjectSpec: hostMonitoringInstance.Spec.OneAgent.HostMonitoring, + }, + } + arguments, err := dsInfo.arguments() + require.NoError(t, err) + assert.Contains(t, arguments, testNewHostGroupArgument) + }) } diff --git a/pkg/injection/startup/dtclient_builder.go b/pkg/injection/startup/dtclient_builder.go index 021e887539..5d36e19421 100644 --- a/pkg/injection/startup/dtclient_builder.go +++ b/pkg/injection/startup/dtclient_builder.go @@ -36,6 +36,7 @@ func (builder *dtclientBuilder) setOptions() { builder.addCertCheck() builder.addProxy() builder.addNetworkZone() + builder.addHostGroup() builder.addTrustedCerts() } @@ -59,6 +60,12 @@ func (builder *dtclientBuilder) addNetworkZone() { } } +func (builder *dtclientBuilder) addHostGroup() { + if builder.config.HostGroup != "" { + builder.options = append(builder.options, dtclient.HostGroup(builder.config.HostGroup)) + } +} + func (builder *dtclientBuilder) addTrustedCerts() { if builder.config.TrustedCAs != "" { log.Info("using TrustedCAs, check the secret for more details") diff --git a/pkg/injection/startup/run.go b/pkg/injection/startup/run.go index 123b91dacd..c582798530 100644 --- a/pkg/injection/startup/run.go +++ b/pkg/injection/startup/run.go @@ -155,6 +155,11 @@ func (runner *Runner) getProcessModuleConfig() (*dtclient.ProcessModuleConfig, e if runner.config.OneAgentNoProxy != "" { processModuleConfig = processModuleConfig.AddNoProxy(runner.config.OneAgentNoProxy) } + + if runner.config.HostGroup != "" { + processModuleConfig.AddHostGroup(runner.config.HostGroup) + } + return processModuleConfig, nil } diff --git a/pkg/webhook/validation/dynakube/oneagent_test.go b/pkg/webhook/validation/dynakube/oneagent_test.go index 947b977949..21136e144d 100644 --- a/pkg/webhook/validation/dynakube/oneagent_test.go +++ b/pkg/webhook/validation/dynakube/oneagent_test.go @@ -371,6 +371,38 @@ func TestOneAgentHostGroup(t *testing.T) { 1, createDynakubeWithHostGroup([]string{"--set-host-group=arg"}, "field"), &defaultCSIDaemonSet) + + assertAllowedResponseWithWarnings(t, + 1, + &dynatracev1beta1.DynaKube{ + ObjectMeta: defaultDynakubeObjectMeta, + Spec: dynatracev1beta1.DynaKubeSpec{ + APIURL: testApiUrl, + OneAgent: dynatracev1beta1.OneAgentSpec{ + ClassicFullStack: &dynatracev1beta1.HostInjectSpec{ + Args: []string{"--set-host-group=arg"}, + }, + HostGroup: "", + }, + }, + }, + &defaultCSIDaemonSet) + + assertAllowedResponseWithWarnings(t, + 1, + &dynatracev1beta1.DynaKube{ + ObjectMeta: defaultDynakubeObjectMeta, + Spec: dynatracev1beta1.DynaKubeSpec{ + APIURL: testApiUrl, + OneAgent: dynatracev1beta1.OneAgentSpec{ + HostMonitoring: &dynatracev1beta1.HostInjectSpec{ + Args: []string{"--set-host-group=arg"}, + }, + HostGroup: "", + }, + }, + }, + &defaultCSIDaemonSet) }) }