Skip to content

Commit 68a874f

Browse files
authored
sample release extension (#129)
Signed-off-by: Michael Kalantar <[email protected]>
1 parent 52d90ac commit 68a874f

File tree

6 files changed

+201
-0
lines changed

6 files changed

+201
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
{{- define "env.knative-istio.blue-green.routemap" }}
2+
3+
{{- $APP_NAME := (include "application.name" .) }}
4+
{{- $APP_NAMESPACE := (include "application.namespace" .) }}
5+
{{- $versions := include "normalize.versions.ksvc" . | mustFromJson }}
6+
7+
apiVersion: v1
8+
kind: ConfigMap
9+
{{- template "routemap.metadata" . }}
10+
data:
11+
strSpec: |
12+
versions:
13+
{{- range $i, $v := $versions }}
14+
- resources:
15+
- gvrShort: ksvc
16+
name: {{ template "ksvc.name" $v }}
17+
namespace: {{ template "ksvc.namespace" $v }}
18+
- gvrShort: cm
19+
name: {{ $v.VERSION_NAME }}-weight-config
20+
namespace: {{ $v.VERSION_NAMESPACE }}
21+
weight: {{ $v.weight }}
22+
{{- end }} {{- /* range $i, $v := $versions */}}
23+
routingTemplates:
24+
{{ .Values.application.strategy }}:
25+
gvrShort: vs
26+
template: |
27+
apiVersion: networking.istio.io/v1beta1
28+
kind: VirtualService
29+
metadata:
30+
name: {{ $APP_NAME }}
31+
namespace: {{ $APP_NAMESPACE }}
32+
spec:
33+
gateways:
34+
{{- if .Values.gateway }}
35+
- {{ .Values.gateway }}
36+
{{- end }}
37+
- mesh
38+
hosts:
39+
- {{ $APP_NAME }}.{{ $APP_NAMESPACE }}
40+
- {{ $APP_NAME }}.{{ $APP_NAMESPACE }}.svc
41+
- {{ $APP_NAME }}.{{ $APP_NAMESPACE }}.svc.cluster.local
42+
http:
43+
- name: {{ $APP_NAME }}
44+
route:
45+
# primary version
46+
{{- $v := (index $versions 0) }}
47+
- destination:
48+
host: {{ template "ksvc.name" $v }}.{{ $APP_NAMESPACE }}.svc.cluster.local
49+
port:
50+
number: {{ $v.port }}
51+
{{- if gt (len $versions) 1 }}
52+
{{ `{{- if gt (index .Weights 1) 0 }}` }}
53+
weight: {{ `{{ index .Weights 0 }}` }}
54+
{{ `{{- end }}` }}
55+
{{- end }}
56+
headers:
57+
request:
58+
add:
59+
Host: {{ template "ksvc.name" $v }}.{{ $APP_NAMESPACE }}.svc.cluster.local
60+
response:
61+
add:
62+
app-version: {{ template "ksvc.name" $v }}
63+
# other versions
64+
{{- range $i, $v := (rest $versions) }}
65+
{{ `{{- if gt (index .Weights ` }}{{ print (add1 $i) }}{{ `) 0 }}` }}
66+
- destination:
67+
host: {{ template "ksvc.name" $v }}.{{ $APP_NAMESPACE }}.svc.cluster.local
68+
port:
69+
number: {{ $v.port }}
70+
weight: {{ `{{ index .Weights ` }}{{ print (add1 $i) }}{{ ` }}` }}
71+
headers:
72+
request:
73+
add:
74+
Host: {{ template "ksvc.name" $v }}.{{ $APP_NAMESPACE }}.svc.cluster.local
75+
response:
76+
add:
77+
app-version: {{ template "ksvc.name" $v }}
78+
{{ `{{- end }}` }}
79+
{{- end }}
80+
{{- end }} {{- /* define "env.knative-istio.blue-green.routemap" */}}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{{- define "env.knative-istio.blue-green" }}
2+
3+
{{- /* prepare versions for simpler processing */}}
4+
{{- $versions := include "normalize.versions.ksvc" . | mustFromJson }}
5+
6+
{{- /* weight-config ConfigMaps */}}
7+
{{- range $i, $v := $versions }}
8+
{{ include "configmap.weight-config" $v }}
9+
---
10+
{{- end }} {{- /* range $i, $v := $versions */}}
11+
12+
{{- /* routemap */}}
13+
{{ include "env.knative-istio.blue-green.routemap" . }}
14+
15+
{{- end }} {{- /* define "env.knative-istio.blue-green" */}}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{{- define "env.knative-istio.service" }}
2+
3+
{{- $APP_NAME := (include "application.name" .) }}
4+
{{- $APP_NAMESPACE := (include "application.namespace" .) }}
5+
6+
apiVersion: v1
7+
kind: Service
8+
metadata:
9+
name: {{ $APP_NAME }}
10+
namespace: {{ $APP_NAMESPACE }}
11+
spec:
12+
externalName: istio-ingressgateway.istio-system.svc.cluster.local
13+
sessionAffinity: None
14+
type: ExternalName
15+
{{- end }} {{- /* define "env.knative-istio.service" */}}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{{- define "env.knative-istio" }}
2+
3+
{{- /* Prepare versions for simpler processing */}}
4+
{{- $versions := include "normalize.versions.ksvc" . | mustFromJson }}
5+
6+
{{- range $i, $v := $versions }}
7+
{{- /* KNative Service */}}
8+
{{ include "env.knative.version.ksvc" $v }}
9+
---
10+
{{- end }} {{- /* range $i, $v := $versions */}}
11+
12+
{{- /* Service */}}
13+
{{ include "env.knative-istio.service" . }}
14+
---
15+
16+
{{- /* routemap (and other strategy specific objects) */}}
17+
{{- if eq "blue-green" .Values.application.strategy }}
18+
{{ include "env.knative-istio.blue-green" . }}
19+
{{- end }} {{- /* if eq ... .Values.application.strategy */}}
20+
21+
{{- end }} {{- /* define "env.knative-istio" */}}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{{- /* deployment specific wrapping for normalize.versions */}}
2+
{{- define "normalize.versions.ksvc" }}
3+
{{- $versions := include "normalize.versions" . | mustFromJson }}
4+
{{- $normalizedVersions := list }}
5+
{{- range $i, $v := $versions -}}
6+
{{- $version := merge $v }}
7+
8+
{{- $version = set $version "port" (pluck "port" (dict "port" 80) $.Values.application $v | last) }}
9+
{{- if (and $v.ksvcSpecification $v.ksvcSpecification.ports) }}
10+
{{- $version = set $version "port" (pluck "port" $v (index $v.ksvcSpecification.ports 0) | last) }}
11+
{{- end }}
12+
13+
{{- $normalizedVersions = append $normalizedVersions $version }}
14+
{{- end }} {{- /* range $i, $v := $versions */}}
15+
{{- mustToJson $normalizedVersions }}
16+
{{- end }} {{- /* define "normalize.versions.ksvc" */}}
17+
18+
{{- /* Identify the name of a Knative Service object */ -}}
19+
{{- define "ksvc.name" -}}
20+
{{- if (and .ksvcSpecification .ksvcSpecification.metadata .ksvcSpecification.metadata.name) -}}
21+
{{ .ksvcSpecification.metadata.name }}
22+
{{- else -}}
23+
{{ .VERSION_NAME }}
24+
{{- end -}}
25+
{{- end }} {{- /* define "ksvc.name" */ -}}
26+
27+
{{- /* Identify the namespace of a Knative Service object */ -}}
28+
{{- define "ksvc.namespace" -}}
29+
{{- if (and .ksvcSpecification .ksvcSpecification.metadata .ksvcSpecification.metadata.namespace) -}}
30+
{{ .ksvcSpecification.metadata.namespace }}
31+
{{- else -}}
32+
{{ .VERSION_NAMESPACE }}
33+
{{- end -}}
34+
{{- end }} {{- /* define "ksvc.namespace" */ -}}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{{- define "env.knative.version.ksvc" }}
2+
3+
{{- /* compute basic metadata */}}
4+
{{- $metadata := include "application.version.metadata" . | mustFromJson }}
5+
6+
{{- /* define Service */}}
7+
apiVersion: serving.knative.dev/v1
8+
kind: Service
9+
{{- if .ksvcSpecification }}
10+
metadata:
11+
{{- if .ksvcSpecification.metadata }}
12+
{{ toYaml (merge .ksvcSpecification.metadata $metadata) | nindent 2 | trim }}
13+
{{- else }}
14+
{{ toYaml $metadata | nindent 2 | trim }}
15+
{{- end }} {{- /* if .ksvcSpecification.metadata */}}
16+
spec:
17+
{{ toYaml .ksvcSpecification.spec | nindent 2 | trim }}
18+
{{- else }} {{- /* if .ksvcSpecification */}}
19+
{{- if not .image }} {{- /* require .image */}}
20+
{{- print "missing field: image required when deploymentSpecification absent" | fail }}
21+
{{- end }} {{- /* if not .image */}}
22+
{{- if not .port }} {{- /* require .port */}}
23+
{{- print "missing field: port required when deploymentSpecification absent" | fail }}
24+
{{- end }} {{- /* if not .port */}}
25+
metadata:
26+
{{ toYaml $metadata | nindent 2 | trim }}
27+
spec:
28+
template:
29+
spec:
30+
containers:
31+
- image: {{ .image }}
32+
ports:
33+
- containerPort: {{ .port }}
34+
{{- end }} {{- /* if .ksvcSpecification */}}
35+
36+
{{- end }} {{- /* define "env.knative.version.ksvc" */}}

0 commit comments

Comments
 (0)