On Thu, Dec 9, 2010 at 4:57 AM, Daniel Dehennin < daniel.dehen...@baby-gnu.org> wrote:
> Michael Potter <mega...@gmail.com> writes: > > > I believe the problem is this expression: > > > > "^(smtp_host)\s+.*$" replace_with => value("$(match.1) $(smtp)"), > > > > Because you use a .* after the whitespace, the regex will continue to > match > > after any replacement occurs. > > > > Try using a negative lookahead assertion: > > > > "^(smtp_host)\s+(?!$(smtp))$" > > > > This will ensure the pattern only matches when smtp_host is *not* > followed > > by $(smtp), so after the first replacement occurs, the regex will no > longer > > match and will be convergent. > > Great, except I have a strange behaviour, when nothing should be change, > there is a change: > I think the problem is you are using if_ok to set "SomeSMTPHostReplaced". Try using if_repaired instead... > > #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 > R: I do not replace any missconfigured smtp_host line > R: I replace some missconfigured smtp_host line > > m...@home:~/ $ perl -pi -e 's/\.net/.org/' /tmp/main.cf > m...@home:~/ $ /usr/sbin/cf-agent -K > R: I replace some missconfigured smtp_host line > > m...@home:~/ $ /usr/sbin/cf-agent -K > R: I do not replace any missconfigured smtp_host line > R: I replace some missconfigured smtp_host line > #v- > > #v+ > cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = = > cf3 replace_patterns in bundle fix_smtp_host > cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = = > cf3 > cf3 > cf3 ......................................................... > cf3 Promise handle: > cf3 Promise made by: ^(smtp_host)\s+(?!smtp.example.net$).*$ > cf3 > cf3 Comment: Replace missconfigured smtp_host > cf3 ......................................................... > cf3 > cf3 -> Looking at pattern ^(smtp_host)\s+(?!smtp.example.net$).*$ > cf3 -> Replaced pattern "^(smtp_host)\s+(?!smtp.example.net$).*$" in > /tmp/main.cf > cf3 ?> defining promise result class SomeSMTPHostReplaced > cf3 -> << (1)"smtp_host smtp.example.net" > cf3 -> >> (1)"smtp_host smtp.example.net" > cf3 -> No pattern "^(smtp_host)\s+(?!smtp.example.net$).*$" in /tmp/ > main.cf > cf3 ?> defining promise result class NoSMTPHostReplaced > > #v- > > With the following configuration: > > #v+ > body common control > { > > bundlesequence => { "filetest" }; > version => "0.0.1"; > } > > bundle agent filetest > { > > vars: > > "smtp" string => "smtp.example.net"; > > files: > > "/tmp/main.cf" > create => "true", > edit_line => fix_smtp_host2("$(smtp)"), > comment => "smpt_host must be $(smtp)"; > > > reports: > > SMTPHostOK:: > "The smtp_host line is already configured"; > > SMTPHostFixed:: > "I add the 'smtp_host $(smtp)' line"; > > NoSMTPHostReplaced:: > "I do not replace any missconfigured smtp_host line"; > > SomeSMTPHostReplaced:: > "I replace some missconfigured smtp_host line"; > } > > bundle edit_line fix_smtp_host2(smtp) > { > classes: > > "HasSMTPhost" expression => regline("^smtp_host.*", > "$(edit.filename)"); > > insert_lines: > > !HasSMTPhost:: > "smtp_host $(smtp)", > classes => if_ok("SMTPHostOK", "SMTPHostFixed"), > comment => "Add smtp_host if none"; > > replace_patterns: > > HasSMTPhost:: > "^(smtp_host)\s+(?!$(smtp)$).*$" replace_with => > value("$(match.1) $(smtp)"), > classes => if_ok("NoSMTPHostReplaced", > "SomeSMTPHostReplaced"), > comment => "Replace missconfigured smtp_host"; > > } > > body replace_with value(v) > { > replace_value => "$(v)"; > occurrences => "all"; > } > > body classes if_ok(notchanged, changed) > { > promise_kept => { "$(notchanged)" }; > promise_repaired => { "$(changed)" }; > } > #v- > > Regards. > -- > Daniel Dehennin > Récupérer ma clef GPG: > gpg --keyserver pgp.mit.edu --recv-keys 0x6A2540D1 > > _______________________________________________ > Help-cfengine mailing list > Help-cfengine@cfengine.org > https://cfengine.org/mailman/listinfo/help-cfengine > >
_______________________________________________ Help-cfengine mailing list Help-cfengine@cfengine.org https://cfengine.org/mailman/listinfo/help-cfengine