Trace: » services
This is an old revision of the document!
Services
Services
These are services managing the upgrade of the server’s configuration. Each server has a set of configuration files filegens that will be upgraded on a dedicated server if the relevant points are changed in the panel. The services can be in three statuses :
Synced - the data in the panel correspond to the server’s configuration;
Pending rebuild - the changes have been made in the panel and the upgrade of the configuration is about to take place;
Rebuild blocked - an error occurred during upgrade, the automatic upgrade is blocked. The error will be shown in the graph Error
The uprade of the configuration doesn’t take place instantly! Right after the changes in the panel have been made, the service should be in the status Pending rebuild. In about two minute’s time the status will be changed to Synced, which means the necessary changes have been made on the server.
You can also find the section filegens in the menu actions можно видеть раздел filegens. Filegens это темплейты всех файлов, которые заливаются на сервер.
Filegens
Filegens (генераторы) представляют из себя простой способ генерации любых конфигов прямо из базы, без написания лишнего кода.
Рассмотрим самый простой пример, генерация конфига vhosts.conf для веб-сервера apache.
Идем в base/services, добавляем к сервису webserver новый генератор test.
Name - это имя filegen. При перестройке сервисов порядок вызова генератора определяется им.
Filename - имя файла, куда будет сохраняться результат работы генератора. Если тип генератора скрипт и Filename не заполнено, используется временный файл, который потом удаляется
Start mark - если файл необходимо встраивать внутрь другого, то это отметка начала генерированной секции. Необходимо оставлять это поле пустым, если нужно заменять файл.
End mark - аналогично Start mark. Не используется, если Start mark не определен.
File permissions - 4-х значный номер, обозначающий права на файл. Если не указан, используются права существующего на dedicated файла.
Template - сам темплейт конфига. Подробнее о структуре ниже.
Итак, пример построения apache_vhosts.conf:
<TMPL_LOOP accounts_loop> # HERE we loop over accounts # sites of account <TMPL_VAR login> <TMPL_LOOP hosts_loop> # embedded loop of bound to account hosts <VirtualHost *:80> ServerName <TMPL_VAR name> ServerAlias <TMPL_LOOP aliases_loop><TMPL_VAR alias> </TMPL_LOOP> # one more embedded loop # здесь используется backreferences и переменные из настроек DocumentRoot <TMPL_VAR GLOBAL_clients_home>/<TMPL_VAR accounts_loop.login>/domains/<TMPL_VAR name>/html </VirtualHost> </TMPL_LOOP> # closing hosts_loop </TMPL_LOOP> # closing accounts_loop
Начинаем разбирать наш пример.
Первым делом желательно прочитать документацию по HTML::Template, template-engine, использующуюся при построении файлов. Достаточно понимать значение TMPL_LOOP, TMPL_VAR. Документация расположена по адресу http://html-template.sourceforge.net/.
Каждый цикл индицируется названием LOOPNAME_loop и имеет ключ, к которому в темплейте можно обращаться как main_key. Например,
<TMPL_LOOP accounts_loop> Account <TMPL_VAR login> have ID <TMPL_VAR main_key> </TMPL_LOOP>
У каждого цикла есть параметры, в accounts_loop есть login, passwd и т.п.
Параметром может быть цикл, тогда он содержит поддерево данных, типа {accounts_loop}{$account_id}{hosts_loop}{$host_id}{name}.
В примере с apache_vhosts.conf это видно на hosts_loop и aliases_loop.
Особый пример представляет строка DocumentRoot, в которой используется сразу два приема, backreference и доступ к переменным из настроек.
backreference - это переменная, НЕ ЛЕЖАЩАЯ в текущей вложенности цикла. Как пример, мы приводим accounts_loop.login, который в hosts_loop не виден, так как хранится в accounts_loop (внешнем цикле).
GLOBAL - способ обратиться к переменным в configure. Убирается из имени GLOBAL_ и вытаскивается переменная.
Использование нескольких одинаковых циклов.
В случае, если нужно использовать в одном уровне вложенности несколько одинаковых циклов применяется следующий путь:
Пример (два цикла accounts_loop рядом):
Accounts: <TMPL_LOOP accounts_loop><TMPL_VAR login> </TMPL_LOOP> Hosts: <TMPL_LOOP accounts_loop><TMPL_LOOP hosts_loop><TMPL_VAR name> </TMPL_LOOP></TMPL_LOOP>
работать НЕ БУДЕТ, так как в темплейте два одинаковых внешних цикла accounts_loop и система будет пытаться присвоить переменные от одного цикла другому, что будет вызывать ошибку.
Обходной путь - использовать номера в имени цикла.
Правильный пример:
Accounts: <TMPL_LOOP accounts_loop><TMPL_VAR login> </TMPL_LOOP> Hosts: <TMPL_LOOP 2_accounts_loop><TMPL_LOOP hosts_loop><TMPL_VAR name> </TMPL_LOOP></TMPL_LOOP>
Обратите внимание, что во втором случае вместо accounts_loop стоит 2_accounts_loop - будет браться цикл accounts_loop, но не возникнет коллизии имен.
Генерация нескольких файлов из одного темплейта.
Иногда необходимо сделать группу конфигурационных файлов. Как пример можно привести файлы зон named или виртуальных хостов apache. Самый простой способ деления - вставлять в темплейт метки начала деления DK_NEW_FILE. Пример: создаем файлы вирутальных хостов apache, по файлу на виртхост:
DK_NEW_FILE /usr/local/apache/conf.d/<TMPL_VAR name>.conf ServerName <TMPL_VAR name> ServerAlias <TMPL_LOOP aliases_loop><TMPL_VAR alias> </TMPL_LOOP> # one more embedded loop DocumentRoot <TMPL_VAR domain_htdocs_dir> # domain_htdocs_dir изменяется при каждой итерации цикла hosts_loop
DK_NEW_FILE дает команду системе обработки темплейтов создать файл с именем, идущим после DK_NEW_FILE (/usr/local/apache/conf.d/<TMPL_VAR name> в данном случае) и с содержимым от текущей метки до следующей или конца темплейта. метка DK_NEW_FILE должна находится в начале строки.