# Initialize wua dictionary with default data structure of relevant registry settings
# Registry key purposes are defined here, https://technet.microsoft.com/en-us/library/Dd939844(v=WS.10).aspx
# Formula supports all keys under these subkeys:
# - HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate
# - HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU

{%- set wua = {
    'hklm-windows-update' : {
        'AcceptTrustedPublisherCerts'   : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AcceptTrustedPublisherCerts',
            'vtype' : 'REG_DWORD',
        },
        'DisableWindowsUpdateAccess'    : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\DisableWindowsUpdateAccess',
            'vtype' : 'REG_DWORD',
        },
        'ElevateNonAdmins'              : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\ElevateNonAdmins',
            'vtype' : 'REG_DWORD',
        },
        'TargetGroup'                   : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\TargetGroup',
            'vtype' : 'REG_SZ',
        },
        'TargetGroupEnabled'            : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\TargetGroupEnabled',
            'vtype' : 'REG_DWORD',
        },
        'WUServer'                      : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\WUServer',
            'vtype' : 'REG_SZ',
        },
        'WUStatusServer'                : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\WUStatusServer',
            'vtype' : 'REG_SZ',
        },
    },
    'hkcu-explorer' : {
        'DisableWindowsUpdateAccess'    : {
            'name'  : 'HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\DisableWindowsUpdateAccess',
            'vtype' : 'REG_DWORD',
        },
    },
    'hklm-internet-communication'       : {
        'NoWindowsUpdate' : {
            'name'  : 'HKEY_LOCAL_MACHINE\\SYSTEM\\Internet Communication Management\\Internet Communication\\NoWindowsUpdate',
            'vtype' : 'REG_DWORD',
        },
    },
    'hkcu-windows-update' : {
        'DisableWindowsUpdateAccess'    : {
            'name'  : 'HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\WindowsUpdate\\DisableWindowsUpdateAccess',
            'vtype' : 'REG_DWORD',
        },
    },
    'hklm-windows-update-au' : {
        'AUOptions'                     : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\AUOptions',
            'vtype' : 'REG_DWORD',
        },
        'AutoInstallMinorUpdates'       : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\AutoInstallMinorUpdates',
            'vtype' : 'REG_DWORD',
        },
        'DetectionFrequency'            : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\DetectionFrequency',
            'vtype' : 'REG_DWORD',
        },
        'DetectionFrequencyEnabled'     : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\DetectionFrequencyEnabled',
            'vtype' : 'REG_DWORD',
        },
        'NoAutoRebootWithLoggedOnUsers' : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\NoAutoRebootWithLoggedOnUsers',
            'vtype' : 'REG_DWORD',
        },
        'NoAutoUpdate'                  : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\NoAutoUpdate',
            'vtype' : 'REG_DWORD',
        },
        'RebootRelaunchTimeout'         : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\RebootRelaunchTimeout',
            'vtype' : 'REG_DWORD',
        },
        'RebootRelaunchTimeoutEnabled'  : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\RebootRelaunchTimeoutEnabled',
            'vtype' : 'REG_DWORD',
        },
        'RebootWarningTimeout'          : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\RebootWarningTimeout',
            'vtype' : 'REG_DWORD',
        },
        'RebootWarningTimeoutEnabled'   : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\RebootWarningTimeoutEnabled',
            'vtype' : 'REG_DWORD',
        },
        'RescheduleWaitTime'            : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\RescheduleWaitTime',
            'vtype' : 'REG_DWORD',
        },
        'RescheduleWaitTimeEnabled'     : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\RescheduleWaitTimeEnabled',
            'vtype' : 'REG_DWORD',
        },
        'ScheduledInstallDay'           : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\ScheduledInstallDay',
            'vtype' : 'REG_DWORD',
        },
        'ScheduledInstallTime'          : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\ScheduledInstallTime',
            'vtype' : 'REG_DWORD',
        },
        'UseWUServer'                   : {
            'name'  : 'HKEY_LOCAL_MACHINE\\Software\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\UseWUServer',
            'vtype' : 'REG_DWORD',
        },
    },
} %}

# Loop through all keys in windows-update-agent pillar
# Select the corresponding key in `wua` and update its `value` subkey
{%- for subkey,keys in salt['pillar.get']('windows-update-agent:registry', {}).items() %}
    {%- for key,value in keys.items() %}
        {%- do wua[subkey][key].update({
            'value' : value
        }) %}
    {%- endfor %}
{%- endfor %}
