I understand that {{.Release.namespace}}
will render the namespace where the application being installed by helm
. In that case, helm template
command will render it as empty string (since it doesn't know yet the release namespace).
However, what makes me surprise is helm upgrade --install
command (i haven't tried other command such as helm install
) also renders it empty on some cases.
Here is the example of my helm chart template:
apiVersion: v1
kind: Service
metadata:
name: {{.Values.app.name}}-{{.Values.app.track}}-internal
namespace: {{.Release.namespace}}
annotations:
testAnnotate: "{{.Release.namespace}}"
spec:
ports:
- protocol: TCP
port: 80
targetPort: 8080
selector:
app: {{.Values.app.name}}
environment: {{.Values.app.env}}
track: {{.Values.app.track}}
type: ClusterIP
After invoke helm upgrade --install
on that chart template (and installed it successfully), I then try to see the output of my resource
> kubectl get -o yaml svc java-maven-app-stable-internal -n data-devops
apiVersion: v1
kind: Service
metadata:
annotations:
testAnnotate: ""
creationTimestamp: 2018-08-09T06:56:41Z
name: java-maven-app-stable-internal
namespace: data-devops
resourceVersion: "62906341"
selfLink: /api/v1/namespaces/data-devops/services/java-maven-app-stable-internal
uid: 5e888e6a-9ba1-11e8-912b-42010a9400fa
spec:
clusterIP: 10.32.76.208
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: java-maven-app
environment: stg
track: stable
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
As you can see, I put {{.Release.namespace}}
on 2 places:
metadata.namespace
fieldmetadata.annotations.testAnnotate
field.But it only renders the correct namespace on metadata.namespace
field. Any idea why?
The generated value .Release.Namespace
is case-sensitive. The letter N in "namespace" should be capitalized.