Skip to content

fix(chart): ingress template nil pointer when backend is omitted #2

@milesibastos

Description

@milesibastos

Bug

charts/evolution/templates/ingress.yaml line 53 fails with nil pointer when backend is omitted from ingress.hosts[].paths[]:

template: evolution/templates/ingress.yaml:53:51: executing "evolution/templates/ingress.yaml" at <.backend.service.name>: nil pointer evaluating interface {}.service

Root cause

Line 53 uses {{ default $fullName .backend.service.name }} — when .backend is nil, accessing .service on nil panics. The default function doesn't short-circuit nil traversal.

# Line 53
name: {{ default $fullName .backend.service.name }}

Expected behavior

Omitting backend from paths should use the chart's default service name ($fullName) and port ($svcPort), as the default function suggests.

Workaround

Explicitly set backend in values:

ingress:
  hosts:
    - host: example.com
      paths:
        - path: /
          pathType: ImplementationSpecific
          backend:
            service:
              name: evolution
              port:
                number: 8080

Fix

Replace direct traversal with nil-safe access:

# Before
name: {{ default $fullName .backend.service.name }}
port:
  number: {{ default (int $svcPort) (int .backend.service.port.number) }}

# After
name: {{ default $fullName (dig "backend" "service" "name" "" .) }}
port:
  number: {{ default (int $svcPort) (dig "backend" "service" "port" "number" 0 . | int) }}

Or wrap in a conditional:

{{- if .backend }}
name: {{ default $fullName .backend.service.name }}
port:
  number: {{ default (int $svcPort) (int .backend.service.port.number) }}
{{- else }}
name: {{ $fullName }}
port:
  number: {{ $svcPort }}
{{- end }}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions