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

我想使用dockerizejsonQuery中的语法来解析 traefik 的 acme.json 并为另一个服务中的 TLS 设置发出证书/密钥文件。

jsonQuery 接受一个字符串,该示例将其作为环境变量提供{{ .Env.myJson }}

我如何获取文件的字符串内容:

{{with $myJsonContent := <insert magic here> }}
    # extract key to file 
{{end}}


泛舟湖上清波郎朗
浏览 110回答 2
2回答

慕妹3242003

Gotext/template本身并不支持它。看起来dockerize 工具提供了一些扩展功能,但它们都不允许这样做。(我能想到的最接近的事情是kubernetes-helm支持从 Helm chart 读取文件,但这是通过注入一个特殊的访问器对象在 Go 级别实现的,该访问器对象可以为模板代码提供文件访问 API,并且它有意限制为物理上位于 Helm chart 目录中的文件。)

慕哥9229398

我看不到任何向模板添加函数的方法,因为 dockerize 不会在解析之前向模板公开添加函数。因此,您要么必须 (1) 将 acme.json 的内容放入环境变量中,要么 (2) 修改 dockerize 以在模板中包含 jsonFileQuery 函数。在运行 dockerize 之前将 acme.json 的内容添加到环境变量中——然后像示例中那样访问。这可以通过一个小的 go 程序来完成,添加到容器中并在 CMD dockerize 之前通过 CMD 运行分叉 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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go