2 回答
TA贡献1824条经验 获得超6个赞
Gotext/template
本身并不支持它。看起来dockerize 工具提供了一些扩展功能,但它们都不允许这样做。
(我能想到的最接近的事情是kubernetes-helm支持从 Helm chart 读取文件,但这是通过注入一个特殊的访问器对象在 Go 级别实现的,该访问器对象可以为模板代码提供文件访问 API,并且它有意限制为物理上位于 Helm chart 目录中的文件。)
TA贡献1877条经验 获得超6个赞
我看不到任何向模板添加函数的方法,因为 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。
- 2 回答
- 0 关注
- 109 浏览
添加回答
举报