Functions/Public/Get-GocdAgent.ps1

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
function Get-GocdAgent {
    [CmdletBinding()]
    param(
        [Parameter()]
        [ValidateSet('Unknown', 'Idle', 'Building', 'LostContact', 'Missing')]
        [string]
        $State = '*'
        ,
        [Parameter()]
        [switch]
        $Raw
    )

    $Response = Invoke-GocdApi -Path '/api/agents' -Accept 'application/vnd.go.cd.v4+json'
    $ContentBytes = $Response | Select-Object -ExpandProperty Content
    $Agents = ConvertFrom-Bytes -Data $ContentBytes -Encoding ASCII | ConvertFrom-Json

    $Agents = $Agents._embedded.agents | Where-Object { $_.agent_state -like $State }

    if ($Raw) {
        $Agents
        return
    }

    $Agents | ForEach-Object {

        $Resources = @()
        if ($_.resources.Length -gt 0) {
            $Resources = $_.resources
        }

        $Environments = @()
        if ($_.environments.Length -gt 0) {
            $Environments = $_.environments
        }

        [pscustomobject]@{
            Name         = $_.hostname
            IPAddress    = $_.ip_address
            Enabled      = $_.agent_config_state -ieq 'Enabled'
            State        = $_.agent_state
            Resources    = $Resources
            Environments = $Environments
            Uuid         = $_.uuid
            PSTypeName   = 'GocdAgent'
        }
    }
}