[email protected] writes: > I don't think that PCRE exactly matches Perl regular expressions so > beware when testing with Perl. I tend to use pcregrep to test > matches. However, that is not exactly like Cfengine's use of PCRE > since CF tends to need extra escapes here and there. So I also test > using the regex tool at cfengine.com.
Here is my pcretest session:
#v+
pcretest
PCRE version 8.02 2010-03-19
re> /^(smtp_host)\s+(?!smtp.example.net$).*/
data> smtp_host smtp.example.net
No match
data> smtp_host smtp.example.org
0: smtp_host smtp.example.org
1: smtp_host
#v-
Testing the different regexp on the pcre regexp tester gives me the
following (note that '\s+' in input is changed to 's+' in output):
- in the case the line must be replaced:
#v+
Summary:
Regular expression: '^(smtp_host)s+(?!smtp.example.net$).*'
Line to be matched: 'smtp_host smtp.example.org'
Compilation status:
Success: Regular expression OK.
Editfiles:
Error: Undefined error
Processes:
Error: Undefined error
#v-
- in the case the line must not be replaced:
#v+
Summary:
Regular expression: '^(smtp_host)s+(?!smtp.example.net$).*'
Line to be matched: 'smtp_host smtp.example.net'
Compilation status:
Success: Regular expression OK.
Editfiles:
Error: Undefined error
Processes:
Error: Undefined error
#v-
> I had a client who was using the if_repaired or if_ok bodies from the
> standard library. I don't know if the error was in the library or he
> introduced the error during his learning process but there was a logic
> error in one of the bodies that caused unexpected results. You might
> double check yours.
The replace_patterns is always repaired:
#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:
SMTPHostFixed::
"I add the 'smtp_host $(smtp)' line";
SomeSMTPHostReplaced::
"I replace some missconfigured smtp_host line";
}
bundle edit_line fix_smtp_host(smtp)
{
classes:
"HasSMTPhost" expression => regline("^smtp_host.*", "$(edit.filename)");
insert_lines:
!HasSMTPhost::
"smtp_host $(smtp)",
classes => if_repaired("SMTPHostFixed"),
comment => "Add smtp_host if none";
replace_patterns:
HasSMTPhost::
"^(smtp_host)\s+(?!$(smtp)$).*" replace_with => value("$(match.1)
$(smtp)"),
classes => if_repaired("SomeSMTPHostReplaced"),
comment => "Replace missconfigured smtp_host";
}
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
pgpLx5hM45JLI.pgp
Description: PGP signature
_______________________________________________ Help-cfengine mailing list [email protected] https://cfengine.org/mailman/listinfo/help-cfengine
