Public/Test-FMTDeployment.ps1

function Test-FMTDeployment {
    param(
        [parameter()]
        [string] $rg,
        [parameter()]
        [string] $vnetRG = $rg,
        [parameter()]
        [string] $vnet,
        [parameter()]
        [string] $subNet,
        [parameter(Mandatory)]
        [ValidateSet('1','2','3')]
        [string] $zone,
        [parameter()]
        [ValidateSet('2','3','4','5','6','7','8')]
        [int] $cnodeCount = 2,
        [parameter()]
        [ValidateSet('1','2','4','6','8')]
        [int] $dnodeScale = 1,
        [parameter()]
        [ValidateSet('Lsv3','Laosv4')]
        [string] $mnodeType = 'Lsv3'
    )

    if (!$rg) {
        $rgArray = Get-AzResourceGroup | Select-Object resourcegroupname,location | Sort-Object resourcegroupname
        $rg = Build-MenuFromArray -array $rgArray -property resourcegroupname -message "Select the desired resource group"
    }
    
    
    if (!$vnetRG) {
        $vnetRG = $rg
        $rg = Build-MenuFromArray -array $rgArray -property resourcegroupname -message "Select the desired VNET resource group"
    }
    
    if (!$vnet) {
        try {
            $vnetArray = Get-AzVirtualNetwork -ResourceGroupName $vnetRG | Select-Object name,location | Sort-Object name
        } catch {
            return $error[0]
            Return
        }
        # $vnetArray = Get-AzVirtualNetwork | Select-Object name,location | Sort-Object name
        $vnet = Build-MenuFromArray -array $vnetArray -property name -message "Select the desired Virtualnetwork"
    }

    if (!$subNet) {
        $subnetArray = Get-AzVirtualNetwork -Name $vnet -ResourceGroupName $vnetRG  | Get-AzVirtualNetworkSubnetConfig | Select-Object name
        $subnet = Build-MenuFromArray -array $subnetArray -property name -message "Select the desired management subnet"
    }

    # Clear existing jobs
    get-job | Remove-Job 

    ## create credential
    [string]$userName = 'azureser'
    [string]$userPassword = 'IgnoreThis1234!'
    [securestring]$secStringPassword = ConvertTo-SecureString $userPassword -AsPlainText -Force
    [pscredential]$creds = New-Object System.Management.Automation.PSCredential ($userName, $secStringPassword)

    # Build CNodes
    $cnodeTestName = "cnt-" + (get-random)
    $cnodeTally = 0
    while ($cnodeTally -lt $cnodeCount) {
        $vmName = ($cnodeTestName + $cnodeTally.ToString())
        Write-Verbose "--> Building vm $vmName ..." -Verbose
        Build-FMTTestVM -vmName $vmName -size Standard_E64s_v5 -image Ubuntu -rg $rg -vnetRG $vnetRG -vnet $vnet -subNet $subnet -noDataSubnet -adminCreds $creds -zone $zone -trustedLaunch -secureBoot -AsJob  | Out-Null
        $cnodeTally++
    }
    
    # Build MNodes Standard_L32aos_v4
    if ($mnodeType -eq "Lsv3") {
        $SKUscale = 8 * $dnodeScale
        $mnodeSKU = "Standard_L" + $SKUscale.ToString() + "s_v3"
        Write-Verbose "--> Using mnode SKU -- $mnodeSKU" -Verbose
    } elseif ($mnodeType -eq "Laosv4") {
        $SKUscale = 2 * $dnodeScale
        $mnodeSKU = "Standard_L" + $SKUscale.ToString() + "aos_v4"
        Write-Verbose "--> Using mnode SKU -- $mnodeSKU" -Verbose
    }

    $dnodeTestName = "dnt-" + (get-random)
    $dnodeTally = 0
    while ($dnodeTally -lt 16) {
        $vmName = ($dnodeTestName + $dnodeTally.ToString())
        Write-Verbose "--> Building vm $vmName ..." -Verbose
        Build-FMTTestVM -vmName $vmName -size $mnodeSKU -image Ubuntu -rg $rg -vnetRG $vnetRG -vnet $vnet -subNet $subnet -noDataSubnet -adminCreds $creds -zone $zone -trustedLaunch -secureBoot -AsJob | Out-Null
        $dnodeTally++
    }

    # Grab jobs
    $allJobs = get-job  
    # loop to monitor jobs
    while ($allJobs.State -contains "running") {
        Start-Sleep -Seconds 30
        $allJobs = get-job
        write-verbose "Test VM Deployments running..." -Verbose
        $allJobs | Where-Object {$_.state -eq 'Running'}
    }

    if ($allJobs.State -contains "failed") {
        write-verbose "---> VM Creation failed..." -Verbose
        (get-job -State failed) | Format-List
    } else {
        write-verbose "---> VM Creation successful..." -Verbose
        get-job | Format-List
    }

    get-job | Remove-Job 

    # housekeep
    Write-Verbose "--> Removing test VMs..." -Verbose
    $cnodeVMs = Get-AzVM -ResourceGroupName $rg | Where-Object {$_.name -match $cnodeTestName }
    $dnodeVMs = Get-AzVM -ResourceGroupName $rg | Where-Object {$_.name -match $dnodeTestName } 
    $cnodeVMs.Name
    $dnodeVMs.Name
    pause
    $cnodeVMs | Remove-AzVM -Confirm:0 -Force -asjob | Out-Null
    $dnodeVMs | Remove-AzVM -Confirm:0 -Force -asjob | Out-Null

        # Grab jobs
    $allJobs = get-job  
    # loop to monitor jobs
    while ($allJobs.State -contains "running") {
        Start-Sleep -Seconds 15
        $allJobs = get-job
        write-verbose "Removing Test VMs..." -Verbose
    }

    Write-Verbose "--> Removing test NICs..." -Verbose
    Get-AzNetworkInterface -ResourceGroupName $rg | Where-Object {$_.name -match $cnodeTestName } | Remove-AzNetworkInterface -Confirm:0 -Force -asjob | Out-Null
    Get-AzNetworkInterface -ResourceGroupName $rg | Where-Object {$_.name -match $dnodeTestName } | Remove-AzNetworkInterface -Confirm:0 -Force -asjob | Out-Null

    Write-Verbose "--> Removing test DISKs..." -Verbose
    Get-AzDisk -ResourceGroupName $rg | Where-Object {$_.name -match $cnodeTestName } | Remove-AzDisk -Confirm:0 -Force -asjob | Out-Null
    Get-AzDisk -ResourceGroupName $rg | Where-Object {$_.name -match $dnodeTestName } | Remove-AzDisk -Confirm:0 -Force -asjob | Out-Null

    Write-Verbose "Resouce prefixes used: $cnodeTestName and $dnodeTestName" -Verbose
}