Skip to content

Commit

Permalink
Fixes oneAgent pod restarts after operator version change (#1912)
Browse files Browse the repository at this point in the history
* Fixes oneAgent pod restarts after operator version change (#1817)

* Fix agent pod restarts after operator upgrade

* Fix agent pod restarts after operator upgrade

* Fix unit tests
  • Loading branch information
luhi-DT committed Jul 3, 2023
1 parent 8f659c8 commit eb61653
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 8 deletions.
3 changes: 2 additions & 1 deletion src/controllers/dynakube/deploymentmetadata/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@ const (
ClassicFullStackDeploymentType = "classic_fullstack"
CloudNativeDeploymentType = "cloud_native_fullstack"
HostMonitoringDeploymentType = "host_monitoring"
ActiveGateDeploymentType = "active_gate"

EnvDtDeploymentMetadata = "DT_DEPLOYMENT_METADATA"
EnvDtOperatorVersion = "DT_OPERATOR_VERSION"

OneAgentMetadataKey = "oneagent"
ActiveGateMetadataKey = "activegate"
OperatorVersionKey = "operator"
)

var (
Expand Down
9 changes: 9 additions & 0 deletions src/controllers/dynakube/deploymentmetadata/reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

dynatracev1beta1 "github.com/Dynatrace/dynatrace-operator/src/api/v1beta1"
"github.com/Dynatrace/dynatrace-operator/src/kubeobjects"
"github.com/Dynatrace/dynatrace-operator/src/version"
"github.com/pkg/errors"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
Expand Down Expand Up @@ -36,6 +37,7 @@ func (r *Reconciler) Reconcile() error {

r.addOneAgentDeploymentMetadata(configMapData)
r.addActiveGateDeploymentMetadata(configMapData)
r.addOperatorVersionInfo(configMapData)

return r.maintainMetadataConfigMap(configMapData)
}
Expand All @@ -54,6 +56,13 @@ func (r *Reconciler) addActiveGateDeploymentMetadata(configMapData map[string]st
configMapData[ActiveGateMetadataKey] = NewDeploymentMetadata(r.clusterID, ActiveGateMetadataKey).AsString()
}

func (r *Reconciler) addOperatorVersionInfo(configMapData map[string]string) {
if !r.dynakube.NeedsOneAgent() { // Currently only used for oneAgent args
return
}
configMapData[OperatorVersionKey] = version.Version
}

func (r *Reconciler) maintainMetadataConfigMap(configMapData map[string]string) error {
configMapQuery := kubeobjects.NewConfigMapQuery(r.context, r.client, r.apiReader, log)
configMap, err := kubeobjects.CreateConfigMap(r.scheme, &r.dynakube,
Expand Down
8 changes: 4 additions & 4 deletions src/controllers/dynakube/oneagent/daemonset/arguments.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"

"github.com/Dynatrace/dynatrace-operator/src/controllers/dynakube/connectioninfo"
"github.com/Dynatrace/dynatrace-operator/src/version"
"github.com/Dynatrace/dynatrace-operator/src/controllers/dynakube/deploymentmetadata"
)

func (dsInfo *builderInfo) arguments() []string {
Expand All @@ -14,12 +14,12 @@ func (dsInfo *builderInfo) arguments() []string {
args = dsInfo.appendProxyArg(args)
args = dsInfo.appendNetworkZoneArg(args)
args = appendOperatorVersionArg(args)
args = dsInfo.appendImmutableImageArgs(args)
args = appendImmutableImageArgs(args)

return args
}

func (dsInfo *builderInfo) appendImmutableImageArgs(args []string) []string {
func appendImmutableImageArgs(args []string) []string {
args = append(args, fmt.Sprintf("--set-tenant=$(%s)", connectioninfo.EnvDtTenant))
args = append(args, fmt.Sprintf("--set-server={$(%s)}", connectioninfo.EnvDtServer))
return args
Expand All @@ -34,7 +34,7 @@ func (dsInfo *builderInfo) appendHostInjectArgs(args []string) []string {
}

func appendOperatorVersionArg(args []string) []string {
return append(args, "--set-host-property=OperatorVersion="+version.Version)
return append(args, fmt.Sprintf("--set-host-property=OperatorVersion=$(%s)", deploymentmetadata.EnvDtOperatorVersion))
}

func (dsInfo *builderInfo) appendNetworkZoneArg(args []string) []string {
Expand Down
6 changes: 3 additions & 3 deletions src/controllers/dynakube/oneagent/daemonset/arguments_test.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package daemonset

import (
"fmt"
"testing"

dynatracev1beta1 "github.com/Dynatrace/dynatrace-operator/src/api/v1beta1"
"github.com/Dynatrace/dynatrace-operator/src/controllers/dynakube/deploymentmetadata"
"github.com/Dynatrace/dynatrace-operator/src/version"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
Expand All @@ -26,7 +26,7 @@ func TestArguments(t *testing.T) {
dynakube: &dynatracev1beta1.DynaKube{},
}
arguments := builder.arguments()
expectedDefaultArguments := builder.appendImmutableImageArgs(appendOperatorVersionArg([]string{}))
expectedDefaultArguments := appendImmutableImageArgs(appendOperatorVersionArg([]string{}))

assert.Equal(t, expectedDefaultArguments, arguments)
})
Expand Down Expand Up @@ -83,7 +83,7 @@ func TestPodSpec_Arguments(t *testing.T) {
for _, arg := range hostInjectSpecs.Args {
assert.Contains(t, podSpecs.Containers[0].Args, arg)
}
assert.Contains(t, podSpecs.Containers[0].Args, "--set-host-property=OperatorVersion="+version.Version)
assert.Contains(t, podSpecs.Containers[0].Args, fmt.Sprintf("--set-host-property=OperatorVersion=$(%s)", deploymentmetadata.EnvDtOperatorVersion))

t.Run(`has proxy arg`, func(t *testing.T) {
instance.Spec.Proxy = &dynatracev1beta1.DynaKubeProxy{Value: testValue}
Expand Down
11 changes: 11 additions & 0 deletions src/controllers/dynakube/oneagent/daemonset/env_vars.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ func (dsInfo *builderInfo) environmentVariables() []corev1.EnvVar {

envVarMap = dsInfo.addClusterIDEnv(envVarMap)
envVarMap = dsInfo.addDeploymentMetadataEnv(envVarMap)
envVarMap = dsInfo.addOperatorVersionInfoEnv(envVarMap)
envVarMap = dsInfo.addConnectionInfoEnvs(envVarMap)
envVarMap = dsInfo.addProxyEnv(envVarMap)
envVarMap = dsInfo.addReadOnlyEnv(envVarMap)
Expand All @@ -59,6 +60,16 @@ func (dsInfo *builderInfo) addDeploymentMetadataEnv(envVarMap map[string]corev1.
}})
}

func (dsInfo *builderInfo) addOperatorVersionInfoEnv(envVarMap map[string]corev1.EnvVar) map[string]corev1.EnvVar {
return setDefaultValueSource(envVarMap, deploymentmetadata.EnvDtOperatorVersion, &corev1.EnvVarSource{ConfigMapKeyRef: &corev1.ConfigMapKeySelector{
LocalObjectReference: corev1.LocalObjectReference{
Name: deploymentmetadata.GetDeploymentMetadataConfigMapName(dsInfo.dynakube.Name),
},
Key: deploymentmetadata.OperatorVersionKey,
Optional: address.Of(false),
}})
}

func (dsInfo *builderInfo) addConnectionInfoEnvs(envVarMap map[string]corev1.EnvVar) map[string]corev1.EnvVar {
envVarMap = setDefaultValueSource(envVarMap, connectioninfo.EnvDtTenant, &corev1.EnvVarSource{ConfigMapKeyRef: &corev1.ConfigMapKeySelector{
LocalObjectReference: corev1.LocalObjectReference{
Expand Down

0 comments on commit eb61653

Please sign in to comment.