-
Notifications
You must be signed in to change notification settings - Fork 0
84 lines (73 loc) · 3.2 KB
/
clear-azure-redis-cache.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
name: Clear Azure Redis Cache
on:
workflow_call:
inputs:
environment:
required: true
type: string
description: "Environment to clear caches for."
resourceGroupName:
default: "AMU_DevOps_RG"
type: string
description: "Name of Resource Group that the Azure Redis Instance is in."
applicationCacheKey:
default: "*"
type: string
description: "Cache key for the application"
secrets:
azureCredentials:
required: true
jobs:
clear-redis-cache:
name: Clear Azure Redis Cache
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login via Az module
uses: azure/login@v2
with:
creds: "${{ secrets.azureCredentials }}"
enable-AzPSSession: true
- name: Install Dependencies
uses: awalsh128/cache-apt-pkgs-action@v1
with:
packages: redis-tools
version: 1.0
# Script is adapted from https://github.com/Andrews-McMeel-Universal/azure-content-management_tool/blob/main/Scripts/rundeck/Flush-RedisCache.ps1
- name: Clear Redis Cache
uses: azure/powershell@v2
with:
inlineScript: |
$CacheKey = "${{ inputs.applicationCacheKey }}"
$ResourceGroupName = "${{ inputs.resourceGroupName }}"
$Environment = "${{ inputs.environment }}"
# Check to see if Azure Redis Cache PowerShell Module is installed
Install-Module -Name Az.RedisCache -Confirm:$false
# Get list of Redis instances using tags
$Redis = Get-AzRedisCache -ResourceGroupName "$ResourceGroupName" | Where-Object { $_.Tag.Values -eq "$Environment" }
# Loop through Redis instances
$Redis | ForEach-Object {
$RedisHostname = $_.HostName
$RedisPort = $_.Port
$RedisName = $_.Name
$RedisKey = (Get-AzRedisCacheKey -Name $RedisName -ResourceGroupName $ResourceGroupName).PrimaryKey
Write-Host "Authenticating to $RedisHostname..." -ForegroundColor DarkGray
$RedisCommands = "AUTH $RedisKey
SELECT 0
EVAL 'return redis.call(\'del\', unpack(redis.call(\'keys\', ARGV[1])))' 0 $CacheKey"
Write-Host "Clearing cache key: $CacheKey" -ForegroundColor DarkGray
$RedisResult = $RedisCommands | redis-cli -h $RedisHostname -p $RedisPort
# Check if output from cache clearing command has correct status message
if ($RedisResult -match '^\d+$') {
Write-Host "Successfully flushed cache for $RedisHostname" -ForegroundColor Green
}
elseif ($RedisResult -match 'Wrong number of args calling Redis command From Lua script') {
Write-Host "Cache key $CacheKey missing in $RedisHostname" -ForegroundColor Yellow
}
else {
Write-Host "Cache key $CacheKey status unknown in $RedisHostname" -ForegroundColor Red
Write-Host "Full output: $RedisResult"
}
}
azPSVersion: "latest"