Seva Gluschenko <[email protected]> writes: > Dan, > > the useful policy to keep in mind all the time while creating either > cfengine promises or any other piece of code is KISS (keep it safe and > simple). > > I've proposed a generic edit_line bundle for /etc/fstab adjustment > recently which can be easily adapted to handle almost any space > separated file:
Interestingly, the following always work as expected, without
circumlocutions (maybe a simplification of your proposal?):
Remove everything that do not match, insert the good line.
#v+
m...@home: ~/$ rm -f /tmp/main.cf
removed `/tmp/main.cf'
m...@home: ~/$ /usr/sbin/cf-agent -K
R: I add the 'smtp_host smtp.example.net' line
m...@home: ~/$ /usr/sbin/cf-agent -K
m...@home: ~/$ perl -pi -e 's/\.net/.org/' /tmp/main.cf
m...@home: ~/$ /usr/sbin/cf-agent -K
R: I delete some missconfigured smtp_host line
R: I add the 'smtp_host smtp.example.net' line
#v-
Delete everything that do match 'line with the wrong smtp server', this
works as expected (second cf-agent repairs nothing).
Add 'line with the good smtp server', this is repaired only if the line
is not already present.
#v+
body common control
{
bundlesequence => { "filetest" };
version => "0.0.2";
}
bundle agent filetest
{
vars:
"smtp" string => "smtp.example.net";
files:
"/tmp/main.cf"
create => "true",
edit_line => fix_smtp_host("$(smtp)"),
comment => "smpt_host must be $(smtp)";
reports:
SomeSMTPHostDeleted::
"I delete some missconfigured smtp_host line";
SMTPHostAdded::
"I add the 'smtp_host $(smtp)' line";
}
bundle edit_line fix_smtp_host(smtp)
{
delete_lines:
any::
"^(smtp_host)\s+(?!$(smtp)).*",
classes => if_repaired("SomeSMTPHostDeleted"),
comment => "Delete missconfigured smtp_host";
insert_lines:
any::
"smtp_host $(smtp)",
classes => if_repaired("SMTPHostAdded"),
comment => "Add smtp_host if none";
}
body replace_with value(v)
{
replace_value => "$(v)";
occurrences => "all";
}
body classes if_repaired(x)
{
promise_repaired => { "$(x)" };
}
#v-
Regards.
--
Daniel Dehennin
Récupérer ma clef GPG:
gpg --keyserver pgp.mit.edu --recv-keys 0x6A2540D1
pgp3cKsJ2r0o0.pgp
Description: PGP signature
_______________________________________________ Help-cfengine mailing list [email protected] https://cfengine.org/mailman/listinfo/help-cfengine
