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-файлы, вы тоже должны будете их шаблонизировать.

Пожалуйста, посмотрите на следующие примеры, которые должны вам помочь.

Другие вопросы по тегам