On Wed, Aug 18, 2010 at 11:37 AM, Mark Burgess wrote:

> Try this
> http://www.cfengine.org/manuals/cf3-solutions.html#Add-variable-definitions-to-a-file

Thanks, that was exactly what I needed!

For Google and list readers looking to configure /etc/ssh/sshd_config
with CFengine3:

I created a new bundle "set_keyword_values()" based on
set_variable_values() in cfengine_stdlib.cf - sshd_config uses
"keyword value" pairs without an equals-sign in between. I hope I
didn't mess up the regexps too much, just replaced the "=" with a
space ;-)

bundle agent sshd_config {
vars:
  # Want to set these values by the names of their array keys
  "rhs[Protocol]" string => "2";
  "rhs[PermitRootLogin]" string => "without-password";
  "rhs[UsePrivilegeSeparation]" string => "yes";
  "rhs[PermitUserEnvironment]" string => "yes";
  "rhs[X11Forwarding]" string => "yes";

files:
  "/tmp/sshd_config"
        create => "true",
     edit_line => set_keyword_values("sshd_config.rhs");
}


#######################
# For your library.cf #
#######################

bundle edit_line set_keyword_values(v)

 # Sets the RHS of keywords in the file of the form
 #   LHS RHS
 # Adds a new line if non exists

{
vars:

  "index" slist => getindices("$(v)");

  # Be careful if the index string contains funny chars

  "cindex[$(index)]" string => canonify("$(index)");

field_edits:

  # match a line starting like "keyword value"

  "$(index)\s* .*"

     edit_field => col(" ","2","$($(v)[$(index)])","set"),
        classes => if_ok("not_$(cindex[$(index)])");

insert_lines:

  "$(index) $($(v)[$(index)])",

      ifvarclass => "!not_$(cindex[$(index)])";
}


Mark, thanks for the quick response!

-- 
Met vriendelijke groet / Kind regards,
  Ed Voncken.
_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to