It could be wherever you'd like either in check-file-perms.cf or library.cf

Cheers,
--Nakarin

On Mar 22, 2010, at 9:40 AM, daniel parkes wrote:

> I'm using the first solution, but I'm getting and error with the always 
> clause:
> 
> No such FnCall "always()" in promise @ /var/cfengine/git/check-file-perms.cf 
> near line 384
> 
> Not sure where I should have defined the always function, in my library.cf ?
> 
> .......................
> 
> more file
> 
> ..........................
> 
> "/etc/hosts.testing"
> 
> edit_line => replace_or_add(".*\s+rxodb", "1.2.3.4 rxodb rxodb.com"),
> 
> perms => mog("600","root","root"),
> 
> changes => lay_a_tripwire;
> 
> }
> 
> bundle edit_line replace_or_add(pattern,line)
> 
> {
> 
> replace_patterns:
> 
> "^${pattern}$"
> 
> replace_with => value("${line}"),
> 
> classes => always("replace_done");
> 
> insert_lines:
> 
> replace_done::
> 
> "${line}";
> 
> }
> 
>  
>  
>  
>  
>  
>  
>  
>  
>  
>  
>  
>  
>  
> cf3 !! File /etc/hosts.testing was not in md5 database - new file found
> cf3 I: Report relates to a promise with handle ""
> 
> cf3 I: Made in version 'not specified' of 
> '/var/cfengine/git/check-file-perms.cf' near line 372
> 
> cf3 -> Object /etc/hosts.testing had permission 444, changed it to 600
> 
> cf3 -> Handling file existence constraints on /etc/hosts.testing
> 
> cf3 -> File permissions on /etc/hosts.testing as promised
> 
> cf3 -> Handling file edits in edit_line bundle replace_or_add
> 
> cf3
> 
> cf3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> 
> cf3 BUNDLE replace_or_add( {'.*\s+rxfordb','1.2.3.4 rxfordb rxfordb.mdef.es'} 
> )
> 
> cf3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> 
> cf3
> 
> cf3 ? Augment scope replace_or_add with pattern
> 
> cf3 ? Augment scope replace_or_add with line
> 
> cf3 ?? Private class context
> 
> cf3
> 
> cf3
> 
> cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = =
> 
> cf3 insert_lines in bundle replace_or_add
> 
> cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = =
> 
> cf3
> 
> cf3
> 
> cf3 . . . . . . . . . . . . . . .
> 
> cf3 Skipping whole next edit promise, as context replace_done is not relevant
> 
> cf3 . . . . . . . . . . . . . . .
> 
> cf3
> 
> cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = =
> 
> cf3 replace_patterns in bundle replace_or_add
> 
> cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = =
> 
> cf3
> 
> cf3 No such FnCall "always()" in promise @ 
> /var/cfengine/git/check-file-perms.cf near line 384
> 
> cf3
> 
> cf3 .........................................................
> 
> cf3 Promise handle:
> 
> cf3 Promise made by: ^.*\s+rxfordb$
> 
> cf3 .........................................................
> 
> cf3
> 
> cf3 -> Looking at pattern ^.*\s+rxfordb$
> 
> cf3 Software error - expected type (X) for boolean constraint classes did not 
> match internals
> 
> cf3 Fatal cfengine error: Aborted
> 
> cf3 Outcome of version (not specified) (agent-0): Promises observed to be 
> kept 95%, Promises repaired 5%, Promises not repaired 0%
> 
> 
> 
> On Wed, Mar 17, 2010 at 7:15 PM, Diego Zamboni <di...@zzamboni.org> wrote:
> Daniel,
> 
> I have been working on a similar problem, and came up with the
> following two bundles for editing files. I think both of these could
> be used to edit an /etc/hosts file, one by passing the pattern, e.g.
> 
> edit_line => replace_or_add(".*\s+hostname", "1.2.3.4     hostname")
> # 1.2.3.4 is the new IP address
> 
> The second one can't be used as-is since the value you want to change
> (the IP address) is in the first field, I think the necessary change
> would be to change the "2" to "1" in the second call to col(), and
> maybe some other changes, I think this could certainly be used as a
> starting point.
> 
> Cheers,
> --Diego
> 
> 
> # Replace a pattern in a file with a single line.
> # If the pattern is not found, add the line to the file.
> # The pattern must match the whole line (it is automatically
> # anchored to the start and end of the line) to avoid
> # ambiguity.
> bundle edit_line replace_or_add(pattern,line)
> {
> replace_patterns:
>  "^${pattern}$"
>  replace_with => value("${line}"),
>  classes => always("replace_done");
> 
> insert_lines:
>  replace_done::
>  "${line}";
> }
> 
> # Sets the RHS of configuration items in the file of the form
> #   LHS RHS
> # If the line is commented out with #, it gets uncommented first
> # Adds a new line if non exists.
> # The argument is an associative array containint v[LHS]="rhs"
> 
> # Based on set_variable_values from cfengine_stdlib.cf, modified
> # by Diego Zamboni to use whitespace as separator, and to handle
> # commented-out lines.
> bundle edit_line set_config_values(v)
> {
> vars:
>  "index" slist => getindices("$(v)");
> 
>  # Be careful if the index string contains funny chars
>  "cindex[$(index)]" string => canonify("$(index)");
> 
> field_edits:
> 
>  # If the line is there, but commented out, first uncomment it
>  "#+$(index)\s+.*"
>     edit_field => col("\s+","1","$(index)","set");
> 
>  # match a line starting like the key something
>  "$(index)\s+.*"
>     edit_field => col("\s+","2","$($(v)[$(index)])","set"),
>        classes => if_ok("not_$(cindex[$(index)])");
> 
> insert_lines:
> 
>  "$(index) $($(v)[$(index)])",
>      ifvarclass => "!not_$(cindex[$(index)])";
> }
> 
> 
> 
> On Wed, Mar 17, 2010 at 11:43 AM, daniel parkes <liquidsm...@gmail.com> wrote:
> > Hi,
> >
> > We have a very large /etc/hosts(300 hosts) files in our servers that we have
> > to mantain for certain acient applications, as of now what I have configured
> > in cfengine 3.0.2 is an edit line bundle that reads from a master host file
> > and if the host isn't in the file it adds it.
> >
> > The problem is just and add line, if I modify one of the hosts ip address it
> > won't replace it with the new one, it just adds the line at the end.
> >
> > I have been triying to get it working with replace_with and regex
> > expresions, but I really can't find a way to do it easily, any of you doing
> > something like this could get me started ??
> >
> > I'cant paste the code I am using because i'm not at work, but I will get in
> > tomorrow.
> >
> > Thnx for the help
> >
> > _______________________________________________
> > 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

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to