1. CM
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Chart.Name }}-sqlcm
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook-weight": "1"
"helm.sh/hook": pre-install
"helm.sh/hook-delete-policy": before-hook-creation
data:
{{- $files := .Files }}
{{- range $path, $_ := ($files.Glob "sql/*.sql") }}
{{- $listsql := $path | base | trimSuffix ".sql" | trimPrefix "v" | nospace }}
{{- if eq $listsql "base-schema" }}
{{ ($files.Glob $path).AsConfig | indent 2 }}
{{- else }}
{{- if (semverCompare "^1.0.0" $listsql ) }}
{{ ($files.Glob $path).AsConfig | indent 2 }}
{{- end }}
{{- end }}
{{- end }}
字段分开介绍(注意作为YAML文件时需要移除前方的空格)
# 创建一个 files 文件对象
{{- $files := .Files }}
# 循环处理 sql/ 下以 .sql 结尾的文件。将文件路径保存在 $path 中
# 如: sql/v1.1.0.sql sql/v1.2.1.sql sql/v2.3.9.sql
{{ range $path, $_ := ($files.Glob "sql/*.sql") }}
# 处理 $path 路径,获取一个符合 SemVer2 的命名版本
# 如 sql/v1.1.0.sql
# base 获取斜线最后的字符:v1.1.0.sql
# trimSuffix 移除 .sql 后缀: v1.1.0
# trimPrefix 移除 v 前缀: 1.1.0
# nospace 移除字符串中的空格: 没有空格
{{ $listsql := $path | base | trimSuffix ".sql" | trimPrefix "v" | nospace }}
# 对获取的文件名称处理
# 如果文件名称是 base-schema 这在这块处理
{{ if eq $listsql "base-schema" }}
{{ ($files.Glob $path).AsConfig | indent 2 }}
# 如果文件名称符合 SemVer2 命名版本,在这块处理
{{ else }}
# 对比文件的版本和 是否大于 1.0.0 版本,小于 2.0.0 版本
# 如,1.1.0 , 返回 True
{{- if (semverCompare "^1.0.0" $listsql ) }}
{{ ($files.Glob $path).AsConfig | indent 2 }}
{{- end }}
{{ end }} # end if listsql
{{ end }} # end range