Назад | Перейти на главную страницу

Редактирование файла конфигурации языка марионетки

Я пытаюсь создать марионеточный рецепт для сервера журнала и клиента с помощью syslog-ng. Я знаю, что могу иметь собственные файлы конфигурации, используя файлы шаблонов erb и заменять определенные переменные в файлах erb. Я также знаю, что file ресурс просто заменяет файлы либо из источника, либо из шаблона.

Однако моя проблема заключается в том, что у каждого клиента будут разные требования и разное количество файлов для перенаправления, и большинство клиентов не используют API-интерфейсы syslog для регистрации своей информации, поэтому я должен указать имена файлов для каждого приложения на каждом клиенте и, соответственно, чтобы продолжать добавлять что-то в файл конфигурации сервера.

Я не смог найти в марионетке никаких функций цикла, которые могли бы помочь мне сгенерировать или добавить информацию в существующий файл syslog-ng.conf. Все, что я вижу, это то, что file ресурс заменит существующий, если я не сделаю что-то умное, используя exec.

В этом случае вам следует внимательно изучить рассматриваемый файл конфигурации и посмотреть, поддерживает ли он какой-либо каталог include. То есть вы можете поместить файлы конфигурации в подкаталог и дать указание основной программе включить их. Таким образом, каждая подсистема может просто добавлять фрагменты конфигурации по мере необходимости. Syslog-ng делает кажется, чтобы поддержать этот тип настройки.

Если это не встроено в рассматриваемое приложение, вы можете использовать объединить шаблон где у вас в основном есть марионетка, которая собирает конфигурацию на стороне клиента из набора фрагментов конфигурации.

Вы можете попробовать создать шаблон с некоторыми переменными, например

source s_<%= localhost_name%> {
tcp(ip(0.0.0.0)
port(<%= log_port%>));
};

template t_<%= localhost_name%> {
template ("$MSGHDR$MSG\n");
template_escape(no);
};

destination d_<%= localhost_name%>  {
file("<%= log_file%>" template(t_<%= localhost_name%>));
};

log {
source(s_<%= localhost_name%>);
destination(d_<%= localhost_name%>);
};

Это сгенерирует файл, который будет прослушивать все TCP-адреса порта системного журнала и соответствующим образом фильтровать сообщения.