CFEngine 3.12:如何将模板传播到主机?
CFEngine 3.12: how to propagate templates to hosts?
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...
看起来模板没有从服务器复制到客户端,我错过了什么?我想我想念明白了什么...
文档没有说明如何传播模板文件,所以希望你能帮助我,谢谢!
很高兴您喜欢 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
。然后,如果那个模板是
作为正常政策更新的一部分进行更新,您无需承诺单独更新
文件复制,而只是引用与模板相关的路径
策略文件。
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,
}
');
}
将您的模板作为您的一部分发送给所有主机并不总是合适的
主要政策设置,这真的取决于你的环境的需要。
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...
看起来模板没有从服务器复制到客户端,我错过了什么?我想我想念明白了什么...
文档没有说明如何传播模板文件,所以希望你能帮助我,谢谢!
很高兴您喜欢 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
。然后,如果那个模板是
作为正常政策更新的一部分进行更新,您无需承诺单独更新
文件复制,而只是引用与模板相关的路径
策略文件。
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,
}
');
}
将您的模板作为您的一部分发送给所有主机并不总是合适的 主要政策设置,这真的取决于你的环境的需要。