Yep, but I can't find this function in the cfengine open promise standard
library.

Diego do you have the function always in you solution so I can use it?

Thnx



On Mon, Mar 22, 2010 at 11:47 AM, Nakarin Phooripoom <
mynameisje...@gmail.com> wrote:

> 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