feat(*): remove Time, Namespace, and Revision from template functions

Removes Time, Namespace, and Revision from being exposed to templates to
make template rendering discrete and repeatable.
pull/4091/head
Adam Reese 7 years ago
parent 61055510ff
commit aa859e3f88
No known key found for this signature in database
GPG Key ID: 06F35E60A7A18DD6

@ -166,8 +166,6 @@ func (o *templateOptions) run(out io.Writer) error {
}
options := chartutil.ReleaseOptions{
Name: o.releaseName,
Time: time.Now(),
Namespace: getNamespace(),
}
if err := chartutil.ProcessRequirementsEnabled(c, config); err != nil {

@ -6,7 +6,6 @@ metadata:
name: subchart1
labels:
chart: "subchart1-0.1.0"
namespace: "default"
release-name: "RELEASE-NAME"
kube-version/major: "1"
kube-version/minor: "9"

@ -42,7 +42,6 @@ metadata:
name: subchart1
labels:
chart: "subchart1-0.1.0"
namespace: "default"
release-name: "RELEASE-NAME"
kube-version/major: "1"
kube-version/minor: "6"

@ -42,7 +42,6 @@ metadata:
name: subchart1
labels:
chart: "subchart1-0.1.0"
namespace: "default"
release-name: "foobar-YWJj-baz"
kube-version/major: "1"
kube-version/minor: "9"

@ -42,7 +42,6 @@ metadata:
name: subchart1
labels:
chart: "subchart1-0.1.0"
namespace: "default"
release-name: "test"
kube-version/major: "1"
kube-version/minor: "9"

@ -42,7 +42,6 @@ metadata:
name: subchart1
labels:
chart: "subchart1-0.1.0"
namespace: "default"
release-name: "RELEASE-NAME"
kube-version/major: "1"
kube-version/minor: "9"

@ -6,7 +6,6 @@ metadata:
name: subchart1
labels:
chart: "subchart1-0.1.0"
namespace: "default"
release-name: "RELEASE-NAME"
kube-version/major: "1"
kube-version/minor: "9"

@ -42,7 +42,6 @@ metadata:
name: subchart1
labels:
chart: "subchart1-0.1.0"
namespace: "default"
release-name: "RELEASE-NAME"
kube-version/major: "1"
kube-version/minor: "9"

@ -42,7 +42,6 @@ metadata:
name: subchart1
labels:
chart: "subchart1-0.1.0"
namespace: "default"
release-name: "RELEASE-NAME"
kube-version/major: "1"
kube-version/minor: "9"

@ -13,8 +13,6 @@ metadata:
# This makes it easy to audit chart usage.
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
values: {{.Values.test.Name}}
annotations:
"helm.sh/created": {{.Release.Time.Seconds | quote }}
spec:
# This shows how to use a simple value. This will look for a passed-in value
# called restartPolicy. If it is not found, it will use the default value.

@ -12,8 +12,6 @@ metadata:
release: {{.Release.Name | quote }}
# This makes it easy to audit chart usage.
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
annotations:
"helm.sh/created": {{.Release.Time.Seconds | quote }}
spec:
# This shows how to use a simple value. This will look for a passed-in value
# called restartPolicy. If it is not found, it will use the default value.

@ -6,8 +6,6 @@ metadata:
heritage: {{.Release.Service}}
chartName: {{.Chart.Name}}
chartVersion: {{.Chart.Version | quote}}
annotations:
"helm.sh/created": "{{.Release.Time.Seconds}}"
spec:
restartPolicy: {{default "Never" .restart_policy}}
containers:

@ -8,10 +8,7 @@ In the previous section, we use `{{.Release.Name}}` to insert the name of a rele
- `Release`: This object describes the release itself. It has several objects inside of it:
- `Release.Name`: The release name
- `Release.Time`: The time of the release
- `Release.Namespace`: The namespace to be released into (if the manifest doesn't override)
- `Release.Service`: The name of the releasing service (always `Tiller`).
- `Release.Revision`: The revision number of this release. It begins at 1 and is incremented for each `helm upgrade`.
- `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.
- `Values`: Values passed into the template from the `values.yaml` file and from user-supplied files. By default, `Values` is empty.

@ -179,7 +179,7 @@ Say we've defined a simple template that looks like this:
```yaml
{{- define "mychart.app" -}}
app_name: {{ .Chart.Name }}
app_version: "{{ .Chart.Version }}+{{ .Release.Time.Seconds }}"
app_version: "{{ .Chart.Version }}"
{{- end -}}
```

@ -574,16 +574,11 @@ cannot be overridden. As with all values, the names are _case
sensitive_.
- `Release.Name`: The name of the release (not the chart)
- `Release.Time`: The time the chart release was last updated. This will
match the `Last Released` time on a Release object.
- `Release.Namespace`: The namespace the chart was released to.
- `Release.Service`: The service that conducted the release. Usually
this is `Tiller`.
- `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. It begins at 1, and increments with
each `helm upgrade`.
- `Chart`: The contents of the `Chart.yaml`. Thus, the chart version is
obtainable as `Chart.Version` and the maintainers are in
`Chart.Maintainers`.

@ -243,16 +243,16 @@ const defaultNotes = `1. Get the application URL by running these commands:
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }}
{{- end }}
{{- else if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "<CHARTNAME>.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
export NODE_PORT=$(kubectl get -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "<CHARTNAME>.fullname" . }})
export NODE_IP=$(kubectl get nodes -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get svc -w {{ template "<CHARTNAME>.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "<CHARTNAME>.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export SERVICE_IP=$(kubectl get svc {{ template "<CHARTNAME>.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }}
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "<CHARTNAME>.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
export POD_NAME=$(kubectl get pods -l "app={{ template "<CHARTNAME>.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl port-forward $POD_NAME 8080:80
{{- end }}

@ -6,8 +6,6 @@ metadata:
heritage: {{.Release.Service}}
chartName: {{.Chart.Name}}
chartVersion: {{.Chart.Version | quote}}
annotations:
"helm.sh/created": "{{.Release.Time.Seconds}}"
spec:
restartPolicy: {{default "Never" .restart_policy}}
containers:

@ -6,8 +6,6 @@ metadata:
heritage: {{.Release.Service}}
chartName: {{.Chart.Name}}
chartVersion: {{.Chart.Version | quote}}
annotations:
"helm.sh/created": "{{.Release.Time.Seconds}}"
spec:
restartPolicy: {{default "Never" .restart_policy}}
containers:

@ -6,8 +6,6 @@ metadata:
heritage: {{.Release.Service}}
chartName: {{.Chart.Name}}
chartVersion: {{.Chart.Version | quote}}
annotations:
"helm.sh/created": "{{.Release.Time.Seconds}}"
spec:
restartPolicy: {{default "Never" .restart_policy}}
containers:

@ -6,8 +6,6 @@ metadata:
heritage: {{.Release.Service}}
chartName: {{.Chart.Name}}
chartVersion: {{.Chart.Version | quote}}
annotations:
"helm.sh/created": "{{.Release.Time.Seconds}}"
spec:
restartPolicy: {{default "Never" .restart_policy}}
containers:

@ -6,8 +6,6 @@ metadata:
heritage: {{.Release.Service}}
chartName: {{.Chart.Name}}
chartVersion: {{.Chart.Version | quote}}
annotations:
"helm.sh/created": "{{.Release.Time.Seconds}}"
spec:
restartPolicy: {{default "Never" .restart_policy}}
containers:

@ -6,8 +6,6 @@ metadata:
heritage: {{.Release.Service}}
chartName: {{.Chart.Name}}
chartVersion: {{.Chart.Version | quote}}
annotations:
"helm.sh/created": "{{.Release.Time.Seconds}}"
spec:
restartPolicy: {{default "Never" .restart_policy}}
containers:

@ -6,8 +6,6 @@ metadata:
heritage: {{.Release.Service}}
chartName: {{.Chart.Name}}
chartVersion: {{.Chart.Version | quote}}
annotations:
"helm.sh/created": "{{.Release.Time.Seconds}}"
spec:
restartPolicy: {{default "Never" .restart_policy}}
containers:

@ -4,7 +4,6 @@ metadata:
name: {{ .Chart.Name }}
labels:
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
namespace: "{{ .Release.Namespace }}"
release-name: "{{ .Release.Name }}"
kube-version/major: "{{ .Capabilities.KubeVersion.Major }}"
kube-version/minor: "{{ .Capabilities.KubeVersion.Minor }}"

@ -21,7 +21,6 @@ import (
"io/ioutil"
"log"
"strings"
"time"
"github.com/ghodss/yaml"
"github.com/pkg/errors"
@ -335,11 +334,8 @@ func coalesceTables(dst, src map[string]interface{}) map[string]interface{} {
// for the composition of the final values struct
type ReleaseOptions struct {
Name string
Time time.Time
Namespace string
IsUpgrade bool
IsInstall bool
Revision int
}
// ToRenderValues composes the struct from the data coming from the Releases, Charts and Values files
@ -361,11 +357,8 @@ func ToRenderValuesCaps(chrt *chart.Chart, chrtVals []byte, options ReleaseOptio
top := map[string]interface{}{
"Release": map[string]interface{}{
"Name": options.Name,
"Time": options.Time,
"Namespace": options.Namespace,
"IsUpgrade": options.IsUpgrade,
"IsInstall": options.IsInstall,
"Revision": options.Revision,
"Service": "Helm",
},
"Chart": chrt.Metadata,

@ -22,7 +22,6 @@ import (
"fmt"
"testing"
"text/template"
"time"
kversion "k8s.io/apimachinery/pkg/version"
@ -104,10 +103,7 @@ where:
o := ReleaseOptions{
Name: "Seven Voyages",
Time: time.Now(),
Namespace: "al Basrah",
IsInstall: true,
Revision: 5,
}
caps := &Capabilities{
@ -129,9 +125,6 @@ where:
if name := relmap["Name"]; name.(string) != "Seven Voyages" {
t.Errorf("Expected release name 'Seven Voyages', got %q", name)
}
if rev := relmap["Revision"]; rev.(int) != 5 {
t.Errorf("Expected release revision %d, got %q", 5, rev)
}
if relmap["IsUpgrade"].(bool) {
t.Error("Expected upgrade to be false.")
}

@ -6,8 +6,6 @@ metadata:
heritage: {{.Release.Service}}
chartName: {{.Chart.Name}}
chartVersion: {{.Chart.Version | quote}}
annotations:
"helm.sh/created": "{{.Release.Time.Seconds}}"
spec:
restartPolicy: {{default "Never" .restart_policy}}
containers:

@ -19,7 +19,6 @@ package rules
import (
"os"
"path/filepath"
"time"
"github.com/ghodss/yaml"
"github.com/pkg/errors"
@ -51,7 +50,7 @@ func Templates(linter *support.Linter, values []byte, namespace string, strict b
return
}
options := chartutil.ReleaseOptions{Name: "testRelease", Time: time.Now(), Namespace: namespace}
options := chartutil.ReleaseOptions{Name: "testRelease"}
caps := &chartutil.Capabilities{
APIVersions: chartutil.DefaultVersionSet,
KubeVersion: chartutil.DefaultKubeVersion,

@ -69,9 +69,6 @@ func (s *ReleaseServer) prepareRelease(req *hapi.InstallReleaseRequest) (*releas
ts := time.Now()
options := chartutil.ReleaseOptions{
Name: name,
Time: ts,
Namespace: req.Namespace,
Revision: revision,
IsInstall: true,
}
valuesToRender, err := chartutil.ToRenderValuesCaps(req.Chart, req.Values, options, caps)

@ -98,10 +98,7 @@ func (s *ReleaseServer) prepareUpdate(req *hapi.UpdateReleaseRequest) (*release.
ts := time.Now()
options := chartutil.ReleaseOptions{
Name: req.Name,
Time: ts,
Namespace: currentRelease.Namespace,
IsUpgrade: true,
Revision: revision,
}
caps, err := capabilities(s.discovery)

Loading…
Cancel
Save