CloudAccount/CloudAccount.psm1

Import-Module -Name $PSScriptRoot\..\Util\Util
function Get-RMCloudAccountsForCurrentProject {
    param()

    $UserLoginStatus = Test-UserLoggedIn
    if (!$UserLoginStatus) {
        return
    }

    $CurrentProjectId = Get-Variable -Name "RMContext-CurrentProjectId" -ValueOnly

    $Result = @()
    $Response = Get-RMCloudAccountInternal -OrganizationId $CurrentProjectId -PageNumber 0
    $Result += $Response
    for ($index = 1; $index -lt $Response.page.totalPages; $index++) {
        $Result += Get-RMCloudAccountInternal -OrganizationId $OrganizationId -PageNumber $index
    }

    return $Result
}

function Get-RMCloudAccountByName {
    param(
        [string] $CloudAccountName
    )

    $PagedOrgCloudAccounts = Get-RMCloudAccountsForCurrentProject
    foreach ($PagedOrgCloudAccount in $PagedOrgCloudAccounts) {
        foreach ($CloudAccount in $PagedOrgCloudAccount.content) {
            if ($CloudAccountName -eq $CloudAccount.name) {
                return $CloudAccount
            }
        }
    }

    $ProjectName = Get-Variable -Name "RMContext-CurrentProjectName" -ValueOnly
    $OrgName = Get-Variable -Name "RMContext-CurrentOrganizationName" -ValueOnly
    throw "Cloud account '$CloudAccountName' does not exist in current project '$ProjectName' of organization '$OrgName'"
}

function Get-CachedCloudAttribute {
    param(
        [System.Object] $CloudAccount
    )

    $RMLoginResult = Get-Variable -Name "RMContext-UserLogin" -ValueOnly
    $Uri = Get-Variable -Name "RMContext-ReactorURI" -ValueOnly

    $Headers = @{
        Accept = "application/rm+json"
        "X-Auth-Token" = $RMLoginResult.token
    }

    $Params = @{
        Method = "Get"
        Uri = $Uri + "/cloudaccounts/" + $CloudAccount.id + "/cachedattributes"
        Headers = $Headers
    }

    return Invoke-RMRestMethod -Params $Params
}

function Get-CloudAttributesSummary {
    param(
        [System.Object] $CloudAccount
    )
    $RMLoginResult = Get-Variable -Name "RMContext-UserLogin" -ValueOnly
    $Uri = Get-Variable -Name "RMContext-ReactorURI" -ValueOnly

    $Headers = @{
        Accept = "application/rm+json"
        "X-Auth-Token" = $RMLoginResult.token
    }

    $Params = @{
        Method = "Get"
        Uri = $Uri + "/cloudaccounts/" + $CloudAccount.id + "/attributes?summary=true"
        Headers = $Headers
    }

    return Invoke-RMRestMethod -Params $Params
}

function Get-RMCloudAccountInternal {
    param(
        [string] $OrganizationId,
        [int] $PageNumber
    )

    $RMLoginResult = Get-Variable -Name "RMContext-UserLogin"
    $Uri = Get-Variable -Name "RMContext-ReactorURI"

    $Headers = @{
        Accept = "application/rm+json"
        "X-Auth-Token" = $RMLoginResult.Value.token
    }

    $Params = @{
        Method = "Get"
        Uri = $Uri.Value + "/organizations/" + $OrganizationId + "/cloudaccounts?size=25&page=" + $PageNumber + "&sort=created_at%2Cdesc"
        Headers = $Headers
    }
    return Invoke-RMRestMethod -Params $Params
}

Export-ModuleMember -Function Get-RMCloudAccountByName, Get-CachedCloudAttribute, Get-CloudAttributesSummary