从dockerize golang模板中的文件内容设置变量
我想使用中的从dockerize golang模板中的文件内容设置变量,go,kubernetes-helm,Go,Kubernetes Helm,我想使用中的jsonQuery语法来解析traefik的acme.json,并为另一个服务中的TLS设置发出证书/密钥文件 jsonQuery接受一个字符串,该字符串作为环境变量{{.Env.myJson}} 如何获取文件的字符串内容: {{with $myJsonContent := <insert magic here> }} # extract key to file {{end}} {{带$myJsonContent:=} #将密钥提取到文件 {{end} Go的
jsonQuery
语法来解析traefik的acme.json,并为另一个服务中的TLS设置发出证书/密钥文件
jsonQuery接受一个字符串,该字符串作为环境变量{{.Env.myJson}}
如何获取文件的字符串内容:
{{with $myJsonContent := <insert magic here> }}
# extract key to file
{{end}}
{{带$myJsonContent:=}
#将密钥提取到文件
{{end}
Go的本机不支持这一点。它支持dockerize工具,但它们都不允许这样做
(我能想到的最近的一件事是支持,但这是在Go级别通过注入一个特殊的访问器对象来实现的,该对象可以为模板代码提供文件访问API,并且有意将其限制为物理上位于Helm chart目录中的文件。)我看不到任何向模板添加函数的方法,因为dockerize不会在解析之前向模板公开函数的添加。因此,您必须(1)将acme.json的内容放入环境变量中,或者(2)修改dockerize以在模板中包含jsonFileQuery函数
from:
解析器,err:=gojq.NewStringQuery(jsonObj)
到:
解析器,err:=gojq.NewFileQuery(jsonObj)
然后使用:
{{with $myJsonContent := jsonQuery "/opt/traefik/acme.json" "toplevelobject" }}
# extract key to file
{{end}}
是jsonQuery模板函数后面的函数。该版本与StringQuery具有相同的签名,但在输入字符串的路径处读取文件,而不是将输入字符串用作json
或
将新的jsonFileQuery模板函数合并到dockerize中:向dockerize提交一个问题,以将jsonFileQuery添加到模板函数中。看起来它可以像jsonQuery一样进行设置,但是上面的差别很小。在中,添加jsonFileQuery函数并将其分配给generateFile()中template.FuncMap{}中的jsonFileQuery感谢@blobdon,这是我的假设,但我很感谢在golang有经验的人为我确认了这一点,并感谢他们在实现选项上提供了非常有用的指导。dockerize看起来不再积极维护了。您认为您将采用哪种方法?目前,我可能只使用
jq
将证书属性从acme.json
提取到crt/key/bundle中,并将它们装载到容器中。如果服务转向生产,我将根据您的上述想法制定选项1。干杯