LINUX.ORG.RU
ФорумAdmin

Динамическая генерация конфигурационных файлов

 , ,


0

1

Здравствуйте, уважаемые системные администраторы. Перед тем как задавать вам вопрос, я, честно, воспользовался поиском, но, к сожалению, ничего похожего не нашел. Вопрос, может быть, несколько оторван от реальности и имеет чисто исследовательский интерес, но тем не менее. Существует ли какое-то решение, которое позволяет использовать в конфиг-файлах юникс-системы переменные, циклы, условия и тд, т.е. конфиг должен представлять собой что-то типа шаблона, который динамически и прозрачно для читающего его приложения проходит разбор, подстановку переменных, выполнение ветвлений и тд. В результате приложение получит уже готовый конфиг в требуемом ему формате. Я знаю, что существуют решения вроде puppet (скажу сразу, я им не пользовался и не знаю его функциональных возможностей, а значит если он все это умеет, то заранее прошу простить мое невежество), но в данном случае речь о центральном хранилице конфигов не идет. Я попробую на примере конфига nginx более точно объяснить свой вопрос.

1) Есть директива worker_processes. На сколько я помню, ее следует устанавливать в к-во ядер на машинке. Было бы удобно написать что-то типа worker_processes = {{ 'nproc'|shell }}; - выполнить шел-команду и ее результат подставить на место переменной (да, я знаю, что в новых версиях nginx появился параметр auto). Мы берем конфиг с такими подстановками заливаем на все сервера и на каждом сервере он для nginx будет разный. Аналогично можно будет поступить и с другими директивами. Если предположить, что значение кокой-то директивы зависит от параметров ядра и от железа машинки, с помошью шел-команд и пайпов мы можем вычислить необходимые значения. Это позволит нам написать один раз конфиг, который, по возможности, будет затюнен для каждой машинки на которой он используется.

2) У меня 10 практически идентичных виртуальных nginx-хостов. Они отличаются только портом бекенда и путем к подключаемому для каждого хоста доп файлу конфигурации (что-то типа per-site config).Могу ли я сделать что-то типа этого?

{% for host_name, backend_port in [('host1', 123), ('host2', 321)] %}

server {

listen 80;

server_name {{ host_name }};

........

proxy_pass http://localhost:{{ backend_port }}/;

.........

include vhosts/{{ host_name}}.conf;

}

{% endif %}

Я далек от мысли, что подобный вариант работы с конфигами пришел в голову только мне, но пока мои поиски готового решения не увенчались успехом. Также хочу спросить, имеет ли смысл использовать подобные решения? Имеет ли оно право на существование, и если да, то где его целесообразно применять? Как вы, уважаемые системные администраторы, подходите к решению подобных вопросов?

Заранее благодарен за любую оказанную помощь


«Динамически и прозрачно для читающего» - вряд ли. Я решил подобную проблему инит-скриптом, который запускается до конфигурируемых сервисов и генерирует для них конфигурационные файлы при помощи m4.

Deleted
()

Есть такая программа - sed. С ее помощью можно запускать sed-программы. А вот с их помощью сделать такие шаблоны можно очень легко и просто. :)

SunDoc
()
Ответ на: комментарий от danfox

Как вариант (если конфиги относительно часто меняются, и нет желания выписывать это все в папете) fabric и jinja-шаблоны конфигов. Проверено, работает.

leave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.