scripts/New-AzOpsTestsDeploymentHelper.ps1 (135 lines of code) (raw):

function New-AzOpsTestsDeploymentHelper { <# .SYNOPSIS Assists with deployments towards Azure to prime an environment before AzOps tests are called. .DESCRIPTION The functions’ purpose is to diminish code duplication in the functional tests deploy.ps1 files used by each resource type. .PARAMETER RuntimePath Path to functional test location on filesystem. This is used to derive the calling resource provider and resources type. .PARAMETER Scope Declare what scope the function should deploy towards. Example 'ResourceGroup','Subscription' or 'Tenant'. .PARAMETER Location Optional Location of deployment job. .PARAMETER DeployTemplateFileName Deployment template filename. .PARAMETER DeployTemplateParameterFileName Deployment templateparameter filename. .EXAMPLE > New-AzOpsTestsDeploymentHelper -RuntimePath $script:runtimePath -Scope $scope -DeployTemplateFileName $deployTemplate -DeployTemplateParameterFileName $deployTemplateParameter #> [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string] $RuntimePath, [Parameter(Mandatory = $false)] [ValidateSet('ResourceGroup','Subscription','Tenant')] [string] $Scope = 'ResourceGroup', [Parameter(Mandatory = $false)] [string] $Location = (Get-PSFConfigValue -FullName 'AzOps.Core.DefaultDeploymentRegion'), [Parameter(Mandatory = $true)] [string] $DeployTemplateFileName, [Parameter(Mandatory = $false)] [string] $DeployTemplateParameterFileName ) process { if (-not $global:testroot) { Write-PSFMessage -Level Critical -Message "Missing global:testroot" throw } if (Test-Path $RuntimePath) { $script:resourceProvider = (Resolve-Path "$RuntimePath/..").Path.Split('/')[-2] $script:resourceType = (Resolve-Path "$RuntimePath/..").Path.Split('/')[-1] } else { Write-PSFMessage -Level Critical -Message "Test of path $RuntimePath failed" throw } if ($DeployTemplateFileName) { $script:templateFile = Join-Path -Path $global:testroot -ChildPath "functional/$script:resourceProvider/$script:resourceType/deploy/$DeployTemplateFileName" if (-not (Test-Path $script:templateFile)) { Write-PSFMessage -Level Critical -Message "Test of path $script:templateFile failed" throw } } if ($DeployTemplateParameterFileName) { $script:templateParametersFile = Join-Path -Path $global:testroot -ChildPath "functional/$script:resourceProvider/$script:resourceType/deploy/$DeployTemplateParameterFileName" if (-not (Test-Path $script:templateParametersFile)) { Write-PSFMessage -Level Critical -Message "Test of path $script:templateParametersFile failed" throw } } switch ($PSBoundParameters['Scope']) { 'ResourceGroup' { try { Write-PSFMessage -Level Verbose -Message "Deployment of $script:resourceType starting at $Scope scope." $script:resourceGroupName = $script:resourceType + "-" + (Get-Date -UFormat "%Y%m%d%R" | ForEach-Object {$_ -replace ":", ""}) + "-azopsrg" $script:scope = New-AzResourceGroup -Name $script:resourceGroupName -Location $Location -Confirm:$false -Force if ($script:templateParametersFile) { $script:functionalTestDeploy = New-AzResourceGroupDeployment -Name ($script:resourceType + 'testdeploy') -ResourceGroupName $script:resourceGroupName -TemplateFile $script:templateFile -TemplateParameterFile $script:templateParametersFile -Confirm:$false -Force } else { $script:functionalTestDeploy = New-AzResourceGroupDeployment -Name ($script:resourceType + 'testdeploy') -ResourceGroupName $script:resourceGroupName -TemplateFile $script:templateFile -Confirm:$false -Force } $script:return = [PSCustomObject]@{ functionalTestDeploy = $script:functionalTestDeploy functionalTestDeployJob = (($script:resourceType) + 'FunctionalTestDeploy') } return $script:return Write-PSFMessage -Level Verbose -Message "Deployment of $script:resourceType completed at $Scope scope." } catch { Write-PSFMessage -Level Critical -Message "Deployment of $script:resourceType starting at $Scope scope failed." -Exception $_.Exception throw } } 'Subscription' { try { Write-PSFMessage -Level Verbose -Message "Deployment of $script:resourceType starting at $Scope scope." if ($script:templateParametersFile) { $script:functionalTestDeploy = New-AzDeployment -Name ($script:resourceType + 'testdeploy') -TemplateFile $script:templateFile -TemplateParameterFile $script:templateParametersFile -Location $Location -Confirm:$false } else { $script:functionalTestDeploy = New-AzDeployment -Name ($script:resourceType + 'testdeploy') -TemplateFile $script:templateFile -Location $Location -Confirm:$false } $script:return = [PSCustomObject]@{ functionalTestDeploy = $script:functionalTestDeploy functionalTestDeployJob = (($script:resourceType) + 'FunctionalTestDeploy') } return $script:return Write-PSFMessage -Level Verbose -Message "Deployment of $script:resourceType completed at $Scope scope." } catch { Write-PSFMessage -Level Critical -Message "Deployment of $script:resourceType starting at $Scope scope failed." -Exception $_.Exception throw } } 'Tenant' { try { Write-PSFMessage -Level Verbose -Message "Deployment of $script:resourceType starting at $Scope scope." if ($script:templateParametersFile) { $script:functionalTestDeploy = New-AzTenantDeployment -Name ($script:resourceType + 'testdeploy') -TemplateFile $script:templateFile -TemplateParameterFile $script:templateParametersFile -Location $Location } else { $script:functionalTestDeploy = New-AzTenantDeployment -Name ($script:resourceType + 'testdeploy') -TemplateFile $script:templateFile -Location $Location } $script:return = [PSCustomObject]@{ functionalTestDeploy = $script:functionalTestDeploy functionalTestDeployJob = (($script:resourceType) + 'FunctionalTestDeploy') } return $script:return Write-PSFMessage -Level Verbose -Message "Deployment of $script:resourceType completed at $Scope scope." } catch { Write-PSFMessage -Level Critical -Message "Deployment of $script:resourceType starting at $Scope scope failed." -Exception $_.Exception throw } } } } }