CloudFactoryIAAS.psm1
function Get-AuthenticationParameters { param ( [Parameter(Mandatory=$true)] [string]$refreshToken, [Parameter(Mandatory = $false)] [ValidateSet("Production", "RC")] [string]$Portal="Production", [Parameter(Mandatory = $true)] [ValidateSet("Utility", "Infrastructure")] [string]$API ) $ErrorActionPreference="Stop" try { switch ($Portal) { "Production" { $BaseURI = "https://portal.api.cloudfactory.dk" switch ($API) { "Utility" {$URI = "https://portal.api.cloudfactory.dk"} "Infrastructure" {$URI = "https://portal.api.cloudfactory.dk/infrastructure"} } } "RC" { $BaseURI = "https://portal.api.rc.cloudfactory.dk" switch ($API) { "Utility" {$URI = "https://portal.api.rc.cloudfactory.dk"} "Infrastructure" {$URI = "https://portal.api.rc.cloudfactory.dk/infrastructure"} } } } $request = Invoke-RestMethod -Uri ($BaseURI + "/Authenticate/ExchangeRefreshToken/$RefreshToken") $access_token = $request.access_token return @{ baseuri = $URI header = @{Authorization = "Bearer $access_token"} } } catch { throw $_ } } function Get-RefreshToken { Param( [Parameter(Mandatory = $true)] [ValidateSet("true", "false")] [string]$Customer ) try { $ErrorActionPreference="Stop" $URI = "https://portal.api.cloudfactory.dk/Authenticate/Login?customer=$Customer" $request = Invoke-RestMethod -Method Get -Uri $URI -ContentType "application/json" $url = ($request -split " ")[0] [system.Diagnostics.Process]::Start($url) } catch { throw $_ } } function Create-VMCheckpoint { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID, [Parameter(Mandatory=$true)] [string] $CheckpointName ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Post -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID/Checkpoints?name=$CheckpointName") -Headers $Header return $request } catch { throw $_ } } function Delete-VMCheckpoint { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID, [Parameter(Mandatory=$true)] [string] $CheckpointID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Delete -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID/Checkpoints?checkpointId=$CheckpointID") -Headers $Header return $request } catch { throw $_ } } function Get-VMCheckpoints { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Get -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID/Checkpoints") -Headers $Header return $request } catch { throw $_ } } function Restore-VMCheckpoint { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID, [Parameter(Mandatory=$true)] [string] $CheckpointID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Post -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID/Checkpoints/Restore?checkpointId=$CheckpointID") -Headers $Header return $request } catch { throw $_ } } function Create-VMDisk { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID, [Parameter(Mandatory=$true)] [int] $DiskSizeGB ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Get -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID/Disk?diskSizeGiB=$DiskSizeGB") -Headers $Header return $request } catch { throw $_ } } function Mount-VMISO { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID, [Parameter(Mandatory=$true)] [int] $LibaryID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Post -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID/Disk/Mount?libaryId=$LibaryID") -Headers $Header return $request } catch { throw $_ } } function Update-VMDisk { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID, [Parameter(Mandatory=$true)] [string] $DiskID, [Parameter(Mandatory=$true)] [int] $NewSizeGB ) $ErrorActionPreference="Stop" try { #Getting VM object $VM = Invoke-RestMethod -Method Get -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID") -Headers $Header #Finding the correct disk $DiskToChange = $VM.disks | Where-Object {$_.id -eq $DiskID} if ($DiskToChange){ #Calculating the new size [Int64]$NewSize = ($NewSizeGB * 1024 * 1024 * 1024) $DiskToChange.size = $NewSize #Define body $body = $VM | select cpu, memory, disks, networksAdapters, spec #Making the request $request = Invoke-RestMethod -Method Put -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID") -ContentType "application/json" -Headers $Header -Body ($body|ConvertTo-Json) } else { throw "Can't find any disk with following disk id: $DiskID" } } catch { throw $_ } } function Get-Networks { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Get -Uri ($Baseuri + "/Projects/$ProjectID/Network") -Headers $Header return $request } catch { throw $_ } } function Get-Projects { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Get -Uri ($Baseuri + "/Projects") -Headers $Header return $request } catch { throw $_ } } function Get-ISOLibary { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Get -Uri ($Baseuri + "/Projects/$ProjectID/Templates/Libary") -Headers $Header return $request } catch { throw $_ } } function Get-Templates { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Get -Uri ($Baseuri + "/Projects/$ProjectID/Templates") -Headers $Header return $request } catch { throw $_ } } function Create-VM { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$false)] [string] $Name, [Parameter(Mandatory=$false)] [string] $TemplateID, [Parameter(Mandatory=$false)] [int] $vCPU, [Parameter(Mandatory=$false)] [int] $MemoryGB, [Parameter(Mandatory=$false)] [int] $VLANID, [Parameter(Mandatory=$false)] [string] $adminPassword, [Parameter(Mandatory=$false)] [object] $customObject ) $ErrorActionPreference="Stop" try { if ($customObject){ $body = $customObject | ConvertTo-Json -Depth 10 $request = Invoke-RestMethod -Method Post -Uri ($Baseuri + "Projects/$ProjectID/VirtualMachines") -ContentType "application/json" -Headers $Header -Body $body } else { $body = @{ name = $Name templateId = $TemplateID cpu = $vCPU memoryGiB = $MemoryGB networkAdapters = @( @{ vlan = $VLANID } ) customizations = @{ adminPassword = $adminPassword } } | ConvertTo-Json -Depth 10 $request = Invoke-RestMethod -Method Post -Uri ($Baseuri + "Projects/$ProjectID/VirtualMachines") -ContentType "application/json" -Headers $Header -Body $body } } catch { throw $_ } } function Get-VM { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$false)] [string] $VMID ) $ErrorActionPreference="Stop" try { if ($VMID){ $request = Invoke-RestMethod -Method Get -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID") -Headers $Header return $request } else { $request = Invoke-RestMethod -Method Get -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines") -Headers $Header return $request } } catch { throw $_ } } function Get-VMDisks { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Get -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID") -Headers $Header $disks = $request | Select-Object -ExpandProperty disks return $disks } catch { throw $_ } } function PowerOff-VM { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Put -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID/PowerState?wantedPowerState=PowerOff") -Headers $Header return $request } catch { throw $_ } } function Start-VM { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Put -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID/PowerState?wantedPowerState=Start") -Headers $Header return $request } catch { throw $_ } } function Stop-VM { param ( [Parameter(Mandatory=$true)] [string] $Baseuri, [Parameter(Mandatory=$true)] [hashtable] $Header, [Parameter(Mandatory=$true)] [string] $ProjectID, [Parameter(Mandatory=$true)] [string] $VMID ) $ErrorActionPreference="Stop" try { $request = Invoke-RestMethod -Method Put -Uri ($Baseuri + "/Projects/$ProjectID/VirtualMachines/$VMID/PowerState?wantedPowerState=Stop") -Headers $Header return $request } catch { throw $_ } } function Get-Endpoint { Param( [Parameter(Mandatory=$true)] [string]$Baseuri, [Parameter(Mandatory=$true)] [hashtable]$Header, [Parameter(Mandatory=$true)] [string]$Endpoint, [Parameter(Mandatory=$false)] [int]$RequestLength=100, [Parameter(Mandatory=$true)] [ValidateSet("Get", "Post", "Put", "Delete")] [string]$Method ) $ErrorActionPreference="Stop" try { $uri = ($Baseuri + $Endpoint) $request = Invoke-RestMethod -Method $Method -Uri $uri -Headers $Header return $request } catch { throw $_ } } |