如何将变量值传递给 Helm 图表中的 .Files.Glob?
在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天编程网就整理分享《如何将变量值传递给 Helm 图表中的 .Files.Glob?》,聊聊,希望可以帮助到正在努力赚钱的你。
问题内容下面对 .files.glob
的调用需要来自作为 .values.initdbfilesglob
的值提供的变量。该值已正确设置,但 if
条件未计算为真,即使 .values.initdbconfigmap
为空。
如何将变量参数传递给 .files.glob
?
有问题的模板(来自我的 wip 图表的 templates/initdb-configmap.yaml
https://github.com/northscaler/charts/tree/support-env-specific-init/bitnami/cassandra,我将提交到 https修复此问题后,将://github.com/bitnami/charts/tree/master/bitnami/cassandra 作为 pr):
{{- $initdbfilesglob := .values.initdbfilesglob -}}
# "{{ $initdbfilesglob }}" "{{ .values.initdbconfigmap }}"
# there should be content below this
{{- if and (.files.glob $initdbfilesglob) (not .values.initdbconfigmap) }}
apiversion: v1
kind: configmap
metadata:
name: {{ include "cassandra.fullname" . }}-init-scripts
labels: {{- include "cassandra.labels" . | nindent 4 }}
data:
{{ (.files.glob $initdbfilesglob).asconfig | indent 2 }}
{{- end }}
文件 values.yaml
:
dbuser:
forcepassword: true
password: cassandra
initdbfilesglob: 'files/devops/docker-entrypoint-initdb.d/*'
命令:helm template -f value.yaml foobar /users/matthewadams/dev/bitnami/charts/bitnami/cassandra
相对于我调用命令的目录,files/devops/docker-entrypoint-initdb.d
中有 个文件。
输出:
---
# source: cassandra/templates/pdb.yaml
apiversion: policy/v1beta1
kind: poddisruptionbudget
metadata:
name: foobar-cassandra-headless
labels:
app: cassandra
chart: cassandra-5.1.2
release: foobar
heritage: helm
spec:
selector:
matchlabels:
app: cassandra
release: foobar
maxunavailable: 1
---
# source: cassandra/templates/cassandra-secret.yaml
apiversion: v1
kind: secret
metadata:
name: foobar-cassandra
labels:
app: cassandra
chart: cassandra-5.1.2
release: foobar
heritage: helm
type: opaque
data:
cassandra-password: "y2fzc2fuzhjh"
---
# source: cassandra/templates/configuration-cm.yaml
# files/conf/*
apiversion: v1
kind: configmap
# files/conf/*
metadata:
name: foobar-cassandra-configuration
labels:
app: cassandra
chart: cassandra-5.1.2
release: foobar
heritage: helm
data:
readme.md: |
place your cassandra configuration files here. this will override the values set in any configuration environment variable. this will not be used in case the value *existingconfiguration* is used.
more information [here](https://github.com/bitnami/bitnami-docker-cassandra#configuration)
---
# source: cassandra/templates/headless-svc.yaml
apiversion: v1
kind: service
metadata:
name: foobar-cassandra-headless
labels:
app: cassandra
chart: cassandra-5.1.2
release: foobar
heritage: helm
spec:
clusterip: none
publishnotreadyaddresses: true
ports:
- name: intra
port: 7000
targetport: intra
- name: tls
port: 7001
targetport: tls
- name: jmx
port: 7199
targetport: jmx
- name: cql
port: 9042
targetport: cql
- name: thrift
port: 9160
targetport: thrift
selector:
app: cassandra
release: foobar
---
# source: cassandra/templates/service.yaml
apiversion: v1
kind: service
metadata:
name: foobar-cassandra
labels:
app: cassandra
chart: cassandra-5.1.2
release: foobar
heritage: helm
annotations:
{}
spec:
type: clusterip
ports:
- name: cql
port: 9042
targetport: cql
nodeport: null
- name: thrift
port: 9160
targetport: thrift
nodeport: null
selector:
app: cassandra
release: foobar
---
# source: cassandra/templates/statefulset.yaml
apiversion: apps/v1
kind: statefulset
metadata:
name: foobar-cassandra
labels:
app: cassandra
chart: cassandra-5.1.2
release: foobar
heritage: helm
spec:
selector:
matchlabels:
app: cassandra
release: foobar
servicename: foobar-cassandra-headless
replicas: 1
updatestrategy:
type: ondelete
template:
metadata:
labels:
app: cassandra
chart: cassandra-5.1.2
release: foobar
heritage: helm
spec:
securitycontext:
fsgroup: 1001
runasuser: 1001
containers:
- name: cassandra
command:
- bash
- -ec
# node 0 is the password seeder
- |
if [[ $hostname =~ (.*)-0$ ]]; then
echo "setting node as password seeder"
export cassandra_password_seeder=yes
else
# only node 0 will execute the startup initdb scripts
export cassandra_ignore_initdb_scripts=1
fi
/entrypoint.sh /run.sh
image: docker.io/bitnami/cassandra:3.11.6-debian-10-r26
imagepullpolicy: "ifnotpresent"
env:
- name: bitnami_debug
value: "false"
- name: cassandra_cluster_name
value: cassandra
- name: cassandra_seeds
value: "foobar-cassandra-0.foobar-cassandra-headless.default.svc.cluster.local"
- name: cassandra_password
valuefrom:
secretkeyref:
name: foobar-cassandra
key: cassandra-password
- name: pod_ip
valuefrom:
fieldref:
fieldpath: status.podip
- name: cassandra_user
value: "cassandra"
- name: cassandra_num_tokens
value: "256"
- name: cassandra_datacenter
value: dc1
- name: cassandra_endpoint_snitch
value: simplesnitch
- name: cassandra_endpoint_snitch
value: simplesnitch
- name: cassandra_rack
value: rack1
- name: cassandra_enable_rpc
value: "true"
livenessprobe:
exec:
command: ["/bin/sh", "-c", "nodetool status"]
initialdelayseconds: 60
periodseconds: 30
timeoutseconds: 5
successthreshold: 1
failurethreshold: 5
readinessprobe:
exec:
command: ["/bin/sh", "-c", "nodetool status | grep -e \"^un\\s+${pod_ip}\""]
initialdelayseconds: 60
periodseconds: 10
timeoutseconds: 5
successthreshold: 1
failurethreshold: 5
ports:
- name: intra
containerport: 7000
- name: tls
containerport: 7001
- name: jmx
containerport: 7199
- name: cql
containerport: 9042
- name: thrift
containerport: 9160
resources:
limits: {}
requests: {}
volumemounts:
- name: data
mountpath: /bitnami/cassandra
- name: init-db
mountpath: /docker-entrypoint-initdb.d
- name: configurations
mountpath: /bitnami/cassandra/conf
volumes:
- name: configurations
configmap:
name: foobar-cassandra-configuration
- name: init-db
configmap:
name: foobar-cassandra-init-scripts
volumeclaimtemplates:
- metadata:
name: data
labels:
app: cassandra
release: foobar
spec:
accessmodes:
- "readwriteonce"
resources:
requests:
storage: "8gi"
---
# source: cassandra/templates/initdb-configmap.yaml
# "files/devops/docker-entrypoint-initdb.d/*" ""
# there should be content below this
如果我注释掉 values.yaml
中设置 initdbfilesglob
的行,模板将正确呈现:
...
---
# Source: cassandra/templates/initdb-configmap.yaml
# "files/docker-entrypoint-initdb.d/*" ""
# There should be content below this
apiVersion: v1
kind: ConfigMap
metadata:
name: foobar-cassandra-init-scripts
labels:
app: cassandra
chart: cassandra-5.1.2
release: foobar
heritage: Helm
data:
README.md: |
You can copy here your custom `.sh` or `.cql` file so they are executed during the first boot of the image.
More info in the [bitnami-docker-cassandra](https://github.com/bitnami/bitnami-docker-cassandra#initializing-a-new-instance) repository.
解决方案
我可以通过使用 printf 函数初始化变量来完成此操作,如下所示:
{{- $initDBFilesGlob := printf "%s" .Values.initDBFilesGlob -}}
以上就是《如何将变量值传递给 Helm 图表中的 .Files.Glob?》的详细内容,更多关于的资料请关注编程网公众号!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341