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('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) {
        $vnetArray = Get-AzVirtualNetwork -ResourceGroupName $vnetRG | Select-Object name,location | Sort-Object name
        # $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) {
        Build-FMTTestVM -vmName ($cnodeTestName + $cnodeTally.ToString()) -size Standard_E64s_v5 -image Ubuntu -rg $rg -vnetRG $vnetRG -vnet $vnet -subNet $subnet -noDataSubnet -adminCreds $creds -zone $zone -AsJob | Out-Null
        $cnodeTally++
    }
    
    # Build MNodes Standard_L32aos_v4
    if ($mnodeType = "Lsv3") {
        $mnodeSKU = 'Standard_L32s_v3'
    } elseif ($mnodeType = "Laosv4") {
        $mnodeSKU = 'Standard_L32aos_v4'
    }
    $dnodeTestName = "dnt-" + (get-random)

    $dnodeTally = 0
    while ($dnodeTally -lt 4) {
        Build-FMTTestVM -vmName ($dnodeTestName + $dnodeTally.ToString()) -size $mnodeSKU -image Ubuntu -rg $rg -vnetRG $vnetRG -vnet $vnet -subNet $subnet -noDataSubnet -adminCreds $creds -zone $zone -AsJob | Out-Null
        $dnodeTally++

    }

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

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

    get-job | Remove-Job 

    # housekeep
    Get-AzVM -ResourceGroupName $rg | Where-Object {$_.name -match $cnodeTestName } | Remove-AzVM -Confirm:0 -Force -asjob | Out-Null
    Get-AzVM -ResourceGroupName $rg | Where-Object {$_.name -match $dnodeTestName } | 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
    }

    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

    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
}