标签: go-templates

Go Template ParseFiles func 解析多个文件

如果我将两个或更多文件传递给 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吗?

templates go go-templates

2
推荐指数
1
解决办法
1594
查看次数

如何在 helm 模板中使用带有 .Values 的变量

我有以下 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-templates kubernetes-helm

2
推荐指数
1
解决办法
9137
查看次数

Golang中如何同时使用“html/template”和“text/template”

我正在使用 Go 发送电子邮件,并且正在从存储在数据库中的模板中解析主题和 HTML 正文。

对于主题,我不想t.Parse()转义 html 实体,因为它不是 HTML,只是纯文本,但对于正文,这正是我想要的行为。

我如何在同一个文件中执行这两项操作?

templates go go-templates

2
推荐指数
1
解决办法
854
查看次数

变量值作为舵图中的 yaml 键

我想通过在 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)

所以问题是如何得到预期的结果?

go-templates kubernetes kubernetes-helm

2
推荐指数
1
解决办法
4491
查看次数

图表模板中的嵌套循环

我无法为 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)

go-templates kubernetes kubernetes-helm

2
推荐指数
1
解决办法
2262
查看次数

GoLand 中的 Go 文本模板语法高亮显示

GoLand 对 Go html 文件具有语法支持,文件扩展名为 .gohtml

那么 Go 文本文件呢?GoLand 也支持吗?.tmplvim-go 支持,但 GoLand 不支持。

go go-templates goland

2
推荐指数
1
解决办法
1860
查看次数

带头盔的尺寸表

简单的问题是否可以使用 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)

go go-templates kubernetes-helm sprig-template-functions

2
推荐指数
1
解决办法
6317
查看次数

为每个命名空间定义值

值.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-templates kubernetes kubernetes-helm

2
推荐指数
1
解决办法
680
查看次数

在 Helm 模板中解压 Go 地图值

我似乎无法找到一个简单有效的解决方案来解决我在 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 …

go go-templates kubernetes-helm

2
推荐指数
1
解决办法
1958
查看次数

Helm 将 YAML 转换为 JSON 时出错:yaml:第 20 行:未找到预期的密钥

我真的不知道这里的错误是什么,是一个带有 _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)

go-templates kubernetes kubernetes-helm

2
推荐指数
1
解决办法
5701
查看次数