Public/New-DuneDeployment.ps1
|
function New-DuneDeployment { [CmdletBinding( SupportsShouldProcess, ConfirmImpact = 'None' )] param ( [Parameter(Mandatory)] [string]$Name, [Parameter(Mandatory)] [Environments]$Environment, [Parameter(Mandatory)] [guid]$CollectionId, [Parameter(Mandatory)] [DuneUser[]]$Owner, [Parameter(Mandatory)] [Guid]$DefaultResourceProviderId, [Parameter(ValueFromPipeline)] [DuneDeploymentTemplate]$DeploymentTemplate, [Parameter()] [string]$DisplayName, [Parameter()] [string]$Description, [Parameter()] [hashtable]$Parameters, [Parameter()] [switch]$Stage, [Parameter()] [datetime]$ValidUntil, [Parameter()] [bool]$IsNeverExpiring = $false, [Parameter()] [hashtable[]]$Variables, [Parameter()] [hashtable[]]$Tags = @() ) begin {} process { Write-Debug "$($MyInvocation.MyCommand)|process" $Body = @{ Environment = $Environment.ToString() IsNeverExpiring = $IsNeverExpiring ParentId = $CollectionId DisplayName = $DisplayName DefaultResourceProviderId = $DefaultResourceProviderId Description = $Description Name = $Name OwnerUserIds = $Owner.Id Parameters = @() Tags = $Tags } if ($PSBoundParameters.ContainsKey('ValidUntil')) { $Body.ValidUntil = $ValidUntil.ToUniversalTime() } if ($PSBoundParameters.ContainsKey('DeploymentTemplate')) { $Body.TemplateId = $DeploymentTemplate.Id } foreach ($TemplateParameter in $DeploymentTemplate.Parameters) { $Parameter = @{ Name = $TemplateParameter.Name Description = $TemplateParameter.Description Type = $TemplateParameter.Type } $Value = $Null while (-not $Value) { $Value = if ($Parameters.($TemplateParameter.Name)) { $Parameters.($TemplateParameter.Name) } else { $ReadHost = @{ Prompt = if ($TemplateParameter.Default) { "{0} (Description: {1}, Type: {2}, Default: {3})" -f $TemplateParameter.Name, $TemplateParameter.Description, $TemplateParameter.Type, $TemplateParameter.Default } else { "{0} (Description: {1}, Type: {2})" -f $TemplateParameter.Name, $TemplateParameter.Description, $TemplateParameter.Type } } if ($TemplateParameter.Type -eq 'securestring') { $Readhost.MaskInput = $True } $ReadHostValue = Read-Host @ReadHost if (-not $ReadHostValue -and $TemplateParameter.Default) { $TemplateParameter.Default | ConvertFrom-Json } else { $ReadHostValue } } } $Parameter.Value = if ($TemplateParameter.Type -eq 'Number') { $Value } else { ConvertTo-Json -InputObject $Value } $Body.Parameters += $Parameter } if ($PSBoundParameters.ContainsKey('Variables')) { $Variables | ForEach-Object { $_.Value = ConvertTo-Json -InputObject $Variables } $Body.Variables = $Variables } if ($PSCmdlet.ShouldProcess($($Body | ConvertTo-Json -Depth 16 -Compress))) { $Return = Invoke-DuneApiRequest -Uri "deployments" -Method POST -Body $Body -ErrorAction Stop $ReturnObject = if ($Return.Content) { $Return.Content | ConvertFrom-Json | ConvertTo-DuneClassObject -Class DuneDeployment } if ($Stage -and $ReturnObject) { $Null = $ReturnObject | Invoke-DuneDeploymentStage } return $ReturnObject } } end {} } |