我试图为许多类似的应用程序创建一个默认模板,我需要与两个或更多的pod 共享相同的PVC,需要修改创建或不创建PVC的图表,如果已经存在的话.

以下是我在values.yml中关于卷的部分:

persistence:
  enabled: true

volumeMounts:
  - name: vol1
    mountPath: /opt/vol1
  - name: vol2
    mountPath: /opt/vol2

volumes:
  - name: vol1
    create: true
    claimName: claim-vol1
    storageClassName: gp2
    accessModes: ReadWriteOnce
    storage: 1Gi
  - name: vol2
    create: false
    claimName: claim-vol2
    storageClassName: gp2
    accessModes: ReadWriteOnce
    storage: 1Gi

这是我的pvCla.yml:

{{- if .Values.persistence.enabled }}
{{- if .Values.volumes.create }}
{{- range .Values.volumes }}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: {{ .claimName }}
spec:
  storageClassName: {{ .storageClassName }}
  accessModes:
    - {{ .accessModes }}
  resources:
    requests:
      storage: {{ .storage }}
{{- end }}
{{- end }}
{{- end }}

我想我应该将字段create添加到volumes的范围中,以管理PVC的创建(在本例中,假设从其他舵图中已经存在PVCvol2).

如果可能,我希望Helm读取范围内的create字段,这样我会得到一个错误: evaluate field create in type interface {}

如果您有任何其他的 idea ,欢迎他们,谢谢!

推荐答案

volumes是一个数组,它没有create字段.

Elements%的卷具有该字段.因此,.Values.volumes.create美元没有任何意义.在range中,您可以使用.create判断元素的create字段,例如

{{- range .Values.volumes }}
    {{if .create}}do something here{{end}}
{{- end}}

Go相关问答推荐

Go程序在并发Forking 循环中停留在syscall.Wait4

为什么工具链指令在这种情况下没有效果?

如何描述OpenAPI规范中围棋的数据类型.JSON?

使用一元或服务器流将切片从GRPC服务器返回到客户端

Golang中的泛型 struct /接口列表

如何在v2 Go SDK中使用KeyConditionExpression查询AWS DynamoDb?

Golang String

正则表达式模式,确保至少一个字符与其他条件一起存在

使用Cookie身份验证的Gorilla Golang Websocket优化

在 Go 中解组编号的 XML 标签

Go struct 匿名字段是公开的还是私有的?

对 CSV 进行单元测试失败

Golang - POST 失败(NoSurf CSRF)

Go 中如何调用测试函数?

如何在模板中传递和访问 struct 片段和 struct

如何模仿联合类型

如何在 Docker 容器中使用私有存储库进行身份验证

Go 并发、goroutine 同步和关闭通道

当 git clone 工作时,Go mod tidy 在私有存储库上失败

AWS EKS 上的 Golang REST API 部署因 CrashLoopBackOff 而失败