Python Cheetah - укажите пары имя / значение для шаблонов
Я пытаюсь шаблонизировать мою конфигурацию Apache httpd для развертывания в различных средах, и я хотел бы использовать для этого приложение Cheetah на языке Python. Тем не менее, я испытываю трудности с командной строкой cheetah
программа, и я считаю, что это сочетание моего недопонимания гепарда и отсутствия документации.
Моя цель - получить один файл шаблона httpd.conf и заменить переменные из файла определения среды.
httpd.tmpl:
Listen $HTTP_PORT
...
#if $ENABLE_HTTPS == true
<Virtual Host *:$HTTPS_PORT>
...
</VirtualHost>
#end if
production.env:
HTTP_PORT=34120
HTTPS_PORT=34121
ENABLE_HTTPS=true
Какая командная строка нужна для заполнения шаблона Cheetah? Я использовал:
cheetah f --oext conf --debug httpd
Но очевидно prod.env
не читается как входной файл. Добавление #include
в начало моего файла шаблона:
#include "prod.env"
И ни одно из моих имен не найдено
Cheetah.NameMapper.NotFound: cannot find 'APACHE_PORT'
В любом случае, это не идеальная ситуация, потому что мне нужна возможность указывать файл сопоставления имя / значение в командной строке для каждого вызова гепарда.
Спасибо!
РЕДАКТИРОВАТЬ: я знаю, что я могу написать сценарий Python для выполнения чтения файла, а затем заменить, используя Cheetah API. Тем не менее, я ищу способ использовать командную строку для заполнения моего шаблона.
РЕШИТЬ
Благодаря ссылке на документацию, предоставленной @pyfunc, теперь я понимаю, как этого добиться. Основным вопросом является поставка --env
в командной строке гепарда, которая передает текущие переменные среды гепарду. Однако эти переменные среды должны быть экспортированы первыми.
1 ответ
Гепард оборачивает каждый кусок текста #include внутри вложенного объекта Template.
использование
#include raw "prod.env"
также
#set global $HTTP_PORT="34120"
Чтобы включить разные env-файлы, вы тоже должны будете их шаблонизировать.
Пожалуйста, посмотрите на следующие примеры, которые должны вам помочь.