googleforgames / open-match

Flexible, extensible, and scalable video game matchmaking.
http://open-match.dev
Apache License 2.0
3.16k stars 333 forks source link

Helm Chart - allow to use user-provided secret for Redis auth if not using Bitnami Redis chart #1685

Open cmartell-at-ocp opened 7 months ago

cmartell-at-ocp commented 7 months ago

Is your feature request related to a problem? Please describe. I'd like to be able to use our own secret for Redis authentication when using BYO Redis with the OpenMatch Helm Chart. If I set my values.yaml to the following:

open-match-core:
  redis:
    enabled: false # Disable the bitnami redis chart.
    hostname: master.my-redis.use1.cache.amazonaws.com
    port: 6379
    user: default

redis:
  auth:
    enabled: true
  secretMountPath: /app/secrets # This will mount a secret named `redis-password` from the namespace. The OM chart will automatically add `redis-password` to this path. 

Helm will fail to template or install the helm chart with the following error:

Error: INSTALLATION FAILED: template: open-match/templates/synchronizer.yaml:71:12: executing "open-match/templates/synchronizer.yaml" at <include "openmatch.volumes.withredis" .>: error calling include: template: open-match/templates/_helpers.tpl:115:19: executing "openmatch.volumes.withredis" at <include "call-nested" (list . "redis" "common.names.fullname")>: error calling include: template: open-match/templates/_helpers.tpl:239:4: executing "call-nested" at <include $template (dict "Chart" (dict "Name" (last $subchart)) "Values" $values "Release" $dot.Release "Capabilities" $dot.Capabilities)>: error calling include: template: no template "common.names.fullname" associated with template "gotpl"

As it tries to call-nested common.names.fullname from the redis sub-chart, this is present in this line: https://github.com/googleforgames/open-match/blob/dbda6c8dc16967d59af61e7ca4d4bd0e28bf330d/install/helm/open-match/templates/_helpers.tpl#L115

Describe the solution you'd like Ideally I'd be able to provide the name of my own secret, or at least have it default to something that doesn't necessarily requires the redis subchart to be deployed. It should be possible to pass a Values.redis.secretName, and only if that's not provided, attempt to retrieve the name from the subchart.