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

}

Не всегда целесообразно отправлять ваши шаблоны на все хосты как часть вашего основного набора политик, это действительно зависит от потребностей вашей среды.

Другие вопросы по тегам