ps/Modules/Alkami.PowerShell.Services/Public/Get-ChocolateyServicesToStart.ps1
2023-05-30 22:51:22 -07:00

96 lines
4.8 KiB
PowerShell

function Get-ChocolateyServicesToStart {
<#
.SYNOPSIS
Returns service objects for services running out of the Chocolatey path, decorated by tier, which are in the stopped state.
.DESCRIPTION
Returns service objects for services running out of the Chocolatey path, decorated by tier, which are in the stopped state. Includes the path for the service executable.
.PARAMETER RemoteServer
[string When supplied executes against a single remote machine. Defaults to localhost
.EXAMPLE
Get-ChocolateyServicesToStart -Verbose
[Get-ChocolateyServices] : Finding services installed out of the chocolatey path: C:\ProgramData\chocolatey
[Get-ChocolateyServices] : Found 4 chocolatey services.
[Get-ChocolateyServicesToStart] : Found 4 Chocolatey Services
VERBOSE: [Get-ChocolateyServicesToStart] : Pulling Services for Tier 0
VERBOSE: [Get-ChocolateyServicesToStart] : Found 2 Services for Tier 0
VERBOSE: [Get-ChocolateyServicesToStart] : Adding Service Alkami.Services.Subscriptions.Host to Tier 0
VERBOSE: [Get-ChocolateyServicesToStart] : Alkami.MicroServices.Broker.Host is a tier 0 service but cannot be started due to current state Running
VERBOSE: [Get-ChocolateyServicesToStart] : Pulling Services for Tier 1
VERBOSE: [Get-ChocolateyServicesToStart] : Found 14 Services for Tier 1
VERBOSE: [Get-ChocolateyServicesToStart] : Adding Service Alkami.MicroServices.Authorization.Service.Host to Tier 1
VERBOSE: [Get-ChocolateyServicesToStart] : Pulling Services for Tier 2
VERBOSE: [Get-ChocolateyServicesToStart] : No Services Defined for Tier 2 -- adding all other services not matched
VERBOSE: [Get-ChocolateyServicesToStart] : Adding Service Alkami.MicroServices.Features.Beacon.Host to Tier 2
ServiceName ServicePath
----------- -----------
Alkami.Services.Subscriptions.Host "C:\ProgramData\chocolatey\lib\Alkami.Services.Subscriptions.Host\to...
Alkami.MicroServices.Authorization.Service.Host "C:\ProgramData\chocolatey\lib\Alkami.MicroServices.Authorization.Se...
Alkami.MicroServices.Features.Beacon.Host "C:\ProgramData\chocolatey\lib\Alkami.MicroServices.Features.Beacon....
#>
[CmdletBinding()]
[OutputType([System.Object])]
Param(
[string]$RemoteServer = "localhost"
)
$logLead = (Get-LogLeadName)
[array]$chocolateyServices = Get-ChocolateyServices $RemoteServer
Write-Verbose "$logLead : Found $($chocolateyServices.Count) Chocolatey Services"
$microserviceTiers = (Get-MicroServiceTiers)
$tieredServices = @()
for ($i = 0; $i -le ($microserviceTiers).Count; $i++) {
Write-Verbose "$logLead : Pulling Services for Tier $i"
$matchedServiceNames = $tieredServices | Select-Object -ExpandProperty ServiceName
if (Test-IsCollectionNullOrEmpty $microServiceTiers[$i]) {
# We hit the end, return everything else not defined
Write-Verbose "$logLead : No Services Defined for Tier $i -- adding all other services not matched"
$allOtherServices = $chocolateyServices | Where-Object { ($_.State -eq "Stopped") -and ($matchedServiceNames -notcontains $_.Name) }
foreach ($service in $allOtherServices) {
Write-Verbose "$logLead : Adding Service $($service.Name) to Tier $i"
$tieredServices += New-Object PSObject -Property @{ ServiceName = $service.Name; Tier=$i; ServicePath = $service.PathName; }
}
} else {
Write-Verbose "$logLead : Found $(($microserviceTiers[$i]).Count) Services for Tier $i"
foreach ($tierService in $microserviceTiers[$i]) {
$serviceDefinition = $chocolateyServices | Where-Object {$_.Name -eq $tierService}
if ($null -eq $serviceDefinition) {
if (($i -eq 0 -and !(Test-IsServiceFabricServer)) -or
(Test-IsMicroServer))
{
# Tier 0 Services Should Exist Everywhere Except FAB Nodes
# Any other Tiered service should exist on Microservice boxes
Write-Warning "$logLead : $tierService is defined in tier $i but not located on this machine"
}
} elseif ($serviceDefinition.State -ne "Stopped") {
Write-Verbose "$logLead : $tierService is a tier $i service but cannot be started due to current state $($serviceDefinition.State)"
} else {
Write-Verbose "$logLead : Adding Service $($serviceDefinition.Name) to Tier $i"
$tieredServices += New-Object PSObject -Property @{ ServiceName = $serviceDefinition.Name; Tier=$i; ServicePath = $serviceDefinition.PathName; }
}
}
}
}
Write-Host "$logLead : Found $($tieredServices.Count) Chocolatey Services to Start"
return $tieredServices
}