As time goes by and you deploy applications, a new build every time what means a new application type is getting provisioned. Application packages are piling up and after some time old versions become just a clutter that eats up disk space without providing any value. So you may want to periodically clean them up.
Before you had to periodically run a PowerShell script manually, like this one:
param
(
[Parameter(Mandatory=$true)]
[string]$ApplicationTypeName,
[Parameter(Mandatory=$true)]
[int]$NumberOfTypesToKeep
)
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force
$moduleName = "ServiceFabric"
$module = Get-Module $moduleName
if (!$module)
{
Write-Output "Module $moduleName was not found, importing"
Import-Module "C:\Program Files\Microsoft Service Fabric\bin\ServiceFabric\ServiceFabric.psd1"
}
Connect-ServiceFabricCluster -Verbose
if ($ApplicationTypeName -eq "*")
{
$applications = Get-ServiceFabricApplicationType -Verbose
$applicationTypeNames = $applications.ApplicationTypeName | Select-Object -Unique
}
else
{
$applicationTypeNames=$ApplicationTypeName
}
foreach ($appTypeName in $applicationTypeNames)
{
$currentAppType = Get-ServiceFabricApplication -ApplicationTypeName $appTypeName -Verbose
# if type not found
$registeredAppTypes = Get-ServiceFabricApplicationType -ApplicationTypeName $appTypeName -Verbose
if (!$registeredAppTypes)
{
Write-Error "Application Type '$appTypeName' was not found, skipped cleanup"
continue
}
$registeredVersions = $registeredAppTypes.ApplicationTypeVersion
# if to keep > total
if ($NumberOfTypesToKeep -ge $registeredVersions.Count)
{
Write-Error "Parameter NumberOfTypesToKeep=$NumberOfTypesToKeep is greater than or equals the number of registered types=$($registeredVersions.Count)"
continue
}
$versionsToDelete = $registeredVersions | `
Where-Object { $currentAppType.ApplicationTypeVersion -notcontains $_ } | `
Select-Object -First ($registeredVersions.Count - $NumberOfTypesToKeep)
Write-Output "Application type '$appTypeName' does exist, started deletion"
foreach ($versionToDelete in $versionsToDelete)
{
Unregister-ServiceFabricApplicationType -ApplicationTypeName $appTypeName `
-ApplicationTypeVersion $versionToDelete `
-Force `
-Verbose
}
Write-Output "Successfully deleted application type '$appTypeName' versions: $versionsToDelete"
}
But since version 6.5 you don’t need to do anything manual anymore. Here’s a snippet from cluster ARM template:
{
"name": "Management",
"parameters": [
{
"name": "CleanupUnusedApplicationTypes",
"value": true
},
{
"name": "PeriodicCleanupUnusedApplicationTypes",
"value": true
},
{
"name": "TriggerAppTypeCleanupOnProvisionSuccess",
"value": true
},
{
"name": "MaxUnusedAppTypeVersionsToKeep",
"value": "10"
}
]
}
That’s it folks, happy deployment!