functions/Actions/AzureCacheForRedis/Invoke-AzureFailureCacheForRedisReboot.ps1

function Invoke-AzureFailureCacheForRedisReboot {
    [CmdletBinding(SupportsShouldProcess = $true)]
    param (
        [Parameter(Mandatory = $true)]
        [string] $Step,

        [Parameter(Mandatory = $true)]
        [string] $Branch,

        [Parameter(Mandatory = $true)]
        [string[]] $TargetResourceId,

        [ValidateSet("PrimaryNode", "SecondaryNode", "AllNodes")]
        [string] $RebootType = 'PrimaryNode',

        [string] $ShardId = '0',

        [string] $ActionName = "urn:csci:microsoft:azureClusteredCacheForRedis:reboot/1.0"


    )

    foreach ($target in $TargetResourceId) {
        Write-PSFMessage -Level Verbose -Message "Step ($Step), Branch ($Branch), Target ($target): Rebooting $($RebootType)."

        $rgName = ($target -split '/')[4]
        $serverName = ($target -split '/')[-1]

        $actionTriggerTime = Get-Date
        $actionStatus = "Success"
        $actionMessage = ''

        try {
            if ($PSCmdlet.ShouldProcess("Redis Cache", "Reboot")) {
                Reset-AzRedisCache -ResourceGroupName $rgName -Name $serverName -RebootType $RebootType -Force -ShardId $ShardId -ErrorAction Stop
                $actionStatus = if ($WhatIfPreference) { "WhatIf" } else { "Success" }
            }
            else {
                $actionStatus = "WhatIf"
            }
        }
        catch {
            Write-PSFMessage -Level Warning -Message "Step ($Step), Branch ($Branch), Target ($target): Failed to reboot Redis cache. Error: $($_.Exception.Message)."
            $actionStatus = "Error"
            $actionMessage = 'Failed to reboot Redis cache - {0}' -f ($_.Exception.Message -replace "`r`n", "\n")
        }

        $actionCompleteTime = Get-Date

        $paramUpdateAzureFailureTrace = @{
            ResourceId         = $target
            Step               = $Step
            Branch             = $Branch
            Action             = $ActionName
            ActionStatus       = $actionStatus
            ActionMessage      = $actionMessage
            ActionTriggerTime  = $actionTriggerTime
            ActionCompleteTime = $actionCompleteTime

        }
        Update-AzureFailureTrace @paramUpdateAzureFailureTrace
    }

}