#  Copyright (C) Cfengine AS

#  This file is part of Cfengine 3 - written and maintained by Cfengine AS.

#  This program is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License as published by the
#  Free Software Foundation; version 3.

#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA

# To the extent this program is licensed as part of the Enterprise
# versions of Cfengine, the applicable Commerical Open Source License
# (COSL) may apply to this file if you as a licensee so wish it. See
# included file COSL.txt.

#
# Just bodies and editbundles here
#

body perms p(user,mode)

{
owners => { "$(user)" };
mode   => "$(mode)";
}

############################################

body depth_search recurse(d)

{
depth => "$(d)";
}

#########################################################

body delete tidy

{
dirlinks => "delete";          #keep/tidy/delete
rmdirs   => "true";             #none/all/sub
}

#########################################################

body file_select days_old(days)

#
# we can build old "include", "exclude", and "ignore" 
# from these as standard patterns - these bodies can
# form a library of standard patterns
#

{
mtime       => irange(ago(1,0,0,0,0,0),ago(0,0,$(days),0,0,0));  
file_result => "mtime"; 
}

#########################################################

body changes lay_trip_wire

{
hash           => "best";
report_changes => "content";
update_hashes  => "yes";
}

########################################################

body action longjob
{
ifelapsed => "240"; # run only every 4 hours
}

#######################################################
# For the library
#######################################################

body edit_defaults def
{
empty_file_before_editing => "false";
edit_backup => "false";
max_file_size => "100000";
}

########################################################

body location start

{
# If not line to match, applies to whole text body
before_after => "before";
}

########################################################

bundle edit_line DeleteLinesMatching(regex)
  {
  delete_lines:

    "$(regex)",
  action => WarnOnly;

  }

########################################################

body action WarnOnly
{
action_policy => "warn";
ifelapsed => "60";
}

########################################################

bundle edit_line upgrade_cfexecd
  {
  classes:

    "exec_fix" not => regline(".*cf-execd.*","$(edit.filename)");

  insert_lines:

    exec_fix::

      "0,5,10,15,20,25,30,35,40,45,50,55 * * * * /var/cfengine/bin/cf-execd -F";

  replace_patterns:

    "cfexecd" replace_with => With("cf-execd");

  reports:

    exec_fix::

    "Added a 5 minute schedule to crontabs";
  }

########################################
# Bodies
########################################

body replace_with With(x)

{
replace_value => "$(x)";
occurrences => "all";
}

########################################

body copy_from scp(from,server)

{
source      => "$(from)";
compare     => "digest";
encrypt     => "true";
verify      => "true";
}
