Skip to content

Commit 25c1e45

Browse files
authored
chore(helm): add unit tests for setting labels / annotations on serviceaccount / deployment / pod (#7156)
* chore(helm): add unit tests for setting sa annotations * chore(cli): also add test for labels / annotations / podLabels / podAnnotations
1 parent 26cfc18 commit 25c1e45

File tree

5 files changed

+367
-0
lines changed

5 files changed

+367
-0
lines changed

helm/tests/chart_test.go

+8
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ var TestCases = []TestCase{
3636
name: "tls",
3737
expectedError: "",
3838
},
39+
{
40+
name: "sa",
41+
expectedError: "",
42+
},
43+
{
44+
name: "labels_annotations",
45+
expectedError: "",
46+
},
3947
}
4048

4149
type TestCase struct {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
---
2+
# Source: coder/templates/coder.yaml
3+
apiVersion: v1
4+
kind: ServiceAccount
5+
metadata:
6+
name: "coder"
7+
annotations:
8+
{}
9+
labels:
10+
helm.sh/chart: coder-0.1.0
11+
app.kubernetes.io/name: coder
12+
app.kubernetes.io/instance: release-name
13+
app.kubernetes.io/part-of: coder
14+
app.kubernetes.io/version: "0.1.0"
15+
app.kubernetes.io/managed-by: Helm
16+
---
17+
# Source: coder/templates/rbac.yaml
18+
apiVersion: rbac.authorization.k8s.io/v1
19+
kind: Role
20+
metadata:
21+
name: coder-workspace-perms
22+
rules:
23+
- apiGroups: [""]
24+
resources: ["pods"]
25+
verbs: ["*"]
26+
- apiGroups: [""]
27+
resources: ["persistentvolumeclaims"]
28+
verbs: ["*"]
29+
---
30+
# Source: coder/templates/rbac.yaml
31+
apiVersion: rbac.authorization.k8s.io/v1
32+
kind: RoleBinding
33+
metadata:
34+
name: "coder"
35+
subjects:
36+
- kind: ServiceAccount
37+
name: "coder"
38+
roleRef:
39+
apiGroup: rbac.authorization.k8s.io
40+
kind: Role
41+
name: coder-workspace-perms
42+
---
43+
# Source: coder/templates/service.yaml
44+
apiVersion: v1
45+
kind: Service
46+
metadata:
47+
name: coder
48+
labels:
49+
helm.sh/chart: coder-0.1.0
50+
app.kubernetes.io/name: coder
51+
app.kubernetes.io/instance: release-name
52+
app.kubernetes.io/part-of: coder
53+
app.kubernetes.io/version: "0.1.0"
54+
app.kubernetes.io/managed-by: Helm
55+
annotations:
56+
{}
57+
spec:
58+
type: LoadBalancer
59+
sessionAffinity: ClientIP
60+
ports:
61+
- name: "http"
62+
port: 80
63+
targetPort: "http"
64+
protocol: TCP
65+
externalTrafficPolicy: "Cluster"
66+
selector:
67+
app.kubernetes.io/name: coder
68+
app.kubernetes.io/instance: release-name
69+
---
70+
# Source: coder/templates/coder.yaml
71+
apiVersion: apps/v1
72+
kind: Deployment
73+
metadata:
74+
name: coder
75+
labels:
76+
helm.sh/chart: coder-0.1.0
77+
app.kubernetes.io/name: coder
78+
app.kubernetes.io/instance: release-name
79+
app.kubernetes.io/part-of: coder
80+
app.kubernetes.io/version: "0.1.0"
81+
app.kubernetes.io/managed-by: Helm
82+
com.coder/label/baz: qux
83+
com.coder/label/foo: bar
84+
annotations:
85+
com.coder/annotation/baz: qux
86+
com.coder/annotation/foo: bar
87+
spec:
88+
replicas: 1
89+
selector:
90+
matchLabels:
91+
app.kubernetes.io/name: coder
92+
app.kubernetes.io/instance: release-name
93+
template:
94+
metadata:
95+
labels:
96+
helm.sh/chart: coder-0.1.0
97+
app.kubernetes.io/name: coder
98+
app.kubernetes.io/instance: release-name
99+
app.kubernetes.io/part-of: coder
100+
app.kubernetes.io/version: "0.1.0"
101+
app.kubernetes.io/managed-by: Helm
102+
com.coder/podLabel/baz: qux
103+
com.coder/podLabel/foo: bar
104+
annotations:
105+
com.coder/podAnnotation/baz: qux
106+
com.coder/podAnnotation/foo: bar
107+
spec:
108+
serviceAccountName: "coder"
109+
restartPolicy: Always
110+
terminationGracePeriodSeconds: 60
111+
affinity:
112+
podAntiAffinity:
113+
preferredDuringSchedulingIgnoredDuringExecution:
114+
- podAffinityTerm:
115+
labelSelector:
116+
matchExpressions:
117+
- key: app.kubernetes.io/instance
118+
operator: In
119+
values:
120+
- coder
121+
topologyKey: kubernetes.io/hostname
122+
weight: 1
123+
containers:
124+
- name: coder
125+
image: "ghcr.io/coder/coder:latest"
126+
imagePullPolicy: IfNotPresent
127+
resources:
128+
{}
129+
lifecycle:
130+
{}
131+
env:
132+
- name: CODER_HTTP_ADDRESS
133+
value: "0.0.0.0:8080"
134+
- name: CODER_PROMETHEUS_ADDRESS
135+
value: "0.0.0.0:2112"
136+
# Set the default access URL so a `helm apply` works by default.
137+
# See: https://github.com/coder/coder/issues/5024
138+
- name: CODER_ACCESS_URL
139+
value: "http://coder.default.svc.cluster.local"
140+
# Used for inter-pod communication with high-availability.
141+
- name: KUBE_POD_IP
142+
valueFrom:
143+
fieldRef:
144+
fieldPath: status.podIP
145+
- name: CODER_DERP_SERVER_RELAY_URL
146+
value: "http://$(KUBE_POD_IP):8080"
147+
148+
ports:
149+
- name: "http"
150+
containerPort: 8080
151+
protocol: TCP
152+
securityContext:
153+
allowPrivilegeEscalation: false
154+
readOnlyRootFilesystem: null
155+
runAsGroup: 1000
156+
runAsNonRoot: true
157+
runAsUser: 1000
158+
seccompProfile:
159+
type: RuntimeDefault
160+
readinessProbe:
161+
httpGet:
162+
path: /api/v2/buildinfo
163+
port: "http"
164+
scheme: "HTTP"
165+
livenessProbe:
166+
httpGet:
167+
path: /api/v2/buildinfo
168+
port: "http"
169+
scheme: "HTTP"
170+
volumeMounts: []
171+
volumes: []
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
coder:
2+
image:
3+
tag: latest
4+
annotations:
5+
com.coder/annotation/foo: bar
6+
com.coder/annotation/baz: qux
7+
labels:
8+
com.coder/label/foo: bar
9+
com.coder/label/baz: qux
10+
podAnnotations:
11+
com.coder/podAnnotation/foo: bar
12+
com.coder/podAnnotation/baz: qux
13+
podLabels:
14+
com.coder/podLabel/foo: bar
15+
com.coder/podLabel/baz: qux

helm/tests/testdata/sa.golden

+165
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
---
2+
# Source: coder/templates/coder.yaml
3+
apiVersion: v1
4+
kind: ServiceAccount
5+
metadata:
6+
name: "coder-service-account"
7+
annotations:
8+
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/coder-service-account
9+
labels:
10+
helm.sh/chart: coder-0.1.0
11+
app.kubernetes.io/name: coder
12+
app.kubernetes.io/instance: release-name
13+
app.kubernetes.io/part-of: coder
14+
app.kubernetes.io/version: "0.1.0"
15+
app.kubernetes.io/managed-by: Helm
16+
---
17+
# Source: coder/templates/rbac.yaml
18+
apiVersion: rbac.authorization.k8s.io/v1
19+
kind: Role
20+
metadata:
21+
name: coder-workspace-perms
22+
rules:
23+
- apiGroups: [""]
24+
resources: ["pods"]
25+
verbs: ["*"]
26+
- apiGroups: [""]
27+
resources: ["persistentvolumeclaims"]
28+
verbs: ["*"]
29+
---
30+
# Source: coder/templates/rbac.yaml
31+
apiVersion: rbac.authorization.k8s.io/v1
32+
kind: RoleBinding
33+
metadata:
34+
name: "coder-service-account"
35+
subjects:
36+
- kind: ServiceAccount
37+
name: "coder-service-account"
38+
roleRef:
39+
apiGroup: rbac.authorization.k8s.io
40+
kind: Role
41+
name: coder-workspace-perms
42+
---
43+
# Source: coder/templates/service.yaml
44+
apiVersion: v1
45+
kind: Service
46+
metadata:
47+
name: coder
48+
labels:
49+
helm.sh/chart: coder-0.1.0
50+
app.kubernetes.io/name: coder
51+
app.kubernetes.io/instance: release-name
52+
app.kubernetes.io/part-of: coder
53+
app.kubernetes.io/version: "0.1.0"
54+
app.kubernetes.io/managed-by: Helm
55+
annotations:
56+
{}
57+
spec:
58+
type: LoadBalancer
59+
sessionAffinity: ClientIP
60+
ports:
61+
- name: "http"
62+
port: 80
63+
targetPort: "http"
64+
protocol: TCP
65+
externalTrafficPolicy: "Cluster"
66+
selector:
67+
app.kubernetes.io/name: coder
68+
app.kubernetes.io/instance: release-name
69+
---
70+
# Source: coder/templates/coder.yaml
71+
apiVersion: apps/v1
72+
kind: Deployment
73+
metadata:
74+
name: coder
75+
labels:
76+
helm.sh/chart: coder-0.1.0
77+
app.kubernetes.io/name: coder
78+
app.kubernetes.io/instance: release-name
79+
app.kubernetes.io/part-of: coder
80+
app.kubernetes.io/version: "0.1.0"
81+
app.kubernetes.io/managed-by: Helm
82+
annotations:
83+
{}
84+
spec:
85+
replicas: 1
86+
selector:
87+
matchLabels:
88+
app.kubernetes.io/name: coder
89+
app.kubernetes.io/instance: release-name
90+
template:
91+
metadata:
92+
labels:
93+
helm.sh/chart: coder-0.1.0
94+
app.kubernetes.io/name: coder
95+
app.kubernetes.io/instance: release-name
96+
app.kubernetes.io/part-of: coder
97+
app.kubernetes.io/version: "0.1.0"
98+
app.kubernetes.io/managed-by: Helm
99+
annotations:
100+
{}
101+
spec:
102+
serviceAccountName: "coder-service-account"
103+
restartPolicy: Always
104+
terminationGracePeriodSeconds: 60
105+
affinity:
106+
podAntiAffinity:
107+
preferredDuringSchedulingIgnoredDuringExecution:
108+
- podAffinityTerm:
109+
labelSelector:
110+
matchExpressions:
111+
- key: app.kubernetes.io/instance
112+
operator: In
113+
values:
114+
- coder
115+
topologyKey: kubernetes.io/hostname
116+
weight: 1
117+
containers:
118+
- name: coder
119+
image: "ghcr.io/coder/coder:latest"
120+
imagePullPolicy: IfNotPresent
121+
resources:
122+
{}
123+
lifecycle:
124+
{}
125+
env:
126+
- name: CODER_HTTP_ADDRESS
127+
value: "0.0.0.0:8080"
128+
- name: CODER_PROMETHEUS_ADDRESS
129+
value: "0.0.0.0:2112"
130+
# Set the default access URL so a `helm apply` works by default.
131+
# See: https://github.com/coder/coder/issues/5024
132+
- name: CODER_ACCESS_URL
133+
value: "http://coder.default.svc.cluster.local"
134+
# Used for inter-pod communication with high-availability.
135+
- name: KUBE_POD_IP
136+
valueFrom:
137+
fieldRef:
138+
fieldPath: status.podIP
139+
- name: CODER_DERP_SERVER_RELAY_URL
140+
value: "http://$(KUBE_POD_IP):8080"
141+
142+
ports:
143+
- name: "http"
144+
containerPort: 8080
145+
protocol: TCP
146+
securityContext:
147+
allowPrivilegeEscalation: false
148+
readOnlyRootFilesystem: null
149+
runAsGroup: 1000
150+
runAsNonRoot: true
151+
runAsUser: 1000
152+
seccompProfile:
153+
type: RuntimeDefault
154+
readinessProbe:
155+
httpGet:
156+
path: /api/v2/buildinfo
157+
port: "http"
158+
scheme: "HTTP"
159+
livenessProbe:
160+
httpGet:
161+
path: /api/v2/buildinfo
162+
port: "http"
163+
scheme: "HTTP"
164+
volumeMounts: []
165+
volumes: []

helm/tests/testdata/sa.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
coder:
2+
image:
3+
tag: latest
4+
serviceAccount:
5+
name: coder-service-account
6+
annotations:
7+
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/coder-service-account
8+
workspacePerms: true

0 commit comments

Comments
 (0)