Merge pull request #27 from gimlet-io/schedule-support
Using common chart
This commit is contained in:
@@ -26,7 +26,7 @@ jobs:
|
||||
- name: Extract chart version
|
||||
id: chart_version
|
||||
run: |
|
||||
CHART_VERSION=$(cat charts/onechart/Chart.yaml | grep version:)
|
||||
CHART_VERSION=$(cat charts/onechart/Chart.yaml | grep ^version:)
|
||||
CHART_VERSION=${CHART_VERSION#version: }
|
||||
echo $CHART_VERSION
|
||||
echo ::set-output name=chart_version::$CHART_VERSION
|
||||
|
||||
@@ -28,8 +28,12 @@ kubeval:
|
||||
find manifests/ -name '*.yaml' | xargs kubeval --ignore-missing-schemas -v 1.18.0
|
||||
|
||||
test:
|
||||
helm dependency update charts/onechart
|
||||
helm unittest charts/onechart
|
||||
|
||||
helm dependency update charts/cron-job
|
||||
helm unittest charts/cron-job
|
||||
|
||||
helm unittest charts/namespaces
|
||||
|
||||
package:
|
||||
@@ -45,8 +49,13 @@ package:
|
||||
helm repo index docs --url https://chart.onechart.dev
|
||||
|
||||
debug:
|
||||
helm dependency update charts/onechart
|
||||
helm template charts/onechart/ -f values.yaml --debug
|
||||
|
||||
debug-cron-job:
|
||||
helm dependency update charts/cron-job
|
||||
helm template charts/cron-job/ -f values-cron-job.yaml --debug
|
||||
|
||||
debug-ui:
|
||||
#gimlet chart configure -s charts/onechart/values.schema.json -u charts/onechart/helm-ui.json onechart/onechart
|
||||
/home/laszlo/projects/gimlet-cli/build/gimlet chart configure -s charts/onechart/values.schema.json -u charts/onechart/helm-ui.json onechart/onechart
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*.orig
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
@@ -0,0 +1,18 @@
|
||||
apiVersion: v2
|
||||
name: common
|
||||
description: A Helm chart for Kubernetes
|
||||
|
||||
# A chart can be either an 'application' or a 'library' chart.
|
||||
#
|
||||
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||
# to be deployed.
|
||||
#
|
||||
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||
type: library
|
||||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 0.1.0
|
||||
@@ -0,0 +1,15 @@
|
||||
{{- define "common.configmap.tpl" -}}
|
||||
{{- if .Values.vars }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ template "common.robustName" .Release.Name }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{- include "helm-chart.labels" . | nindent 4 }}
|
||||
data:
|
||||
{{- range $key, $val := .Values.vars }}
|
||||
{{ $key }}: {{ $val | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,21 @@
|
||||
{{- define "common.envFromRef.tpl" -}}
|
||||
{{- if or (or (or (.Values.vars) (.Values.secretEnabled)) .Values.sealedSecrets) .Values.secretName }}
|
||||
envFrom: &envFrom
|
||||
{{- if .Values.vars }}
|
||||
- configMapRef:
|
||||
name: {{ template "common.robustName" .Release.Name }}
|
||||
{{- end }}
|
||||
{{- if .Values.secretEnabled }}
|
||||
- secretRef:
|
||||
name: {{ include "common.robustName" $.Release.Name }}
|
||||
{{- end }}
|
||||
{{- if .Values.secretName }}
|
||||
- secretRef:
|
||||
name: {{ .Values.secretName }}
|
||||
{{- end }}
|
||||
{{- if .Values.sealedSecrets }}
|
||||
- secretRef:
|
||||
name: {{ template "common.robustName" .Release.Name }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -1,3 +1,4 @@
|
||||
{{- define "common.fileSecret.tpl" -}}
|
||||
{{- range .Values.fileSecrets }}
|
||||
---
|
||||
kind: Secret
|
||||
@@ -11,3 +12,4 @@ data:
|
||||
{{ $key }}: {{ $val | b64enc }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,10 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
|
||||
{{/*
|
||||
Create robustName that can be used as Kubernetes resource name, and as subdomain as well
|
||||
\w – Latin letters, digits, underscore '_' .
|
||||
\W – all but \w .
|
||||
*/}}
|
||||
{{- define "common.robustName" -}}
|
||||
{{ regexReplaceAll "[^0-9A-Za-z_\\.]+" . "-" | replace "_" "-" | lower | trunc 63 | trimSuffix "-" | trimPrefix "-" }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,18 @@
|
||||
{{- define "common.pvc.tpl" -}}
|
||||
{{- range .Values.volumes }}
|
||||
{{- $robustName := include "common.robustName" $.Release.Name }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: {{ printf "%s-%s" $robustName .name }}
|
||||
namespace: {{ $.Release.Namespace }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .accessMode | default "ReadWriteOnce" }}
|
||||
storageClassName: {{ .storageClass | default "local-path" }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .size | default "1Gi" }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
+2
@@ -1,3 +1,4 @@
|
||||
{{- define "common.sealedFileSecret.tpl" -}}
|
||||
{{- range .Values.sealedFileSecrets }}
|
||||
{{- $robustName := include "robustName" $.Release.Name }}
|
||||
---
|
||||
@@ -22,3 +23,4 @@ spec:
|
||||
name: {{ printf "%s-%s" $.Release.Name .name }}
|
||||
namespace: {{ $.Release.Namespace }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
+4
-2
@@ -1,4 +1,5 @@
|
||||
{{- if .Values.sealedSecrets }}
|
||||
{{- define "common.sealedSecret.tpl" -}}
|
||||
{{- if .Values.sealedSecrets }}
|
||||
apiVersion: bitnami.com/v1alpha1
|
||||
kind: SealedSecret
|
||||
metadata:
|
||||
@@ -17,4 +18,5 @@ spec:
|
||||
metadata:
|
||||
name: {{ template "robustName" .Release.Name }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,19 @@
|
||||
{{- define "common.volumeMountsRef.tpl" -}}
|
||||
{{- if or (or (.Values.volumes) (.Values.sealedFileSecrets)) .Values.fileSecrets }}
|
||||
volumeMounts: &volumeMounts
|
||||
{{- range .Values.volumes }}
|
||||
- name: {{ .name }}
|
||||
mountPath: {{ .path }}
|
||||
{{- end }}
|
||||
{{- range .Values.sealedFileSecrets }}
|
||||
- name: {{ .name }}
|
||||
mountPath: {{ .path }}
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
{{- range .Values.fileSecrets }}
|
||||
- name: {{ .name }}
|
||||
mountPath: {{ .path }}
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,20 @@
|
||||
{{- define "common.volumesRef.tpl" -}}
|
||||
{{- if or (or (.Values.volumes) (.Values.sealedFileSecrets)) .Values.fileSecrets }}
|
||||
volumes:
|
||||
{{- range .Values.volumes }}
|
||||
- name: {{ .name }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ printf "%s-%s" $.Release.Name .name }}
|
||||
{{- end }}
|
||||
{{- range .Values.sealedFileSecrets }}
|
||||
- name: {{ .name }}
|
||||
secret:
|
||||
secretName: {{ printf "%s-%s" $.Release.Name .name }}
|
||||
{{- end }}
|
||||
{{- range .Values.fileSecrets }}
|
||||
- name: {{ .name }}
|
||||
secret:
|
||||
secretName: {{ printf "%s-%s" $.Release.Name .name }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: file://../common
|
||||
version: 0.1.0
|
||||
digest: sha256:636a65e9846bdff17cc4e65b0849061f783759a37aa51fb85ff6fd8ba5e68467
|
||||
generated: "2021-08-05T10:18:17.533366128+02:00"
|
||||
@@ -15,4 +15,9 @@ type: application
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 0.1.2
|
||||
version: 0.2.0
|
||||
|
||||
dependencies:
|
||||
- name: common
|
||||
version: 0.1.0
|
||||
repository: file://../common
|
||||
|
||||
Binary file not shown.
@@ -1,13 +1 @@
|
||||
{{- if .Values.vars }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{- include "helm-chart.labels" . | nindent 4 }}
|
||||
data:
|
||||
{{- range $key, $val := .Values.vars }}
|
||||
{{ $key }}: {{ $val | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- include "common.configmap.tpl" . -}}
|
||||
|
||||
@@ -7,10 +7,9 @@ metadata:
|
||||
{{- include "helm-chart.labels" . | nindent 4 }}
|
||||
spec:
|
||||
schedule: {{ .Values.schedule | quote }}
|
||||
successfulJobsHistoryLimit: 1
|
||||
failedJobsHistoryLimit: 1
|
||||
concurrencyPolicy: Forbid
|
||||
startingDeadlineSeconds: 120
|
||||
{{- with .Values.constraints }}
|
||||
{{- toYaml . | nindent 2 }}
|
||||
{{- end }}
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
@@ -30,29 +29,12 @@ spec:
|
||||
- {{ .Values.shell }}
|
||||
- -c
|
||||
- {{ .Values.command | quote }}
|
||||
envFrom:
|
||||
{{- if .Values.vars }}
|
||||
- configMapRef:
|
||||
name: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
{{- if .Values.secret.enabled }}
|
||||
- secretRef:
|
||||
name: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
volumeMounts:
|
||||
{{- range .Values.volumes }}
|
||||
- name: {{ .name }}
|
||||
mountPath: {{ .path }}
|
||||
{{- end }}
|
||||
{{- include "common.envFromRef.tpl" . | nindent 14 }}
|
||||
{{- include "common.volumeMountsRef.tpl" . | nindent 14 }}
|
||||
resources:
|
||||
{{- toYaml .Values.resources | nindent 16 }}
|
||||
volumes:
|
||||
{{- range .Values.volumes }}
|
||||
- name: {{ .name }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ printf "%s-%s" $.Release.Name .name }}
|
||||
{{- end }}
|
||||
{{ with .Values.nodeSelector }}
|
||||
{{- include "common.volumesRef.tpl" . | nindent 10 }}
|
||||
{{ with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{ toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{{- include "common.fileSecret.tpl" . -}}
|
||||
@@ -1,15 +1 @@
|
||||
{{- range .Values.volumes }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: {{ printf "%s-%s" $.Release.Name .name }}
|
||||
namespace: {{ $.Release.Namespace }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .accessMode | default "ReadWriteOnce" }}
|
||||
storageClassName: {{ .storageClass | default "local-path" }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .size | default "1Gi" }}
|
||||
{{- end }}
|
||||
{{- include "common.pvc.tpl" . -}}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{{- include "common.sealedFileSecret.tpl" . -}}
|
||||
@@ -0,0 +1 @@
|
||||
{{- include "common.sealedSecret.tpl" . -}}
|
||||
@@ -13,7 +13,7 @@ tests:
|
||||
path: spec.jobTemplate.spec.template.spec.containers[0].envFrom
|
||||
content:
|
||||
configMapRef:
|
||||
name: RELEASE-NAME
|
||||
name: release-name
|
||||
- it: Should not reference configmap if vars are not set
|
||||
asserts:
|
||||
- isNull:
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
suite: test cron job
|
||||
templates:
|
||||
- cronJob.yaml
|
||||
tests:
|
||||
- it: Should have default constraints
|
||||
asserts:
|
||||
- equal:
|
||||
path: spec.successfulJobsHistoryLimit
|
||||
value: 1
|
||||
- it: Should constraints be configurable
|
||||
set:
|
||||
constraints:
|
||||
successfulJobsHistoryLimit: 2
|
||||
asserts:
|
||||
- equal:
|
||||
path: spec.successfulJobsHistoryLimit
|
||||
value: 2
|
||||
@@ -5,16 +5,16 @@ templates:
|
||||
tests:
|
||||
- it: Should reference secret if secret is enabled
|
||||
set:
|
||||
secret.enabled: true
|
||||
secretEnabled: true
|
||||
asserts:
|
||||
- contains:
|
||||
path: spec.jobTemplate.spec.template.spec.containers[0].envFrom
|
||||
content:
|
||||
secretRef:
|
||||
name: RELEASE-NAME
|
||||
name: release-name
|
||||
- it: Should not reference secret if secret is disabled
|
||||
set:
|
||||
secret.enabled: false
|
||||
secretEnabled: false
|
||||
asserts:
|
||||
- isNull:
|
||||
path: spec.jobTemplate.spec.template.spec.containers[0].envFrom
|
||||
|
||||
@@ -27,3 +27,9 @@ affinity: {}
|
||||
|
||||
secret:
|
||||
enabled: false
|
||||
|
||||
constraints:
|
||||
successfulJobsHistoryLimit: 1
|
||||
failedJobsHistoryLimit: 1
|
||||
concurrencyPolicy: Forbid
|
||||
startingDeadlineSeconds: 120
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: file://../common
|
||||
version: 0.1.0
|
||||
digest: sha256:636a65e9846bdff17cc4e65b0849061f783759a37aa51fb85ff6fd8ba5e68467
|
||||
generated: "2021-08-05T10:39:10.053810673+02:00"
|
||||
@@ -15,4 +15,9 @@ type: application
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 0.27.0
|
||||
version: 0.27.0-rc1
|
||||
|
||||
dependencies:
|
||||
- name: common
|
||||
version: 0.1.0
|
||||
repository: file://../common
|
||||
|
||||
Binary file not shown.
@@ -1,13 +1 @@
|
||||
{{- if .Values.vars }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ template "robustName" .Release.Name }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{- include "helm-chart.labels" . | nindent 4 }}
|
||||
data:
|
||||
{{- range $key, $val := .Values.vars }}
|
||||
{{ $key }}: {{ $val | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- include "common.configmap.tpl" . -}}
|
||||
|
||||
@@ -61,25 +61,7 @@ spec:
|
||||
- -c
|
||||
- {{ .Values.command | quote }}
|
||||
{{- end }}
|
||||
{{- if or (or (or (.Values.vars) (.Values.secretEnabled)) .Values.sealedSecrets) .Values.secretName }}
|
||||
envFrom: &envFrom
|
||||
{{- if .Values.vars }}
|
||||
- configMapRef:
|
||||
name: {{ template "robustName" .Release.Name }}
|
||||
{{- end }}
|
||||
{{- if .Values.secretEnabled }}
|
||||
- secretRef:
|
||||
name: {{ include "robustName" $.Release.Name }}
|
||||
{{- end }}
|
||||
{{- if .Values.secretName }}
|
||||
- secretRef:
|
||||
name: {{ .Values.secretName }}
|
||||
{{- end }}
|
||||
{{- if .Values.sealedSecrets }}
|
||||
- secretRef:
|
||||
name: {{ template "robustName" .Release.Name }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- include "common.envFromRef.tpl" . | nindent 10 }}
|
||||
ports:
|
||||
{{- if not .Values.ports }}
|
||||
- name: http
|
||||
@@ -102,23 +84,7 @@ spec:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if or (or (.Values.volumes) (.Values.sealedFileSecrets)) .Values.fileSecrets }}
|
||||
volumeMounts: &volumeMounts
|
||||
{{- range .Values.volumes }}
|
||||
- name: {{ .name }}
|
||||
mountPath: {{ .path }}
|
||||
{{- end }}
|
||||
{{- range .Values.sealedFileSecrets }}
|
||||
- name: {{ .name }}
|
||||
mountPath: {{ .path }}
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
{{- range .Values.fileSecrets }}
|
||||
- name: {{ .name }}
|
||||
mountPath: {{ .path }}
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- include "common.volumeMountsRef.tpl" . | nindent 10 }}
|
||||
resources:
|
||||
{{- toYaml .Values.resources | nindent 12 }}
|
||||
{{- if .Values.sidecar }}
|
||||
@@ -138,24 +104,7 @@ spec:
|
||||
volumeMounts: *volumeMounts
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if or (or (.Values.volumes) (.Values.sealedFileSecrets)) .Values.fileSecrets }}
|
||||
volumes:
|
||||
{{- range .Values.volumes }}
|
||||
- name: {{ .name }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ printf "%s-%s" $.Release.Name .name }}
|
||||
{{- end }}
|
||||
{{- range .Values.sealedFileSecrets }}
|
||||
- name: {{ .name }}
|
||||
secret:
|
||||
secretName: {{ printf "%s-%s" $.Release.Name .name }}
|
||||
{{- end }}
|
||||
{{- range .Values.fileSecrets }}
|
||||
- name: {{ .name }}
|
||||
secret:
|
||||
secretName: {{ printf "%s-%s" $.Release.Name .name }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- include "common.volumesRef.tpl" . | nindent 6 }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{{- include "common.fileSecret.tpl" . -}}
|
||||
@@ -1,16 +1 @@
|
||||
{{- range .Values.volumes }}
|
||||
{{- $robustName := include "robustName" $.Release.Name }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: {{ printf "%s-%s" $robustName .name }}
|
||||
namespace: {{ $.Release.Namespace }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .accessMode | default "ReadWriteOnce" }}
|
||||
storageClassName: {{ .storageClass | default "local-path" }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .size | default "1Gi" }}
|
||||
{{- end }}
|
||||
{{- include "common.pvc.tpl" . -}}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{{- include "common.sealedFileSecret.tpl" . -}}
|
||||
@@ -0,0 +1 @@
|
||||
{{- include "common.sealedSecret.tpl" . -}}
|
||||
@@ -1,6 +1,6 @@
|
||||
suite: test deployment
|
||||
templates:
|
||||
- sealed-file-secret.yaml
|
||||
- sealedFileSecret.yaml
|
||||
tests:
|
||||
- it: Should generate a sealed secret with the file
|
||||
set: &values
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
suite: test deployment
|
||||
templates:
|
||||
- sealed-secret.yaml
|
||||
- sealedSecret.yaml
|
||||
tests:
|
||||
- it: Should put sealed secrets in SealedSecret
|
||||
set:
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
image:
|
||||
repository: debian
|
||||
tag: stable-slim
|
||||
|
||||
schedule: "*/1 * * * *"
|
||||
command: |
|
||||
echo "I'm alive"
|
||||
shell: "/bin/sh"
|
||||
|
||||
vars:
|
||||
MY_VAR: "value"
|
||||
|
||||
volumes:
|
||||
- name: data
|
||||
path: /data
|
||||
size: 10Gi
|
||||
storageClass: default
|
||||
@@ -12,3 +12,12 @@ ingresses:
|
||||
|
||||
gitRepository: github.com/laszlocph/demo-app
|
||||
gitSha: xyz
|
||||
|
||||
vars:
|
||||
MY_VAR: "value"
|
||||
|
||||
volumes:
|
||||
- name: data
|
||||
path: /data
|
||||
size: 10Gi
|
||||
storageClass: default
|
||||
|
||||
Reference in New Issue
Block a user