From b73d32ddb91ee9f9cde3ca57bc879208534a87e6 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(