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