From ec10bbfe77830f5383fd5978b23c01347b0fe162 Mon Sep 17 00:00:00 2001 From: Tiger Kaovilai Date: Fri, 27 Mar 2026 09:41:51 -0400 Subject: [PATCH] Pass --log-level to NodeAgent DaemonSet container args The DPA LogLevel field was only passed to the Velero server deployment but not to the NodeAgent DaemonSet. This meant data mover pods spawned by the exposer could not inherit the log level from the node-agent, since the exposer reads --log-level from the node-agent container args. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude Co-Authored-By: Happy Signed-off-by: Tiger Kaovilai --- internal/controller/nodeagent.go | 4 ++++ internal/controller/nodeagent_test.go | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/internal/controller/nodeagent.go b/internal/controller/nodeagent.go index 2a687dde6cd..a6d9ffce0ea 100644 --- a/internal/controller/nodeagent.go +++ b/internal/controller/nodeagent.go @@ -709,6 +709,10 @@ func (r *DataProtectionApplicationReconciler) customizeNodeAgentDaemonset(ds *ap nodeAgentContainer.Args = append(nodeAgentContainer.Args, fmt.Sprintf("--log-format=%s", dpa.Spec.LogFormat)) } + if dpa.Spec.Configuration.Velero.LogLevel != "" { + nodeAgentContainer.Args = append(nodeAgentContainer.Args, fmt.Sprintf("--log-level=%s", dpa.Spec.Configuration.Velero.LogLevel)) + } + if len(dpa.Spec.Configuration.NodeAgent.ExtraArgs) > 0 { nodeAgentContainer.Args = common.MergeExtraArgs(nodeAgentContainer.Args, dpa.Spec.Configuration.NodeAgent.ExtraArgs) } diff --git a/internal/controller/nodeagent_test.go b/internal/controller/nodeagent_test.go index 51c10da73c5..d121df2fc27 100644 --- a/internal/controller/nodeagent_test.go +++ b/internal/controller/nodeagent_test.go @@ -253,6 +253,7 @@ type TestBuiltNodeAgentDaemonSetOptions struct { dataMoverPrepareTimeout *string resourceTimeout *string logFormat *string + logLevel *string toleration []corev1.Toleration nodeSelector map[string]string disableFsBackup *bool @@ -583,6 +584,9 @@ func createTestBuiltNodeAgentDaemonSet(options TestBuiltNodeAgentDaemonSetOption if len(options.priorityClassName) > 0 { testBuiltNodeAgentDaemonSet.Spec.Template.Spec.PriorityClassName = options.priorityClassName } + if options.logLevel != nil { + testBuiltNodeAgentDaemonSet.Spec.Template.Spec.Containers[0].Args = append(testBuiltNodeAgentDaemonSet.Spec.Template.Spec.Containers[0].Args, fmt.Sprintf("--log-level=%s", *options.logLevel)) + } return testBuiltNodeAgentDaemonSet } @@ -845,6 +849,25 @@ func TestDPAReconciler_buildNodeAgentDaemonset(t *testing.T) { logFormat: ptr.To("text"), }), }, + { + name: "valid DPA CR with LogLevel set to debug, NodeAgent DaemonSet is built with LogLevel set to debug", + dpa: createTestDpaWith( + nil, + oadpv1alpha1.DataProtectionApplicationSpec{ + Configuration: &oadpv1alpha1.ApplicationConfig{ + Velero: &oadpv1alpha1.VeleroConfig{ + LogLevel: "debug", + }, + NodeAgent: &oadpv1alpha1.NodeAgentConfig{}, + }, + }, + ), + clientObjects: []client.Object{testGenericInfrastructure}, + nodeAgentDaemonSet: testNodeAgentDaemonSet.DeepCopy(), + wantNodeAgentDaemonSet: createTestBuiltNodeAgentDaemonSet(TestBuiltNodeAgentDaemonSetOptions{ + logLevel: ptr.To("debug"), + }), + }, { name: "valid DPA CR with DataMoverPrepareTimeout and ResourceTimeout, NodeAgent DaemonSet is built with DataMoverPrepareTimeout and ResourceTimeout", dpa: createTestDpaWith(