@@ -5711,16 +5711,6 @@ func (s *deploymentDelegatedOperatorInstanceTemplateTest) TestTelemetrySocketInj
57115711 }
57125712 return n
57135713 }
5714- // findContainer returns the named container (the main DO container,
5715- // not the telemetry-sidecar) from a pod spec.
5716- findContainer := func (containers []corev1.Container , name string ) * corev1.Container {
5717- for i , c := range containers {
5718- if c .Name == name {
5719- return & containers [i ]
5720- }
5721- }
5722- return nil
5723- }
57245714
57255715 testCases := []struct {
57265716 name string
@@ -5783,3 +5773,123 @@ func (s *deploymentDelegatedOperatorInstanceTemplateTest) TestTelemetrySocketInj
57835773 })
57845774 }
57855775}
5776+
5777+ // TestTelemetryDisabledOmitsSidecar verifies that when telemetry is disabled
5778+ // the rendered DO deployment carries neither the telemetry-sidecar container nor
5779+ // the telemetry-socket volume/mount. The disabled shape is also covered
5780+ // indirectly by TestContainerCount (container count is 1, not 2) and the
5781+ // disableTelemetry-based volume/mount tests; this is the focused negative
5782+ // assertion living next to the positive cases above.
5783+ func (s * deploymentDelegatedOperatorInstanceTemplateTest ) TestTelemetryDisabledOmitsSidecar () {
5784+ const socketName = "telemetry-socket"
5785+
5786+ options := & helm.Options {SetValues : map [string ]string {
5787+ "telemetry.enabled" : "false" ,
5788+ "delegatedOperatorDeployments.deployments.teamsDoCpuDefault.enabled" : "true" ,
5789+ }}
5790+ output := helm .RenderTemplate (s .T (), options , s .chartPath , s .releaseName , s .templates )
5791+
5792+ docs := strings .Split (output , "---" )
5793+ s .Require ().GreaterOrEqual (len (docs ), 2 , "expected at least one rendered deployment" )
5794+
5795+ var deployment appsv1.Deployment
5796+ helm .UnmarshalK8SYaml (s .T (), docs [1 ], & deployment )
5797+
5798+ s .Nil (findContainer (deployment .Spec .Template .Spec .Containers , "telemetry-sidecar" ),
5799+ "telemetry-sidecar container should be absent when telemetry is disabled" )
5800+ s .Nil (findVolume (deployment .Spec .Template .Spec .Volumes , socketName ),
5801+ "telemetry-socket volume should be absent when telemetry is disabled" )
5802+
5803+ main := findContainer (deployment .Spec .Template .Spec .Containers , "teams-do-cpu-default" )
5804+ s .Require ().NotNil (main , "main DO container not found" )
5805+ s .Nil (findVolumeMount (main .VolumeMounts , socketName ),
5806+ "telemetry-socket volumeMount should be absent when telemetry is disabled" )
5807+ }
5808+
5809+ // TestTelemetrySidecarGpuEnv verifies that when a delegated-operator executor
5810+ // requests a GPU (via resources.limits or resources.requests), its
5811+ // telemetry-sidecar is given the NVIDIA_* env vars needed to read GPU metrics,
5812+ // without the sidecar requesting its own nvidia.com/gpu allocation. When no GPU
5813+ // is requested, the sidecar receives no NVIDIA_* env vars.
5814+ func (s * deploymentDelegatedOperatorInstanceTemplateTest ) TestTelemetrySidecarGpuEnv () {
5815+ const gpuResource = "nvidia.com/gpu"
5816+
5817+ // gpuKey escapes the dot in nvidia.com/gpu so helm --set treats the whole
5818+ // string as a single map key rather than a nested path.
5819+ gpuKey := func (section string ) string {
5820+ return "delegatedOperatorDeployments.deployments.teamsDoCpuDefault.resources." +
5821+ section + ".nvidia\\ .com/gpu"
5822+ }
5823+
5824+ testCases := []struct {
5825+ name string
5826+ values map [string ]string
5827+ expectGpu bool
5828+ }{
5829+ {
5830+ name : "gpuInLimitsExposesEnvToSidecar" ,
5831+ values : map [string ]string {
5832+ "telemetry.enabled" : "true" ,
5833+ "delegatedOperatorDeployments.deployments.teamsDoCpuDefault.enabled" : "true" ,
5834+ gpuKey ("limits" ): "1" ,
5835+ },
5836+ expectGpu : true ,
5837+ },
5838+ {
5839+ name : "gpuInRequestsExposesEnvToSidecar" ,
5840+ values : map [string ]string {
5841+ "telemetry.enabled" : "true" ,
5842+ "delegatedOperatorDeployments.deployments.teamsDoCpuDefault.enabled" : "true" ,
5843+ gpuKey ("requests" ): "1" ,
5844+ },
5845+ expectGpu : true ,
5846+ },
5847+ {
5848+ name : "noGpuOmitsEnvFromSidecar" ,
5849+ values : map [string ]string {
5850+ "telemetry.enabled" : "true" ,
5851+ "delegatedOperatorDeployments.deployments.teamsDoCpuDefault.enabled" : "true" ,
5852+ },
5853+ expectGpu : false ,
5854+ },
5855+ }
5856+
5857+ for _ , tc := range testCases {
5858+ tc := tc
5859+ s .Run (tc .name , func () {
5860+ subT := s .T ()
5861+ subT .Parallel ()
5862+
5863+ options := & helm.Options {SetValues : tc .values }
5864+ output := helm .RenderTemplate (subT , options , s .chartPath , s .releaseName , s .templates )
5865+
5866+ docs := strings .Split (output , "---" )
5867+ s .Require ().GreaterOrEqual (len (docs ), 2 , "expected at least one rendered deployment" )
5868+
5869+ var deployment appsv1.Deployment
5870+ helm .UnmarshalK8SYaml (subT , docs [1 ], & deployment )
5871+
5872+ sidecar := findContainer (deployment .Spec .Template .Spec .Containers , "telemetry-sidecar" )
5873+ s .Require ().NotNil (sidecar , "telemetry-sidecar container not found" )
5874+
5875+ visibleDevices , hasVisibleDevices := envValue (sidecar .Env , "NVIDIA_VISIBLE_DEVICES" )
5876+ driverCaps , hasDriverCaps := envValue (sidecar .Env , "NVIDIA_DRIVER_CAPABILITIES" )
5877+
5878+ if tc .expectGpu {
5879+ s .True (hasVisibleDevices , "sidecar should have NVIDIA_VISIBLE_DEVICES" )
5880+ s .Equal ("all" , visibleDevices , "NVIDIA_VISIBLE_DEVICES value mismatch" )
5881+ s .True (hasDriverCaps , "sidecar should have NVIDIA_DRIVER_CAPABILITIES" )
5882+ s .Equal ("compute,utility" , driverCaps , "NVIDIA_DRIVER_CAPABILITIES value mismatch" )
5883+
5884+ // The sidecar reads the executor's GPU; it must not request its own.
5885+ _ , limitsHasGpu := sidecar .Resources .Limits [corev1 .ResourceName (gpuResource )]
5886+ _ , requestsHasGpu := sidecar .Resources .Requests [corev1 .ResourceName (gpuResource )]
5887+ s .False (limitsHasGpu , "sidecar must not request nvidia.com/gpu in limits" )
5888+ s .False (requestsHasGpu , "sidecar must not request nvidia.com/gpu in requests" )
5889+ } else {
5890+ s .False (hasVisibleDevices , "sidecar should not have NVIDIA_VISIBLE_DEVICES when no GPU requested" )
5891+ s .False (hasDriverCaps , "sidecar should not have NVIDIA_DRIVER_CAPABILITIES when no GPU requested" )
5892+ }
5893+ })
5894+ }
5895+ }
0 commit comments