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,
       }
    ');

}

将您的模板作为您的一部分发送给所有主机并不总是合适的 主要政策设置,这真的取决于你的环境的需要。