亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 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本身并不支持它??雌饋韉ockerize 工具提供了一些擴展功能,但它們都不允許這樣做。

(我能想到的最接近的事情是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 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號