I'd do it as a two stage process:

1) Delete any line that has "(#\s*)?O QueueLA" .  If you really want to be 
fancy, I think you can say say "(#\s*)?O QueueLA=(?!100)" to only delete if the 
value is not 100).

2) Insert "O QueueLA=100"

Remember, cfengine does not edit "the file", it edits a temporary and replaces 
"the file" with the temporary if they are different - so you will be fine...

Alternatively, you can do this, but I think it is a tiny bit less efficient.
1) Delete "#\s+O QueueLA
2) Use set_variable_values to set the RHS to 100

-Dan

On Jun 29, 2011, at 5:50 PM, Aleksey Tsalolikhin wrote:

> Hi. I'm trying to write a policy to promise that sendmail.cf will
> contain the lines
> "O QueueLA=100" and "O RefuseLA=200" to raise the load average thresholds
> at which point sendmail will stop sending (or accepting) mail.
> 
> I've got two scenarios:
> 
> 1. sendmail contains the default, which is:
> 
> # load average at which we just queue messages
> #O QueueLA=8
> 
> # load average at which we refuse connections
> #O RefuseLA=12
> 
> So I just do a search and replace, "#O QueueLA=8" to "O QueueLA=100",
> that works fine.
> 
> Scenario #2:
> sendmail.cf has a DIFFERENT setting, e.g.
> O QueueLA=50
> 
> I want to change that to "O QueueLA=100".  This part is not working.
> 
> The regex I am using in my replace_patterns promise is:
> 
>        "^O QueueLA=[^1][^0][^0]"
> 
> Help, please?
> 
> Here is my full policy:
> 
> {{{
> 
> # sendmail will by default refuse to accept messages if the load
> average is too high
> 
> body common control {
>    inputs => { "/var/cfengine/inputs/cfengine_stdlib.cf" };
> }
> 
> bundle agent configure_sendmail_not_to_refuse_messages_under_high_load {
> 
>    files:
>        "/etc/mail/sendmail.cf"
>            edit_line => set_Queue_LA_and_Refuse_LA_to_very_high_values,
>            comment => "Raise QueueLA and RefuseLA ridiculously high,
> so that the OS craps out before sendmail does.  By default, sendmail
> will limit its functionality under high load. Well, don't do that.
> Maybe my server can operate under high load.  Maybe I like to squeeze
> a lot of work out of my server.";
> 
>    commands:
>      reload_sendmail::
>        "/etc/init.d/sendmail reload";
> }
> 
> 
> bundle edit_line set_Queue_LA_and_Refuse_LA_to_very_high_values {
> 
>    replace_patterns:
> 
>        "^#O QueueLA.*$"
> 
>            replace_with => value("O QueueLA=100"),
>            classes => if_repaired("reload_sendmail"),
>            comment => "Replace default line with my line";
> 
>    replace_patterns:
> 
>        "^O QueueLA=[^1][^0][^0]"
> 
>            replace_with => value("O QueueLA=100"),
>            classes => if_repaired("reload_sendmail"),
>            comment => "Replace non-matching value for QueueLA (not
> 100) with my value (100)";
> 
> 
> 
>    replace_patterns:
> 
>        "^#O RefuseLA.*$"
> 
>            replace_with => value("O RefuseLA=200"),
>            classes => if_repaired("reload_sendmail");
> 
> 
>    replace_patterns:
> 
>        "^O RefuseLA=[^2][^0][^0]"
> 
>            replace_with => value("O RefuseLA=200"),
>            classes => if_repaired("reload_sendmail"),
>            comment => "Replace non-matching value for RefuseLA (not
> 200) with my value (200)";
> }
> 
> }}}
> 
> I would like to keep the line with the parameter just below the
> comment describing it, as it is before Cfengine touches the file.
> 
> Yours,
> Aleksey
> _______________________________________________
> 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

Reply via email to