Hereby my take on a scripted version of creating a networkpool in VCF! Please look at the code before using because there are some assumptions in there that may mess up your ip subnets. This is made for a customer based on their needs and design so test before using at your customer! This one will make a VSAN and vMotion pool, so there is room for improvement getting NFS and iSCSI in if there is a need for it!

#This script will take some input and uses it to generate the JSON file to create a network pool in SDDC Manager
#It will also create the pool for you.

#Continue Function
$options = [System.Management.Automation.Host.ChoiceDescription[]] @('&Yes', '&No')

function Prompt-Continue{
    if(0 -eq $host.UI.PromptForChoice('Create the Network Pool?' , 'Create the Network Pool?' , $Options,0)){
        Write-Host Creating the Network Pool... -fore green
        return
    }else{
        Write-Host Ending the script.
        exit
    }
}

#Data Input
$clustername = Read-Host "type in the name of the cluster"
[int]$vsanvlanid = Read-Host "type in the vlan id for the vSAN Network"
[int]$vmotionvlanid = Read-Host "type in the vlan id for the vMotion Network"
$vsansubnet = Read-Host "Enter subnet for vSAN network"
$vmotionsubnet = Read-Host "Enter subnet for vMotion network"
$mtu = [int]"9000"

#Conversions
$vsangateway = $vsansubnet.Substring(0,9) + "1"
$vsanstartip = $vsansubnet.Substring(0,9) + "10"
$vsanendip = $vsansubnet.Substring(0,9) + "254"

$vmotiongateway = $vmotionsubnet.Substring(0,9) + "1"
$vmotionstartip = $vmotionsubnet.Substring(0,9) + "10"
$vmotionendip = $vmotionsubnet.Substring(0,9) + "254"

$NetworkPoolName = "network-pool-" + $clustername.Substring(4)

#Checks on SDDC Manager
#prepare additional variables, no input required here
$targetDC = $clustername.Substring(0,3)
$sddcManagerFqdn = $targetDC + ".mydns.local" #Make sure this variable reflects your SDDC Manager FQDN
$VCFAuthURL = "https://" + $sddcManagerFqdn + "/v1/tokens"
$Type = "application/json"

#credentials --> to be fixed and changed to secure credentials
$sddcManagerUser = "USERNAME"
$sddcManagerPass = "PASSWORD"

# Creating JSON for Auth Body
$AuthJSON =
"{
  ""username"": ""$sddcManagerUser"",
  ""password"": ""$sddcManagerPass""
}"

Try {
    $VCFSessionResponse = Invoke-RestMethod -Method POST -Uri $VCFAuthURL -Body $AuthJSON -ContentType $Type
}
Catch {
    $_.Exception.ToString()
    $error[0] | Format-List -Force
    Write-Output "Unable to connect to SDDC Manager: $sddcManagerFqdn"
}

#Create Session
$SessionHeader = @{"Authorization"= "Bearer " + $VCFSessionResponse.accessToken
"Accept"="application/json"}

#Collect all the network pools
$allNetworkPools = Invoke-RestMethod -Method GET -Uri ("https://" + $sddcManagerFqdn + "/v1/network-pools") -Headers $SessionHeader -ContentType $Type -Body $Params
#Get all the elements fron NW pool JSON output
$allNWPoolsInfo = $allNetworkPools.elements

#Filter for correct pool and check for existence of the pool, if pool exists script will stop
$retrievedNWPoolName = $allNWPoolsInfo | where {$_.name -like $targetNWPoolName} -Debug
if ($retrievedNWPoolName){
    Write-Warning ("Network Pool with name: " + $targetNWPoolName + " already exists stopping script") -WarningAction Stop
}
else {
    Write-Host ("Network Pool with name: " + $targetNWPoolName + " not found, proceeding...") -ForegroundColor Green
}

#Start to build the JSON

$jsonBase = @{}
$networkbase = @()

#vSAN JSON part
$vsanippool = New-Object System.Collections.ArrayList
$vsanippool.Add(@{"start" = $vsanstartip; "end" = $vsanendip;})

$vsannetwork = New-Object System.Collections.ArrayList
$vsannetwork.Add([ordered]@{"type"="VSAN";"vlanId"=$vsanvlanid;"mtu"=$mtu;"subnet"=$vsansubnet;"mask"="255.255.255.0";"gateway"=$vsangateway;"ipPools"=$vsanippool})
$networkbase += $vsannetwork

#vMotion JSON part
$vmotionippool = New-Object System.Collections.ArrayList
$vmotionippool.Add(@{"start" = $vmotionstartip; "end" = $vmotionendip;})

$vmotionnetwork = New-Object System.Collections.ArrayList
$vmotionnetwork.Add([ordered]@{"type"="VMOTION";"vlanId"=$vmotionvlanid;"mtu"=$mtu;"subnet"=$vmotionsubnet;"mask"="255.255.255.0";"gateway"=$vmotiongateway;"ipPools"=$vmotionippool})
$networkbase += $vmotionnetwork

#Put everything in the base
$jsonBase = (@{"name" = $NetworkPoolName ; "networks" = $networkbase})

#End of building JSON

#Export the JSON file
$jsonBase | ConvertTo-Json -Depth 10 | Out-File ("D:ScriptsVMwareVCFNetworkPools$NetworkPoolName.json")
write-host ("NetworkPool file succesfully saved to D:ScriptsVMwareVCFNetworkPools$NetworkPoolName.json") -ForegroundColor Green

Prompt-Continue

#Create the Network Pool
#make the body
$body = $jsonBase | ConvertTo-Json -Depth 10
#Make the pool
Invoke-RestMethod -Method Post -Uri ("https://" + $sddcManagerFqdn + "/v1/network-pools") -Headers $SessionHeader -ContentType $Type -Body $body
Write-Host Network Pool $NetworkPoolName has been created on $sddcManagerFqdn -ForegroundColor Green

The original article was posted on: www.hollebollevsan.nl

Related articles

  • Application Modernization
  • Digital Workspace
  • Cloud Infrastructure
  • ITTS (IT Transformation Services)
  • Managed Security Operations
  • Multi-Cloud Platform
  • Backup & Disaster Recovery
Visit our knowledge hub
Visit our knowledge hub
Paul van Dieën Virtualization Consultant

Let's talk!

Knowledge is key for our existence. This knowledge we use for disruptive innovation and changing organizations. Are you ready for change?

Your first name*
Your last name*