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!