96 lines
4.8 KiB
PowerShell
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
|
|
}
|