When you deploy the chart you get the following error: <.Chart.name>: can't evaluate field name in type interface {}
As per official helm documentation there are terms Predefined Values and Built-in Objects
The built-in values always begin with a capital letter. This is in keeping with Go’s naming convention. When you create your own names, you are free to use a convention that suits your team
List of those mandatory capitalized built-in values
Release: This object describes the release itself. It has several objects inside of it:Release.Name: The release nameRelease.Namespace: The namespace to be released into (if the manifest doesn’t override)Release.IsUpgrade: This is set to true if the current operation is an upgrade or rollback.Release.IsInstall: This is set to true if the current operation is an install.Release.Revision: The revision number for this release. On install, this is 1, and it is incremented with each upgrade and rollback.Release.Service: The service that is rendering the present template. On Helm, this is always Helm.Values: Values passed into the template from the values.yaml file and from user-supplied files. By default, Values is empty.Chart: The contents of the Chart.yaml file. Any data in Chart.yaml will be accessible here. For example {{ .Chart.Name }}-{{ .Chart.Version }} will print out the mychart-0.1.0.Files: This provides access to all non-special files in a chart. While you cannot use it to access templates, you can use it to access other files in the chart. See the section Accessing Files for more.Files.Get is a function for getting a file by name (.Files.Get config.ini)Files.GetBytes is a function for getting the contents of a file as an array of bytes instead of as a string. This is useful for things like images.Files.Glob is a function that returns a list of files whose names match the given shell glob pattern.Files.Lines is a function that reads a file line-by-line. This is useful for iterating over each line in a file.Files.AsSecrets is a function that returns the file bodies as Base 64 encoded strings.Files.AsConfig is a function that returns file bodies as a YAML map.Capabilities: This provides information about what capabilities the Kubernetes cluster supports.Capabilities.APIVersions is a set of versions.Capabilities.APIVersions.Has $version indicates whether a version (e.g., batch/v1) or resource (e.g., apps/v1/Deployment) is available on the cluster.Capabilities.KubeVersion and Capabilities.KubeVersion.Version is the Kubernetes version.Capabilities.KubeVersion.Major is the Kubernetes major version.Capabilities.KubeVersion.Minor is the Kubernetes minor version.Template: Contains information about the current template that is being executedName: A namespaced file path to the current template (e.g. mychart/templates/mytemplate.yaml)BasePath: The namespaced path to the templates directory of the current chart (e.g. mychart/templates).Small example:
apiVersion: v1
kind: Service
metadata:
name: {{ template "fullname" . }}
labels:
chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.externalPort }}
targetPort: {{ .Values.service.internalPort }}
protocol: TCP
name: {{ .Values.service.name }}
selector:
app: {{ template "fullname" . }}And again - feel free to use any other manually defined values with lower-case. Hope it helps
It's a beginner mistake, fields start with upper case even though Chart.yaml field starts with lower case. Same with Chart.Version and all the other fields.
Very weird for java developers.