Skip to content

Instantly share code, notes, and snippets.

@fanf
Created July 29, 2015 07:37
Show Gist options
  • Save fanf/30988d42a7ad1a2d4b4f to your computer and use it in GitHub Desktop.
Save fanf/30988d42a7ad1a2d4b4f to your computer and use it in GitHub Desktop.
bundle agent permissions_owner_recurse(path, owner, group)
{
methods:
"placeholder" usebundle => permissions_owner_type_recursion("${path}", "${owner}", "${group}", "all", "inf");
}
bundle agent permissions_owner_type_recursion(path, owner, group, type, recursion)
{
vars:
"class_prefix" string => canonify("permissions_owner_${path}");
classes:
"is_type_all" expression => strcmp("${type}", "all");
"is_type_files" expression => strcmp("${type}", "files");
"is_type_directories" expression => strcmp("${type}", "directories");
# Workaround for https://dev.cfengine.com/issues/7310
"is_depth_zero" expression => strcmp("${recursion}", "0");
"is_target_directory" expression => isdir("${path}");
files:
is_type_all.is_target_directory.!is_depth_zero::
"${path}"
create => "false",
perms => og("${owner}", "${group}"),
depth_search => recurse_with_base("${recursion}"),
classes => classes_generic("${class_prefix}");
is_type_all.((is_target_directory.is_depth_zero)|!is_target_directory)::
"${path}"
create => "false",
perms => og("${owner}", "${group}"),
classes => classes_generic("${class_prefix}");
is_type_files.is_target_directory.!is_depth_zero::
"${path}"
create => "false",
perms => og("${owner}", "${group}"),
depth_search => recurse("${recursion}"),
file_select => plain,
classes => classes_generic("${class_prefix}");
is_type_files.((is_target_directory.is_depth_zero)|!is_target_directory)::
"${path}"
create => "false",
perms => og("${owner}", "${group}"),
file_select => plain,
classes => classes_generic("${class_prefix}");
is_type_directories.is_target_directory.!is_depth_zero::
"${path}"
create => "false",
perms => og("${owner}", "${group}"),
depth_search => recurse_with_base("${recursion}"),
file_select => dirs,
classes => classes_generic("${class_prefix}");
is_type_directories.((is_target_directory.is_depth_zero)|!is_target_directory)::
"${path}"
create => "false",
perms => og("${owner}", "${group}"),
file_select => dirs,
classes => classes_generic("${class_prefix}");
methods:
"report"
usebundle => _logger("Ensure owner permissions owner ${owner} and group ${group} on ${path}", "${class_prefix}");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment