我想使用dockerize中的jsonQuery
语法来解析traefik的acme.json并为另一个服务中的TLS设置发出证书/密钥文件。
jsonQuery接受一个字符串,该字符串作为示例提供为环境变量{{ .Env.myJson }}
如何获取文件的字符串内容:
{{with $myJsonContent := <insert magic here> }}
# extract key to file
{{end}}
答案 0 :(得分:1)
Go的text/template
本身不支持。它是looks like的dockerize工具provides a couple of extension functions,但它们都不允许。
(我能想到的最近一点是kubernetes-helm支持reading a file from a Helm chart,但这是在Go级别通过注入一个特殊的访问器对象实现的,该对象可以为模板代码提供文件访问API,并且故意限制为物理上位于Helm图表目录中的文件。)
答案 1 :(得分:0)
我看不到任何向模板添加功能的方法,因为dockerize在解析之前不会向模板公开添加功能。因此,您要么(1)将acme.json的内容放入环境变量中,要么(2)修改dockerize在模板中包含jsonFileQuery函数。
在运行dockerize之前将acme.json的内容添加到环境变量中-然后如示例中所示进行访问。这可以通过一个小的go程序来完成,将其添加到容器中并在CMD dockerize之前通过CMD运行
叉化和更改jsonQuery :叉化和更改line 83 of template.go:
来自: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。
OR
将新的jsonFileQuery模板函数合并到dockerize 中:向dockerize提交一个问题,以将jsonFileQuery添加到模板函数中。似乎可以将其设置为与jsonQuery相同,但是上面的差别很小。在template.go中,添加jsonFileQuery函数,并将其分配给generateFile()中template.FuncMap {}中的jsonFileQuery。