Skip to content

[CI/Build] Chart values.yaml has misindented observability block under resources, fails apps/v1 Deployment schema validation #1910

@shraderdm

Description

@shraderdm

Summary

deploy/helm/semantic-router/values.yaml has an observability: block indented as a child of resources: in two of its multi-document YAML sections (at lines 3876 and 9294). When Helm merges these documents into the final .Values.resources, the rendered Deployment spec carries .spec.template.spec.containers[name="semantic-router"].resources.observability, which the apps/v1 Deployment schema rejects with field not declared in schema. This blocks helm install and helm upgrade of the chart from rendering cleanly on any cluster that enforces the schema (kind, GKE, EKS - i.e., everywhere).

Reproduction

helm dependency build deploy/helm/semantic-router/
helm template vsr deploy/helm/semantic-router/ \
  -n vllm-semantic-router-system | \
  yq '.spec.template.spec.containers[] | select(.name=="semantic-router") | .resources'

The output includes an observability: key under the resources block:

limits:
  cpu: "2"
  memory: 10Gi
observability:
  tracing:
    enabled: false
    exporter:
      endpoint: jaeger:4317
      insecure: true
      type: otlp
    provider: opentelemetry
    resource:
      deployment_environment: development
      service_name: vllm-semantic-router
      service_version: v0.1.0
    sampling:
      rate: 1
      type: always_on
requests:
  cpu: "1"
  memory: 6Gi

Attempting helm install or helm upgrade against a real cluster fails:

Error: failed to create typed patch object (vllm-semantic-router-system/semantic-router;
apps/v1, Kind=Deployment): .spec.template.spec.containers[name="semantic-router"].resources.observability:
field not declared in schema

Root cause

The chart's values.yaml is a multi-document YAML file (----separated sections). Two of those sections have observability: indented at the same level as limits: and requests:, making it a child of resources::

Line 3876-3897 of deploy/helm/semantic-router/values.yaml:

resources:
  limits:
    memory: 10Gi
    cpu: '2'
  requests:
    memory: 6Gi
    cpu: '1'
  observability:                  # <-- misindented under resources
    tracing:
      enabled: false
      provider: opentelemetry
      exporter:
        type: otlp
        endpoint: jaeger:4317
        insecure: true
      sampling:
        type: always_on
        rate: 1.0
      resource:
        service_name: vllm-semantic-router
        service_version: v0.1.0
        deployment_environment: development

The same pattern repeats at line 9294. Both are likely copy-paste errors from a refactor that intended observability: to be a top-level key alongside resources:, config:, etc. (an observability block does exist at top-level at line 602 of the same file and is correctly used by other templates).

Suggested fix

Move both observability: blocks at lines 3876 and 9294 out of resources: to top-level, OR merge their content into the existing top-level observability: at line 602 if that's the intended target. The misindented blocks set tracing.enabled: false anyway, so deleting them entirely (relying on the top-level block) is also a valid fix.

Workaround in flight

The multimodal-routing e2e profile shipping in #1881 sets resources.observability: null in its profile-level values overlay to mask the misindented chart-default content at the right path. That workaround is documented inline in the profile values with a pointer at this issue for retirement once the chart is fixed.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions