Установка переменной из содержимого файла в шаблоне dockerize golang - PullRequest
0 голосов
/ 24 декабря 2018

Я хочу использовать синтаксис jsonQuery в dockerize для анализа файла acme.json traefik и создания файлов сертификатов / ключей для настроек TLS в другом сервисе.

jsonQuery принимает строку, которую пример дает в качестве переменной окружения {{ .Env.myJson }}

Как получить содержимое строки файла:

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

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Я не вижу способа добавить функцию в шаблон, так как dockerize не раскрывает добавление функций в шаблон перед синтаксическим анализом.Таким образом, вам придется (1) получить содержимое файла acme.json в переменную окружения или (2) изменить dockerize, чтобы включить в шаблоны функцию jsonFileQuery.

  1. Добавитьсодержимое acme.json в переменные окружения перед запуском dockerize, а затем доступ как в примере.Это может быть сделано с помощью небольшой программы go, добавленной в контейнер и запущенной через CMD до dockerize CMD

  2. Формирование документооборота и изменение jsonQuery : Форкирование докерства иизмените строку 83 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.

    ИЛИ

    Объединить новую функцию шаблона jsonFileQuery с dockerize : отправить проблему в dockerize, чтобы добавить jsonFileQuery к функциям шаблона.Похоже, что он может быть настроен так же, как jsonQuery, но с небольшой разницей выше.В template.go добавьте функцию jsonFileQuery и назначьте ее для jsonFileQuery в шаблоне. FuncMap {} внутри generateFile ().

0 голосов
/ 24 декабря 2018

Go's text/template изначально не поддерживает это.Он выглядит как инструмент dockerize , предоставляющий пару функций расширения , но ни одна из них не позволяет этого.

(Ближайшее, что я могу вспомнить, это то, что поддерживает чтение файла из диаграммы Хелма , но это реализовано на уровне Go, добавляя специальный объект доступа, который может предоставить API доступа к файлу для кода шаблона, и это намеренноограничено файлами, физически расположенными в каталоге диаграммы Хелма.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...