Public/connect.ps1
|
function Connect-CSServer { <# .SYNOPSIS Connects to a CloudStack server. .DESCRIPTION Establishes a connection to CloudStack by storing API credentials. .PARAMETER Credential PSCredential object where Username = API Key and Password = Secret Key .PARAMETER ApiKey CloudStack API key (alternative to Credential) .PARAMETER SecretKey CloudStack secret key (alternative to Credential) .PARAMETER Server CloudStack server URL (e.g., http://cloudstack.example.com) .EXAMPLE $cred = Get-Credential Connect-CSServer -Credential $cred -Server "http://dc1-c2-csm01.lab.ussignal.cloud" .EXAMPLE Connect-CSServer -ApiKey "xxx" -SecretKey "yyy" -Server "http://cloudstack.example.com" #> [CmdletBinding(DefaultParameterSetName='Credential')] param( [Parameter(Mandatory=$true, ParameterSetName='Credential')] [PSCredential]$Credential, [Parameter(Mandatory=$true, ParameterSetName='Manual')] [string]$ApiKey, [Parameter(Mandatory=$true, ParameterSetName='Manual')] [string]$SecretKey, [Parameter(Mandatory=$true)] [string]$Server ) # Extract credentials based on parameter set if ($PSCmdlet.ParameterSetName -eq 'Credential') { $apiKeyValue = $Credential.UserName $secretKeyValue = $Credential.GetNetworkCredential().Password } else { $apiKeyValue = $ApiKey $secretKeyValue = $SecretKey } # Normalize the server URL $baseUrl = $Server.TrimEnd('/') if (-not $baseUrl.EndsWith('/client/api')) { $baseUrl = "$baseUrl/client/api" } # Store connection info in script scope $script:CSConnection = @{ BaseUrl = $baseUrl ApiKey = $apiKeyValue SecretKey = $secretKeyValue Server = $Server } Write-Host "Successfully connected to CloudStack server: $Server" -ForegroundColor Green } |