#########################################################################
#
#   win_registry.cf - Windows Registry Management
#
#########################################################################

bundle agent win_registry
{
vars:

  "cache_keys" slist => {
                        "HKEY_LOCAL_MACHINE\SOFTWARE\Cfengine AS"
                        };
						
  "reg_create" slist =>
                        {
                        "value1,REG_SZ,this is the first value...", 
                        "value2,REG_SZ,...and this is the second!"
                        };
						
  "reg_delete" slist =>
                        {
                        "value1"
                        };
						

methods:

# 1) Cfengine can cache and restore any part of the registry

#  "any" usebundle => registry_cache("@(win_registry.cache_keys)");
#  "any" usebundle => registry_restore("@(win_registry.cache_keys)");

# 2) Registry settings may also be explicitly defined/deleted in policy

#  "any" usebundle => registry_define("HKEY_LOCAL_MACHINE\SOFTWARE\Cfengine AS\Cfengine", "@(win_registry.reg_create)");
#  "any" usebundle => registry_delete("HKEY_LOCAL_MACHINE\SOFTWARE\Cfengine AS\Cfengine", "@(win_registry.reg_delete)");
}

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

bundle agent registry_cache(keys)
{
 databases:
  windows::

     "$(keys)"
        database_operation => "cache",
        database_type      => "ms_registry",
        comment => "Save correct registry settings";
}

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

bundle agent registry_restore(keys)
{
 databases:
  windows::

     "$(keys)"
        database_operation => "restore",
        database_type      => "ms_registry",
        comment => "Make sure correct registry settings are set, according to cached version";
}

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

bundle agent registry_define(key, contents)
{
databases:
  windows::
  
  "$(key)"

    database_operation => "create", 
    database_rows => { "$(contents)" } ,
    database_type     => "ms_registry",
    comment => "Explicitly define important registry settings";
}

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

bundle agent registry_delete(key, values)
{
databases:
  windows::

  "$(key)"

    database_operation => "delete", 
    database_columns => { "@(values)" } ,
    database_type => "ms_registry",
    comment => "Remove unwanted registry values";
}
