`nodeSelector` was a top-level value although it exclusively configures the pod spec of the Gitea Deployment. With `affinity`, `dnsConfig` and the container environment already moved into the `deployment` dict, keeping `nodeSelector` at the root level leaves the scheduling configuration split across two places. Moving it into the `deployment` dict continues the consolidation of Deployment-scoped values and keeps `nodeSelector` next to the closely related `affinity` setting. The `@param` annotations are grouped with the values they document so the generated README table stays in sync with the structure. A deprecation check is added so that existing installations fail fast with an actionable error message. Without it, the node selection would be dropped silently and pods could be scheduled on nodes that do not meet the intended requirements. BREAKING CHANGE: `nodeSelector` no longer exists. Use `deployment.nodeSelector` instead. Installations that still set `nodeSelector` will fail unless `checkDeprecation` is set to `false`. Co-authored-by: Copilot <copilot@github.com>
221 lines
6.6 KiB
YAML
221 lines
6.6 KiB
YAML
suite: deployment template (basic)
|
|
release:
|
|
name: gitea-unittests
|
|
namespace: testing
|
|
templates:
|
|
- templates/gitea/deployment.yaml
|
|
- templates/gitea/secret_admin.yaml
|
|
- templates/gitea/secret_config.yaml
|
|
- templates/gitea/secret_gpg.yaml
|
|
- templates/gitea/secret_init.yaml
|
|
- templates/gitea/secret_inlineConfig.yaml
|
|
- templates/gitea/secret_metrics.yaml
|
|
tests:
|
|
- it: renders a deployment
|
|
template: templates/gitea/deployment.yaml
|
|
asserts:
|
|
- hasDocuments:
|
|
count: 1
|
|
- containsDocument:
|
|
kind: Deployment
|
|
apiVersion: apps/v1
|
|
name: gitea-unittests
|
|
- it: renders no deployment when disabled
|
|
template: templates/gitea/deployment.yaml
|
|
set:
|
|
deployment.enabled: false
|
|
asserts:
|
|
- hasDocuments:
|
|
count: 0
|
|
- it: deployment labels are set
|
|
template: templates/gitea/deployment.yaml
|
|
set:
|
|
deployment.labels:
|
|
hello: world
|
|
asserts:
|
|
- isSubset:
|
|
path: metadata.labels
|
|
content:
|
|
hello: world
|
|
- isSubset:
|
|
path: spec.template.metadata.labels
|
|
content:
|
|
hello: world
|
|
- isNotSubset:
|
|
path: spec.selector.matchLabels
|
|
content:
|
|
hello: world
|
|
- it: deployment labels are not in selector matchLabels
|
|
template: templates/gitea/deployment.yaml
|
|
set:
|
|
deployment.labels:
|
|
custom-label: custom-value
|
|
another-label: another-value
|
|
asserts:
|
|
- equal:
|
|
path: spec.selector.matchLabels
|
|
value:
|
|
app.kubernetes.io/name: gitea
|
|
app.kubernetes.io/instance: gitea-unittests
|
|
- it: nodeSelector is undefined
|
|
asserts:
|
|
- notExists:
|
|
path: spec.template.spec.nodeSelector
|
|
template: templates/gitea/deployment.yaml
|
|
- it: nodeSelector is defined
|
|
set:
|
|
deployment.nodeSelector:
|
|
foo: bar
|
|
bar: foo
|
|
asserts:
|
|
- isSubset:
|
|
path: spec.template.spec.nodeSelector
|
|
content:
|
|
foo: bar
|
|
bar: foo
|
|
template: templates/gitea/deployment.yaml
|
|
- it: affinity is undefined
|
|
template: templates/gitea/deployment.yaml
|
|
asserts:
|
|
- notExists:
|
|
path: spec.template.spec.affinity
|
|
- it: affinity is defined
|
|
template: templates/gitea/deployment.yaml
|
|
set:
|
|
deployment.affinity:
|
|
nodeAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
nodeSelectorTerms:
|
|
- matchExpressions:
|
|
- key: kubernetes.io/os
|
|
operator: In
|
|
values:
|
|
- linux
|
|
asserts:
|
|
- equal:
|
|
path: spec.template.spec.affinity
|
|
value:
|
|
nodeAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
nodeSelectorTerms:
|
|
- matchExpressions:
|
|
- key: kubernetes.io/os
|
|
operator: In
|
|
values:
|
|
- linux
|
|
- it: dnsConfig is undefined
|
|
template: templates/gitea/deployment.yaml
|
|
asserts:
|
|
- notExists:
|
|
path: spec.template.spec.dnsConfig
|
|
- it: dnsConfig is defined
|
|
template: templates/gitea/deployment.yaml
|
|
set:
|
|
deployment.dnsConfig:
|
|
nameservers:
|
|
- 192.0.2.1
|
|
options:
|
|
- name: ndots
|
|
value: "2"
|
|
asserts:
|
|
- equal:
|
|
path: spec.template.spec.dnsConfig
|
|
value:
|
|
nameservers:
|
|
- 192.0.2.1
|
|
options:
|
|
- name: ndots
|
|
value: "2"
|
|
|
|
- it: "injects TMP_EXISTING_ENVS_FILE as environment variable to 'init-app-ini' init container"
|
|
template: templates/gitea/deployment.yaml
|
|
asserts:
|
|
- contains:
|
|
path: spec.template.spec.initContainers[1].env
|
|
content:
|
|
name: TMP_EXISTING_ENVS_FILE
|
|
value: /tmp/existing-envs
|
|
- it: "injects ENV_TO_INI_MOUNT_POINT as environment variable to 'init-app-ini' init container"
|
|
template: templates/gitea/deployment.yaml
|
|
asserts:
|
|
- contains:
|
|
path: spec.template.spec.initContainers[1].env
|
|
content:
|
|
name: ENV_TO_INI_MOUNT_POINT
|
|
value: /env-to-ini-mounts
|
|
- it: "deployment.gitea.env is injected into all init containers and the gitea container"
|
|
template: templates/gitea/deployment.yaml
|
|
set:
|
|
deployment.gitea.env:
|
|
- name: VARIABLE
|
|
value: my-value
|
|
asserts:
|
|
- contains:
|
|
path: spec.template.spec.initContainers[0].env
|
|
content:
|
|
name: VARIABLE
|
|
value: my-value
|
|
- contains:
|
|
path: spec.template.spec.initContainers[1].env
|
|
content:
|
|
name: VARIABLE
|
|
value: my-value
|
|
- contains:
|
|
path: spec.template.spec.initContainers[2].env
|
|
content:
|
|
name: VARIABLE
|
|
value: my-value
|
|
- contains:
|
|
path: spec.template.spec.containers[0].env
|
|
content:
|
|
name: VARIABLE
|
|
value: my-value
|
|
- it: CPU resources are defined as well as GOMAXPROCS
|
|
template: templates/gitea/deployment.yaml
|
|
set:
|
|
resources:
|
|
limits:
|
|
cpu: 200ms
|
|
memory: 200Mi
|
|
requests:
|
|
cpu: 100ms
|
|
memory: 100Mi
|
|
asserts:
|
|
- contains:
|
|
path: spec.template.spec.containers[0].env
|
|
content:
|
|
name: GOMAXPROCS
|
|
valueFrom:
|
|
resourceFieldRef:
|
|
divisor: "1"
|
|
resource: limits.cpu
|
|
- equal:
|
|
path: spec.template.spec.containers[0].resources
|
|
value:
|
|
limits:
|
|
cpu: 200ms
|
|
memory: 200Mi
|
|
requests:
|
|
cpu: 100ms
|
|
memory: 100Mi
|
|
- it: Init containers have correct volumeMount path
|
|
template: templates/gitea/deployment.yaml
|
|
set:
|
|
initContainersScriptsVolumeMountPath: "/custom/init/path"
|
|
asserts:
|
|
- equal:
|
|
path: spec.template.spec.initContainers[*].volumeMounts[?(@.name=="init")].mountPath
|
|
value: "/custom/init/path"
|
|
- equal:
|
|
path: spec.template.spec.initContainers[*].volumeMounts[?(@.name=="config")].mountPath
|
|
value: "/custom/init/path"
|
|
- it: Init containers have correct volumeMount path if there is no override
|
|
template: templates/gitea/deployment.yaml
|
|
asserts:
|
|
- equal:
|
|
path: spec.template.spec.initContainers[*].volumeMounts[?(@.name=="init")].mountPath
|
|
value: "/usr/sbinx"
|
|
- equal:
|
|
path: spec.template.spec.initContainers[*].volumeMounts[?(@.name=="config")].mountPath
|
|
value: "/usr/sbinx"
|