suite: pod securityContext test templates: - common.yaml release: name: test-release-name namespace: test-release-namespace tests: - it: should pass with securityContext from "global" set: securityContext: pod: fsGroup: 1000 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 1000 - 1001 sysctls: - name: some_name value: "some_value" - name: some_other_name value: "some_other_value" workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: {} asserts: - documentIndex: &statefulSetDoc 0 isKind: of: StatefulSet - documentIndex: *statefulSetDoc equal: path: spec.template.spec.securityContext value: fsGroup: 1000 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 1000 - 1001 - 568 sysctls: - name: some_name value: "some_value" - name: some_other_name value: "some_other_value" - it: should pass with securityContext from "global" and partial override with "pod" set: securityContext: pod: fsGroup: 1000 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 1000 - 1001 sysctls: - name: some_name value: "some_value" - name: some_other_name value: "some_other_value" workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: securityContext: fsGroup: 1001 asserts: - documentIndex: *statefulSetDoc isKind: of: StatefulSet - documentIndex: *statefulSetDoc equal: path: spec.template.spec.securityContext value: fsGroup: 1001 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 1000 - 1001 - 568 sysctls: - name: some_name value: "some_value" - name: some_other_name value: "some_other_value" - it: should pass with securityContext from "global" and full override with "pod" set: some_sysctl_name: some_name some_sysctl_value: 2 securityContext: pod: fsGroup: 1000 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 1000 - 1001 sysctls: - name: some_name value: "some_value" - name: some_other_name value: "some_other_value" workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: securityContext: fsGroup: 1001 fsGroupChangePolicy: Always supplementalGroups: - 1002 - 1003 sysctls: - name: "{{ .Values.some_sysctl_name }}" value: "{{ .Values.some_sysctl_value }}" - name: some_other_name value: "some_different_value" asserts: - documentIndex: *statefulSetDoc isKind: of: StatefulSet - documentIndex: *statefulSetDoc equal: path: spec.template.spec.securityContext value: fsGroup: 1001 fsGroupChangePolicy: Always supplementalGroups: - 1002 - 1003 - 568 sysctls: - name: some_name value: "2" - name: some_other_name value: "some_different_value" - it: should pass with fsGroup and supplementalGroups with long int set: workload: workload-name1: enabled: true primary: true type: Deployment podSpec: securityContext: fsGroup: 100000514 fsGroupChangePolicy: Always supplementalGroups: - 1002 - 100000514 asserts: - documentIndex: *statefulSetDoc isKind: of: Deployment - documentIndex: *statefulSetDoc equal: path: spec.template.spec.securityContext value: fsGroup: 100000514 fsGroupChangePolicy: Always supplementalGroups: - 1002 - 100000514 - 568 sysctls: [] - it: should pass with sysctls automatically appended based on services set: some_sysctl_name: some_name some_sysctl_value: 2 workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: securityContext: fsGroup: 1001 fsGroupChangePolicy: Always supplementalGroups: - 1002 - 1003 sysctls: - name: "{{ .Values.some_sysctl_name }}" value: "{{ .Values.some_sysctl_value }}" - name: some_other_name value: "some_different_value" workload-name2: enabled: true type: StatefulSet podSpec: {} service: service-name1: enabled: true primary: true type: ClusterIP ports: port-name: enabled: true primary: true port: 80 service-name2: enabled: true type: ClusterIP ports: port-name: enabled: true primary: true port: 53 service-name3: enabled: true type: ClusterIP targetSelector: workload-name2 ports: port-name: enabled: true primary: true port: 443 asserts: - documentIndex: *statefulSetDoc isKind: of: StatefulSet - documentIndex: *statefulSetDoc equal: path: spec.template.spec.securityContext value: fsGroup: 1001 fsGroupChangePolicy: Always supplementalGroups: - 1002 - 1003 - 568 sysctls: - name: some_name value: "2" - name: some_other_name value: "some_different_value" - name: net.ipv4.ip_unprivileged_port_start value: "53" - documentIndex: &otherStatefulSetDoc 1 isKind: of: StatefulSet - documentIndex: *otherStatefulSetDoc equal: path: spec.template.spec.securityContext value: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 568 sysctls: - name: net.ipv4.ip_unprivileged_port_start value: "443" - it: should pass with sysctls net.ipv4.ip_unprivileged_port_start NOT appended with hostnet set: workload: workload-name1: enabled: true primary: true type: Deployment podSpec: hostNetwork: true workload-name2: enabled: true type: Deployment podSpec: {} service: service-name: enabled: true primary: true type: ClusterIP targetSelector: workload-name2 ports: port-name: enabled: true primary: true port: 443 asserts: - documentIndex: &deploymentDoc 0 isKind: of: Deployment - documentIndex: *deploymentDoc equal: path: spec.template.spec.securityContext value: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 568 sysctls: [] - it: should pass with fsGroup 0 set: securityContext: pod: fsGroup: 0 workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: {} asserts: - documentIndex: &statefulSetDoc 0 isKind: of: StatefulSet - documentIndex: *statefulSetDoc equal: path: spec.template.spec.securityContext value: fsGroup: 0 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 568 sysctls: [] - it: should pass with no sysctls port_start automatically appended based on services when port is higher than 1024 set: workload: workload-name1: enabled: true primary: true type: Deployment podSpec: {} service: service-name1: enabled: true primary: true type: ClusterIP ports: port-name: enabled: true primary: true port: 25000 targetPort: 3000 asserts: - documentIndex: &deploymentDoc 0 isKind: of: Deployment - documentIndex: *deploymentDoc equal: path: spec.template.spec.securityContext value: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 568 sysctls: [] - it: should pass with with gpu assigned to single container set: workload: workload-name1: enabled: true primary: true type: Deployment podSpec: securityContext: supplementalGroups: - 1000 containers: container1: enabled: true primary: true probes: liveness: enabled: false readiness: enabled: false startup: enabled: false resources: limits: nvidia.com/gpu: 1 workload-name2: enabled: true primary: false type: Deployment podSpec: {} asserts: - documentIndex: &deploymentDoc 0 isKind: of: Deployment - documentIndex: *deploymentDoc equal: path: spec.template.spec.securityContext value: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 1000 - 44 - 107 - 568 sysctls: [] - documentIndex: &otherDeploymentDoc 1 isKind: of: Deployment - documentIndex: *otherDeploymentDoc equal: path: spec.template.spec.securityContext value: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 568 sysctls: [] - it: should pass with with gpu assigned to multiple pods set: workload: workload-name1: enabled: true primary: true type: Deployment podSpec: securityContext: supplementalGroups: - 1000 containers: container1: enabled: true primary: true probes: liveness: enabled: false readiness: enabled: false startup: enabled: false resources: limits: nvidia.com/gpu: 1 workload-name2: enabled: true primary: false type: Deployment podSpec: containers: container1: enabled: true primary: true probes: liveness: enabled: false readiness: enabled: false startup: enabled: false resources: limits: nvidia.com/gpu: 1 asserts: - documentIndex: &deploymentDoc 0 isKind: of: Deployment - documentIndex: *deploymentDoc equal: path: spec.template.spec.securityContext value: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 1000 - 44 - 107 - 568 sysctls: [] - documentIndex: &otherDeploymentDoc 1 isKind: of: Deployment - documentIndex: *otherDeploymentDoc equal: path: spec.template.spec.securityContext value: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 44 - 107 - 568 sysctls: [] - it: should pass with with device assigned to selected pod set: workload: workload-name1: enabled: true primary: true type: Deployment podSpec: {} workload-name2: enabled: true primary: false type: Deployment podSpec: {} persistence: dev01: enabled: true type: device hostPath: /dev/sda mountPath: /test targetSelector: workload-name2: asserts: - documentIndex: &deploymentDoc 0 isKind: of: Deployment - documentIndex: *deploymentDoc equal: path: spec.template.spec.securityContext value: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 568 sysctls: [] - documentIndex: &otherDeploymentDoc 1 isKind: of: Deployment - documentIndex: *otherDeploymentDoc equal: path: spec.template.spec.securityContext value: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch supplementalGroups: - 5 - 10 - 20 - 24 - 568 sysctls: [] # Failures - it: should fail with empty securityContext from "global" set: securityContext: pod: null workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: {} asserts: - failedTemplate: errorMessage: Pod - Expected non-empty [securityContext.pod] - it: should fail with empty fsGroup set: securityContext: pod: fsGroup: "" workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: {} asserts: - failedTemplate: errorMessage: Pod - Expected non-empty [fsGroup] - it: should fail with empty fsGroupChangePolicy set: securityContext: pod: fsGroup: 568 fsGroupChangePolicy: "" workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: {} asserts: - failedTemplate: errorMessage: Pod - Expected non-empty [fsGroupChangePolicy] - it: should fail with invalid fsGroupChangePolicy set: securityContext: pod: fsGroup: 568 fsGroupChangePolicy: invalid workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: {} asserts: - failedTemplate: errorMessage: Pod - Expected [fsGroupChangePolicy] to be one of [Always, OnRootMismatch], but got [invalid] - it: should fail with empty name in sysctls set: securityContext: pod: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch sysctls: - name: "" value: "some_value" workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: {} asserts: - failedTemplate: errorMessage: Pod - Expected non-empty [name] in [sysctls] - it: should fail with empty value in sysctls set: securityContext: pod: fsGroup: 568 fsGroupChangePolicy: OnRootMismatch sysctls: - name: some_name value: "" workload: workload-name1: enabled: true primary: true type: StatefulSet podSpec: {} asserts: - failedTemplate: errorMessage: Pod - Expected non-empty [value] in [sysctls] - it: should fail with non unique supplementalGroups set: securityContext: pod: supplementalGroups: - 1000 - 44 - 107 - 44 workload: workload-name1: enabled: true primary: true type: Deployment podSpec: {} asserts: - failedTemplate: errorMessage: Pod - Expected [supplementalGroups] to have only unique values, but got [1000, 44, 107, 44, 568]