如果我将两个或更多文件传递给 Go Template 的 ParseFiles 函数会发生什么?
func (*Template) ParseFiles
Run Code Online (Sandbox Code Playgroud)
它有助于说:
ParseFiles 解析命名文件并将生成的模板与 t 相关联。如果发生错误,则解析停止,返回的模板为零;否则就是 t。必须至少有一个文件。由于 ParseFiles 创建的模板由参数文件的基本名称命名,因此 t 通常应具有文件的(基本)名称之一的名称。如果没有,根据调用 ParseFiles 之前 t 的内容,t.Execute 可能会失败。在这种情况下,使用 t.ExecuteTemplate 来执行一个有效的模板。
当解析不同目录中的多个同名文件时,最后提到的将是结果。
但我仍然不确定影响输出的差异是什么,因为
MyTempl.ParseFiles(tf1)
Run Code Online (Sandbox Code Playgroud)
对比
MyTempl.ParseFiles(tf1, tf2)
Run Code Online (Sandbox Code Playgroud)
的内容tf2会附加到的内容tf1吗?
我有以下 values.yaml:
vrIds:
- 51
- 52
51.vip: 169.254.1.1
52.vip: 169.254.1.2
Run Code Online (Sandbox Code Playgroud)
我有以下模板:
{{ range $index, $element := .Values.vrIds }}
vrrp.{{$element}}.vip: <<How do I get the value of $element.vip>>
{{ end }}
Run Code Online (Sandbox Code Playgroud)
如何获取每个 vrid 的 $element.vip 值?
我正在使用 Go 发送电子邮件,并且正在从存储在数据库中的模板中解析主题和 HTML 正文。
对于主题,我不想t.Parse()转义 html 实体,因为它不是 HTML,只是纯文本,但对于正文,这正是我想要的行为。
我如何在同一个文件中执行这两项操作?
我想通过在 helm 命令行中设置变量来从 values.yaml 中选择配置部分。
values.yaml 的示例部分:
aaa:
x1: "az1"
x2: "az2"
bbb:
x1: "bz1"
x2: "bz2"
Run Code Online (Sandbox Code Playgroud)
configmap.yaml 的示例部分
data:
{{ .Values.outsideVal.x1 }}
Run Code Online (Sandbox Code Playgroud)
预期结果应如下所示
data:
az1
Run Code Online (Sandbox Code Playgroud)
测试舵输出
helm template --set outsideVal=aaa mychart
Run Code Online (Sandbox Code Playgroud)
并得到这个错误
Error: render error in "./templates/configmap.yaml": template: ./templates/configmap.yaml:21:12: executing "./templates/configmap.yaml" at <.Values.outsideVal.x...>: can't evaluate field x1 in type interface {}
Run Code Online (Sandbox Code Playgroud)
所以问题是如何得到预期的结果?
我无法为 Helm Chart 渲染模板,该模板需要具有可轻松扩展的节点和副本数量。我收到以下错误消息。奇怪的是,如果我删除了内部循环而不是嵌套循环,我不会收到以下错误消息。我是全新的,但这似乎有效。我不知所措。
错误:
$ helm install . --dry-run --debug
Error: render error in "app-on-k8s/templates/configmap_configd.yaml": template: app-on-k8s/templates/configmap_configd.yaml:18:77: executing "app-on-k8s/templates/configmap_configd.yaml" at <.Values.nodeCount>: can't evaluate field Values in type int
Run Code Online (Sandbox Code Playgroud)
这是我的 values.yaml 文件中的相关部分:
# number of nodes / shards
nodeCount: 5
replicaCount: 3
Run Code Online (Sandbox Code Playgroud)
我的模板文件中的相关部分:
<default>
{{range $i, $e := until (atoi (printf "%d" (int64 .Values.nodeCount))) }}
<node>
{{range $j, $k := until (atoi (printf "%d" (int64 .Values.replicaCount))) }} #line 18
<replica>
<host>{{ $.Release.Name }}-{{$j}}</host>
<port>{{ $.Values.service.rpc_port }}</port>
</replica>
{{end}}
</node>
{{end}} …Run Code Online (Sandbox Code Playgroud) GoLand 对 Go html 文件具有语法支持,文件扩展名为 .gohtml
那么 Go 文本文件呢?GoLand 也支持吗?.tmplvim-go 支持,但 GoLand 不支持。
简单的问题是否可以使用 helm 和 sprig 功能获取尺寸列表?
我的列表 :
list:
- a
- b
- c
Run Code Online (Sandbox Code Playgroud)
我试过这样:
{{ .Values.list | len }}
{{ .Values.list | size }}
{{ .Values.list | length }}
Run Code Online (Sandbox Code Playgroud) 值.yaml
replicas: {
test: 1,
stage: 2,
prod: 3
}
Run Code Online (Sandbox Code Playgroud)
在这里,我尝试使用 Helm 模板来定义每个命名空间的副本数,但不确定正确的语法和模式:
部署.yaml
replicas: {{ .Values.replicas.{{ .Release.Namespace }} }}
Run Code Online (Sandbox Code Playgroud)
因此,如果将其部署到--namespace=prod,我希望模板返回:
# .Values.replicas.prod
replicas: 3
Run Code Online (Sandbox Code Playgroud) 我似乎无法找到一个简单有效的解决方案来解决我在 Go 模板/Helm 中经常出现的问题。基本上,给定一个 values.yaml 如下:
ingress:
hosts:
- host: busy-a.local
paths:
- backend:
serviceName:busy-a
servicePort: 80
path: /busy/[A-Z0-9]{1}
Run Code Online (Sandbox Code Playgroud)
和这样的模板/ingress.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{.Values.project}}-ingress
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
backend:
serviceName: {{ .backend.serviceName }} # this works
servicePort: {{ .backend.servicePort }} # but can we shorthand backend?
{{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
但是,那岂不是更容易“解包”中backend …
我真的不知道这里的错误是什么,是一个带有 _helpers.tpl 的简单 helm 部署,它没有意义,可能是一个愚蠢的错误,代码:
部署.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
{{ include "metadata.name" . }}-deploy
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
vars: {{- include "envs.var" .Values.secret.data }}
Run Code Online (Sandbox Code Playgroud)
_helpers.tpl
{{- define "envs.var"}}
{{- range $key := . }}
- name: {{ $key | upper | quote}}
valueFrom: …Run Code Online (Sandbox Code Playgroud)