PrepareApi.ps1
Class PrepareApi : ApiClient { # properties [string]$CloudProvisioningType [string]$CloudCwSecretId [string]$CloudDiskName [string]$AssetsId [psobject[]]$XdReconfigure [hashtable]$Tags [int]$Timeout [string]$Prefix [bool]$InstallMisa [bool]$ForceMisa [string]$InstallPvs [string[]]$Flags # Default constructor PrepareApi([hashtable]$values) : base ($values) { $this.CopyValues( @{ AssetsId = @{ required = $False default = $null } CloudProvisioningType = @{ required = $False default = "Mcs" } CloudCwSecretId = @{ required = $True } CloudDiskName = @{ required = $True } XdReconfigure = @{ required = $True } Tags = @{ required = $False default = @{} } Timeout = @{ required = $False default = 3600 } Prefix = @{ required = $False default = "ce" } InstallMisa = @{ required = $False default = $true } ForceMisa = @{ required = $False default = $false } InstallPvs = @{ required = $False default = $null } Flags = @{ required = $False default = $null } }, $values ) } # POST ProcessImage hidden [string]PostProcessImageJob([string]$resourceLocationId, [string]$platform, [hashtable]$platformPrepareData) { # Get the URL to use $url = $this.BuildUrl("images/`$prepare", $True) LogIt "Creating $platform $($this.CloudProvisioningType) prepare job URL: $url on connector $resourceLocationId" $this.AddDefaultTags($this.Tags) # Create a jobData object $prepareData = @{ platform = $platform provisioningType = $this.CloudProvisioningType platformCredentialId = $this.CloudCwSecretId resourceLocationId = $resourceLocationId XdReconfigure = $this.XdReconfigure tags = $this.Tags timeoutInSeconds = $this.Timeout prefix = $this.Prefix } if ($this.AssetsId) { $prepareData['assetsId'] = $this.AssetsId } if ($this.CloudProvisioningType -eq "Pvs") { if ($this.InstallPvs) { $prepareData['installPvs'] = $this.InstallPvs } $prepareData['installMisa'] = $false $prepareData['forceMisa'] = $false } elseif ($this.CloudProvisioningType -eq "Mcs") { $prepareData['installMisa'] = $this.InstallMisa $prepareData['forceMisa'] = $this.ForceMisa } if ($this.Flags) { $prepareData['flags'] = $this.Flags } # Convert the object to JSON to use in the POST body (Note: Default depth is 2 when serializing) $json = ($prepareData + $platformPrepareData) | ConvertTo-Json -Depth 10 LogIt "$platform $($this.CloudProvisioningType) prepare POST $url -> $json" $False # Send the POST try { $response = $this.Post($url, $json) $jobId = $response.id return $jobId } catch { throw "Failed to start $platform prepare: $_" } } } Function New-PrepareClient([hashtable]$values) { $platform = $values.CloudPlatform if ($platform -eq "azure") { return [AzurePrepareApi]::New($values) } elseif ($platform -eq "gcp") { return [GcpPrepareApi]::New($values) } else { throw "Unable to create PrepareClient. Invalid CloudPlatform specified '$platform'." } } |