mirror of
https://github.com/truenas/charts.git
synced 2026-04-24 02:20:15 +08:00
* Empty-Commit * temp commit * make sure that we use the pv * typo * add validation * typo * cleanup validation and add secret for smb * revert * add some tets * add more tests * add more tests * more tests * rename to share * rename * moar tests * clean * add some docs * fix name uniqueness and tests * make mountOptions validation a bit better * update docs
787 lines
22 KiB
YAML
787 lines
22 KiB
YAML
suite: container volumeMounts test
|
|
templates:
|
|
- common.yaml
|
|
tests:
|
|
- it: should pass with shared volume on multiple workloads and containers with targetSelectAll
|
|
set:
|
|
some_path: /some/path
|
|
image: &image
|
|
repository: nginx
|
|
tag: 1.19.0
|
|
pullPolicy: IfNotPresent
|
|
workload:
|
|
workload-name:
|
|
enabled: true
|
|
primary: true
|
|
type: Deployment
|
|
podSpec:
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: &probes
|
|
liveness:
|
|
enabled: false
|
|
readiness:
|
|
enabled: false
|
|
startup:
|
|
enabled: false
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
workload-name2:
|
|
enabled: true
|
|
primary: false
|
|
type: Job
|
|
podSpec:
|
|
restartPolicy: Never
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
persistence:
|
|
shared-vol:
|
|
enabled: true
|
|
type: emptyDir
|
|
mountPath: "{{ .Values.some_path }}"
|
|
targetSelectAll: true
|
|
nfs-vol-pvc:
|
|
enabled: true
|
|
type: nfs-pv-pvc
|
|
server: my-server
|
|
share: /my-path
|
|
mountPath: /nfs-mount
|
|
targetSelectAll: true
|
|
smb-vol-pvc:
|
|
enabled: true
|
|
type: smb-pv-pvc
|
|
server: my-server
|
|
share: my-share
|
|
username: my-user
|
|
password: my-pass
|
|
mountPath: /smb-mount
|
|
targetSelectAll: true
|
|
asserts:
|
|
- documentIndex: &deploymentDoc 5
|
|
isKind:
|
|
of: Deployment
|
|
- documentIndex: *deploymentDoc
|
|
isAPIVersion:
|
|
of: apps/v1
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: shared-vol
|
|
mountPath: /some/path
|
|
readOnly: false
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: nfs-vol-pvc
|
|
mountPath: /nfs-mount
|
|
readOnly: false
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: smb-vol-pvc
|
|
mountPath: /smb-mount
|
|
readOnly: false
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
content:
|
|
name: shared-vol
|
|
mountPath: /some/path
|
|
readOnly: false
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
content:
|
|
name: nfs-vol-pvc
|
|
mountPath: /nfs-mount
|
|
readOnly: false
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
content:
|
|
name: smb-vol-pvc
|
|
mountPath: /smb-mount
|
|
readOnly: false
|
|
- documentIndex: &jobDoc 6
|
|
isKind:
|
|
of: Job
|
|
- documentIndex: *jobDoc
|
|
isAPIVersion:
|
|
of: batch/v1
|
|
- documentIndex: *jobDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: shared-vol
|
|
mountPath: /some/path
|
|
readOnly: false
|
|
- documentIndex: *jobDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: nfs-vol-pvc
|
|
mountPath: /nfs-mount
|
|
readOnly: false
|
|
- documentIndex: *jobDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: smb-vol-pvc
|
|
mountPath: /smb-mount
|
|
readOnly: false
|
|
- documentIndex: *jobDoc
|
|
contains:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
content:
|
|
name: shared-vol
|
|
mountPath: /some/path
|
|
readOnly: false
|
|
- documentIndex: *jobDoc
|
|
contains:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
content:
|
|
name: nfs-vol-pvc
|
|
mountPath: /nfs-mount
|
|
readOnly: false
|
|
- documentIndex: *jobDoc
|
|
contains:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
content:
|
|
name: smb-vol-pvc
|
|
mountPath: /smb-mount
|
|
readOnly: false
|
|
|
|
- it: should pass with volume on primary workload and container
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name:
|
|
enabled: true
|
|
primary: true
|
|
type: Deployment
|
|
podSpec:
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
workload-name2:
|
|
enabled: true
|
|
primary: false
|
|
type: Job
|
|
podSpec:
|
|
restartPolicy: Never
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
persistence:
|
|
some-vol:
|
|
enabled: true
|
|
type: emptyDir
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
asserts:
|
|
- documentIndex: &deploymentDoc 0
|
|
isKind:
|
|
of: Deployment
|
|
- documentIndex: *deploymentDoc
|
|
isAPIVersion:
|
|
of: apps/v1
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: some-vol
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
- documentIndex: *deploymentDoc
|
|
isNull:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
- documentIndex: &jobDoc 1
|
|
isKind:
|
|
of: Job
|
|
- documentIndex: *jobDoc
|
|
isAPIVersion:
|
|
of: batch/v1
|
|
- documentIndex: *jobDoc
|
|
isNull:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
- documentIndex: *jobDoc
|
|
isNull:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
|
|
- it: should pass with volume with selected pod and container
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name:
|
|
enabled: true
|
|
primary: true
|
|
type: Deployment
|
|
podSpec:
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
workload-name2:
|
|
enabled: true
|
|
primary: false
|
|
type: Job
|
|
podSpec:
|
|
restartPolicy: Never
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
persistence:
|
|
some-vol:
|
|
enabled: true
|
|
type: emptyDir
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
targetSelector:
|
|
workload-name:
|
|
container-name2: {}
|
|
workload-name2:
|
|
container-name1: {}
|
|
asserts:
|
|
- documentIndex: &deploymentDoc 0
|
|
isKind:
|
|
of: Deployment
|
|
- documentIndex: *deploymentDoc
|
|
isAPIVersion:
|
|
of: apps/v1
|
|
- documentIndex: *deploymentDoc
|
|
isNull:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
content:
|
|
name: some-vol
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
- documentIndex: &jobDoc 1
|
|
isKind:
|
|
of: Job
|
|
- documentIndex: *jobDoc
|
|
isAPIVersion:
|
|
of: batch/v1
|
|
- documentIndex: *jobDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: some-vol
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
- documentIndex: *jobDoc
|
|
isNull:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
|
|
- it: should pass with volume with selected pod and multiple containers
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name:
|
|
enabled: true
|
|
primary: true
|
|
type: Deployment
|
|
podSpec:
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
workload-name2:
|
|
enabled: true
|
|
primary: false
|
|
type: Job
|
|
podSpec:
|
|
restartPolicy: Never
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
persistence:
|
|
some-vol:
|
|
enabled: true
|
|
type: emptyDir
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
targetSelector:
|
|
workload-name:
|
|
container-name1: {}
|
|
container-name2: {}
|
|
asserts:
|
|
- documentIndex: &deploymentDoc 0
|
|
isKind:
|
|
of: Deployment
|
|
- documentIndex: *deploymentDoc
|
|
isAPIVersion:
|
|
of: apps/v1
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: some-vol
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
content:
|
|
name: some-vol
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
- documentIndex: &jobDoc 1
|
|
isKind:
|
|
of: Job
|
|
- documentIndex: *jobDoc
|
|
isAPIVersion:
|
|
of: batch/v1
|
|
- documentIndex: *jobDoc
|
|
isNull:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
- documentIndex: *jobDoc
|
|
isNull:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
|
|
- it: should pass with volume with selected pod and containers and specific values
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name:
|
|
enabled: true
|
|
primary: true
|
|
type: Deployment
|
|
podSpec:
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
workload-name2:
|
|
enabled: true
|
|
primary: false
|
|
type: Job
|
|
podSpec:
|
|
restartPolicy: Never
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
persistence:
|
|
some-vol:
|
|
enabled: true
|
|
type: emptyDir
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
targetSelector:
|
|
workload-name:
|
|
container-name1:
|
|
mountPath: /some/other/path
|
|
readOnly: false
|
|
mountPropagation: None
|
|
subPath: /some/sub/path
|
|
container-name2: {}
|
|
asserts:
|
|
- documentIndex: &deploymentDoc 0
|
|
isKind:
|
|
of: Deployment
|
|
- documentIndex: *deploymentDoc
|
|
isAPIVersion:
|
|
of: apps/v1
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: some-vol
|
|
mountPath: /some/other/path
|
|
readOnly: false
|
|
mountPropagation: None
|
|
subPath: /some/sub/path
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
content:
|
|
name: some-vol
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
- documentIndex: &jobDoc 1
|
|
isKind:
|
|
of: Job
|
|
- documentIndex: *jobDoc
|
|
isAPIVersion:
|
|
of: batch/v1
|
|
- documentIndex: *jobDoc
|
|
isNull:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
- documentIndex: *jobDoc
|
|
isNull:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
|
|
- it: should pass with volume with selected pod and containers and specific values from tpl
|
|
set:
|
|
some_path: /some/other/path
|
|
some_propagation: None
|
|
some_sub_path: /some/sub/path
|
|
image: *image
|
|
workload:
|
|
workload-name:
|
|
enabled: true
|
|
primary: true
|
|
type: Deployment
|
|
podSpec:
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
container-name2:
|
|
enabled: true
|
|
primary: false
|
|
imageSelector: image
|
|
probes: *probes
|
|
persistence:
|
|
some-vol:
|
|
enabled: true
|
|
type: emptyDir
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
targetSelector:
|
|
workload-name:
|
|
container-name1:
|
|
mountPath: "{{ .Values.some_path }}"
|
|
readOnly: false
|
|
mountPropagation: "{{ .Values.some_propagation }}"
|
|
subPath: "{{ .Values.some_sub_path }}"
|
|
container-name2: {}
|
|
asserts:
|
|
- documentIndex: &deploymentDoc 0
|
|
isKind:
|
|
of: Deployment
|
|
- documentIndex: *deploymentDoc
|
|
isAPIVersion:
|
|
of: apps/v1
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: some-vol
|
|
mountPath: /some/other/path
|
|
readOnly: false
|
|
mountPropagation: None
|
|
subPath: /some/sub/path
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[1].volumeMounts
|
|
content:
|
|
name: some-vol
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
|
|
- it: should pass with cert mounted as volume with subPath
|
|
set:
|
|
image: *image
|
|
ixCertificates:
|
|
"1":
|
|
certificate: some_cert
|
|
key: some_key
|
|
scaleCertificate:
|
|
cert-name:
|
|
enabled: false
|
|
id: 1
|
|
workload:
|
|
workload-name:
|
|
enabled: true
|
|
primary: true
|
|
type: Deployment
|
|
podSpec:
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
persistence:
|
|
cert-vol:
|
|
enabled: true
|
|
type: secret
|
|
objectName: cert-name
|
|
readOnly: true
|
|
targetSelector:
|
|
workload-name:
|
|
container-name1:
|
|
mountPath: /some/path/cert.crt
|
|
readOnly: true
|
|
subPath: cert.crt
|
|
asserts:
|
|
- documentIndex: &deploymentDoc 0
|
|
isKind:
|
|
of: Deployment
|
|
- documentIndex: *deploymentDoc
|
|
isAPIVersion:
|
|
of: apps/v1
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: cert-vol
|
|
mountPath: /some/path/cert.crt
|
|
readOnly: true
|
|
subPath: cert.crt
|
|
|
|
- it: should pass with cert mounted as volume with subPath
|
|
set:
|
|
image: *image
|
|
ixCertificates:
|
|
"1":
|
|
certificate: some_cert
|
|
key: some_key
|
|
scaleCertificate:
|
|
cert-name:
|
|
enabled: false
|
|
id: 1
|
|
workload:
|
|
workload-name:
|
|
enabled: true
|
|
primary: true
|
|
type: Deployment
|
|
podSpec:
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
probes: *probes
|
|
persistence:
|
|
cert-vol:
|
|
enabled: true
|
|
type: secret
|
|
objectName: cert-name
|
|
readOnly: true
|
|
items:
|
|
- key: tls.crt
|
|
path: cert.crt
|
|
targetSelector:
|
|
workload-name:
|
|
container-name1:
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
asserts:
|
|
- documentIndex: &deploymentDoc 0
|
|
isKind:
|
|
of: Deployment
|
|
- documentIndex: *deploymentDoc
|
|
isAPIVersion:
|
|
of: apps/v1
|
|
- documentIndex: *deploymentDoc
|
|
contains:
|
|
path: spec.template.spec.containers[0].volumeMounts
|
|
content:
|
|
name: cert-vol
|
|
mountPath: /some/path
|
|
readOnly: true
|
|
|
|
# Failures
|
|
- it: should fail with invalid mountPropagation
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name: &workload
|
|
enabled: true
|
|
primary: true
|
|
type: Deployment
|
|
podSpec:
|
|
containers:
|
|
container-name1:
|
|
enabled: true
|
|
primary: true
|
|
imageSelector: image
|
|
persistence:
|
|
vol-name:
|
|
enabled: true
|
|
type: emptyDir
|
|
mountPath: /some/path
|
|
mountPropagation: HostToContainer
|
|
targetSelector:
|
|
workload-name:
|
|
container-name1:
|
|
mountPropagation: invalid
|
|
asserts:
|
|
- failedTemplate:
|
|
errorMessage: Persistence - Expected <mountPropagation> to be one of [None, HostToContainer, Bidirectional], but got [invalid]
|
|
|
|
- it: should fail with non-boolean readOnly
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name: *workload
|
|
persistence:
|
|
vol-name:
|
|
enabled: true
|
|
type: emptyDir
|
|
mountPath: /some/path
|
|
targetSelector:
|
|
workload-name:
|
|
container-name1:
|
|
readOnly: invalid
|
|
asserts:
|
|
- failedTemplate:
|
|
errorMessage: Persistence - Expected <readOnly> to be [boolean], but got [string]
|
|
|
|
- it: should fail with empty readOnly
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name: *workload
|
|
persistence:
|
|
vol-name:
|
|
enabled: true
|
|
type: emptyDir
|
|
mountPath: /some/path
|
|
targetSelector:
|
|
workload-name:
|
|
container-name1:
|
|
readOnly:
|
|
asserts:
|
|
- failedTemplate:
|
|
errorMessage: Persistence - Expected <readOnly> to be [boolean], but got [invalid]
|
|
|
|
- it: should fail with empty mountPath
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name: *workload
|
|
persistence:
|
|
vol-name:
|
|
enabled: true
|
|
type: emptyDir
|
|
mountPath: ""
|
|
targetSelector:
|
|
workload-name:
|
|
container-name1: {}
|
|
asserts:
|
|
- failedTemplate:
|
|
errorMessage: Persistence - Expected non-empty <mountPath>
|
|
|
|
- it: should fail with mountPath not starting with /
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name: *workload
|
|
persistence:
|
|
vol-name:
|
|
enabled: true
|
|
type: emptyDir
|
|
targetSelector:
|
|
workload-name:
|
|
container-name1:
|
|
mountPath: some/path
|
|
asserts:
|
|
- failedTemplate:
|
|
errorMessage: Persistence - Expected <mountPath> to start with a forward slash [/]
|
|
|
|
- it: should fail with non-dict targetSelect.workloadName
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name: *workload
|
|
persistence:
|
|
vol-name:
|
|
enabled: true
|
|
type: emptyDir
|
|
targetSelector:
|
|
workload-name: string
|
|
asserts:
|
|
- failedTemplate:
|
|
errorMessage: Persistence - Expected <targetSelector.workload-name> to be a [dict], but got [string]
|
|
|
|
- it: should fail with empty targetSelect.workloadName
|
|
set:
|
|
image: *image
|
|
workload:
|
|
workload-name: *workload
|
|
persistence:
|
|
vol-name:
|
|
enabled: true
|
|
type: emptyDir
|
|
targetSelector:
|
|
workload-name: {}
|
|
asserts:
|
|
- failedTemplate:
|
|
errorMessage: Persistence - Expected non-empty <targetSelector.workload-name>
|