CFEngine 3.12:如何将模板传播到主机?

时间:2018-11-01 19:31:26

标签: templates cfengine

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 个答案:

答案 0 :(得分:1)

很高兴您喜欢CFEngine。如果您希望一个文件成为另一个文件的副本,则可以使用copy_from正文来 指定其来源。

例如:

$results

有些人安排将其模板复制为正常情况的一部分 政策更新,那么仅引用模板关联内容就非常方便 到您的策略文件。

例如,假设您的政策在 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。然后,如果那个tempalte是 作为常规策略更新的一部分进行更新,您不必保证单独进行 文件副本,而只需引用与模板相关的模板的路径 政策文件。

services/my_nginx_app/templates/nginx.conf.mustache

将模板作为您的一部分发送到所有主机并不总是合适的 主要策略集,它实际上取决于您环境的需求。