为了账号安全,请及时绑定邮箱和手机立即绑定

从 dockerize golang 模板中的文件内容设置变量

从 dockerize golang 模板中的文件内容设置变量

Go
泛舟湖上清波郎朗 2023-05-22 16:10:07
我想使用dockerizejsonQuery中的语法来解析 traefik 的 acme.json 并为另一个服务中的 TLS 设置发出证书/密钥文件。jsonQuery 接受一个字符串,该示例将其作为环境变量提供{{ .Env.myJson }}我如何获取文件的字符串内容:{{with $myJsonContent := <insert magic here> }}     # extract key to file  {{end}}
查看完整描述

2 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

Gotext/template本身并不支持它。看起来dockerize 工具提供了一些扩展功能,但它们都不允许这样做。

(我能想到的最接近的事情是kubernetes-helm支持从 Helm chart 读取文件,但这是通过注入一个特殊的访问器对象在 Go 级别实现的,该访问器对象可以为模板代码提供文件访问 API,并且它有意限制为物理上位于 Helm chart 目录中的文件。)


查看完整回答
反对 回复 2023-05-22
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

我看不到任何向模板添加函数的方法,因为 dockerize 不会在解析之前向模板公开添加函数。因此,您要么必须 (1) 将 acme.json 的内容放入环境变量中,要么 (2) 修改 dockerize 以在模板中包含 jsonFileQuery 函数。

  1. 在运行 dockerize 之前将 acme.json 的内容添加到环境变量中——然后像示例中那样访问。这可以通过一个小的 go 程序来完成,添加到容器中并在 CMD dockerize 之前通过 CMD 运行

  2. 分叉 dockerize 并更改 jsonQuery:分叉 dockerize 并更改template.go 的第 83 行:
    从:parser, err := gojq.NewStringQuery(jsonObj)
    到: parser, err := gojq.NewFileQuery(jsonObj)
    然后使用:

    {{with $myJsonContent := jsonQuery "/opt/traefik/acme.json" "toplevelobject"  }}
        # extract key to file 
    {{end}}

    gojq.NewStringQuery()是 jsonQuery 模板函数背后的函数。gojq.NewFileQuery ()版本与 StringQuery 具有相同的签名,但在输入字符串的路径处读取文件,而不是将输入字符串用作 json。

    或者

    将新的 jsonFileQuery 模板函数合并到 dockerize 中:向 dockerize 提交问题以将 jsonFileQuery 添加到模板函数中。似乎它可以设置为与 jsonQuery 相同,但与上面的区别很小。在template.go中,添加 jsonFileQuery 函数并将其分配给 generateFile() 中的 template.FuncMap{} 中的 jsonFileQuery。


查看完整回答
反对 回复 2023-05-22
  • 2 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信