Forum: CFEngine Help
Subject: Re: About "new" templates correct usage or limitations
Author: th
Link to topic: https://cfengine.com/forum/read.php?3,26723,26835#msg-26835
zzamboni Wrote:
-------------------------------------------------------
> This could work as well - although what I was
> describing was using a separate, "master" file or
> template in the first step, rather than the
> already-existing file.
Yes, you're right. Better secure_cp a "master" file (stored on the policy
server for instance) than assume the "factory" file exists.
> If you want to have non-CFEngine-managed edits
> (why would you want that?)
For instance we've got the following problem :
For some reason we "have to" dump ldap PosixAccount entries into local
/etc/passwd and /etc/shadow files. Same for /etc/group. So we've got a
generated file storing around 4000 entries which represents a /etc/passwd
section.
In such a case, installing - even throuh CFEngine - a package (let's say apache
for instance) would dynamically add the apache user.
Obviously a template would not work here.
Besides, to preserve convergence (or idempotence), you cannot just append the
dump ldap entries into the local /etc/passwd file. So you've got to _insert_ a
file into /etc/passwd (let's say between 2 fake users used as delimiters).
This case, although not involving any template, underlines some issues I was
trying to describe :
- the limitation of large files manipulation, which in its turn underlines the
same limitation with templates (slow with edit_template or from the second run
of expand_template, too large for preserve_block)
- a case where you cannot control everything through CFEngine (although you
could add the apache user with a promise, granted)
To sum up the ideas I evoked in this thread. From my point of view :
- I don't speak for edit_template since I at first misunderstood its philosophy
- understood now thanks to Mark
- expand_template :
. why doesn't it empty the file first ? (as edit_template does). The cost
here is a longer run time starting from the second run.
. it misses the [% CFEngine class:: %] tags, the consequence being you've got
to define all the to-be-expanded variables in all the classes in your .cf file,
even in the classes where you don't want some of these variables defined
- promising a whole file :
. seems to be a good approach since an incomplete file would not be service
ready.
. 2 options, same strategy (3 stages) :
. copy a template/expand it/copy or rename
. or copy a "master" file/edit/copy or rename. This second option seems to
be the best since it has the flexibility the expand_template misses (as
described above) : using an array (as in your sshd_config promises), you can
define additionnal array entries for some classes only instead of defining
every variable for every classes with expand_template. The drawback being :
. with insert_lines, non-existing inserted lines are append at the end
. indentation not controlled by you
. harder to code than a template, especially if you insert lines into a
section (think Host section in ssh config file)
Thanks
--
TH
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine