CFEngine 3.12: как распространять шаблоны на хосты?
CFEngine великолепен, но я не могу понять, как скопировать шаблоны, определенные на серверах политики, на соответствующие хосты.
Например, я ищу для развертывания nginx.conf, я сделал политику на моем главном сервере:
bundle agent loadbalancers{
files:
ubuntu::
"/etc/nginx/nginx.conf"
create => "true",
edit_template => "/tmp/nginx.conf.template",
template_method => "mustache",
template_data => parsejson('
{
"worker_processes": "auto",
"worker_rlimit_nofile": 32768,
"worker_connections": 16384,
}
');
}
Но очевидно, что CFEngine не может найти /tmp/nginx.conf.template на всех других клиентах...
Похоже, шаблоны не копируются с сервера на клиенты, что я пропустил? Я думаю, я скучаю, что-то понял...
Документация не объясняет, как распространять файлы шаблонов, поэтому я надеюсь, что вы мне поможете, спасибо!
1 ответ
Я рад, что вы наслаждаетесь CFEngine. Если вы хотите, чтобы один файл был копией другого файла, вы используете тело copy_from, чтобы указать его источник.
Например:
bundle agent loadbalancers{
files:
ubuntu::
"/tmp/nginx.conf.template"
comment => "We want to be sure and have an up to date template",
copy_from => remote_dcp( "/var/cfengine/masterfiles/templates/nginx.conf.mustache",
$(sys.policy_hub));
"/etc/nginx/nginx.conf"
create => "true",
edit_template => "/tmp/nginx.conf.template",
template_method => "mustache",
template_data => parsejson('
{
"worker_processes": "auto",
"worker_rlimit_nofile": 32768,
"worker_connections": 16384,
}
');
}
Некоторые люди организуют копирование своих шаблонов как часть своих обычных обновлений политики, поэтому очень удобно просто ссылаться на шаблон, относящийся к вашему файлу политики.
Например, допустим, ваша политикаservices/my_nginx_app/policy/loadbalancers.cf
и ваш шаблонservices/my_nginx_app/templates/nginx.conf.mustache
, Затем, если это tempalte обновляется как часть обычного обновления политики, вам не нужно обещать отдельную копию файла, вместо этого просто указывайте путь к шаблону, относящийся к файлу политики.
bundle agent loadbalancers{
files:
ubuntu::
"/etc/nginx/nginx.conf"
create => "true",
edit_template => "$(this.promise_dirname)/../templates/nginx.conf.mustache",
template_method => "mustache",
template_data => parsejson('
{
"worker_processes": "auto",
"worker_rlimit_nofile": 32768,
"worker_connections": 16384,
}
');
}
Не всегда целесообразно отправлять ваши шаблоны на все хосты как часть вашего основного набора политик, это действительно зависит от потребностей вашей среды.