Add networks to HP OneView 3.00 using REST API via PowerShell
Â
I recently had the task of creating a PowerShell script to call REST API for adding Networks to an uplink set in HP OneView.
Â
A quick overview of the environment.
Our enclosures have 4x FlexFabrics, 2 used to plumb an access port to the LOMs and 2 used as trunks to create the Virtual Switch teams.
The vSwitch uplink sets are labelled Switch_A and Switch_B
Each Vlan we connect is plumbed to each switch and named accordingly. As an example, for a network named LNet-Blog in SCVMM, we would create LNet-Blog_A and LNet-Blog_B and add them to the corresponding uplink
LNet-Blog_A > Switch_A
LNet-Blog_B > Switch_B
Â
The assumption is the Networks have already been created in OneView and this script just finds all existing tagged Networks and adds them to appropriate uplink.
I have PoSH and SMA Runbooks for the end to end process but thought that given this one was slightly more complicated I have fast-tracked this post to you all.. my loyal readers..
Â
Note: this modifies the uplink sets in your VC domain. Buyer beware!!!
Great, now that’s out of the way…. the script:
# login to the oneview appliance
$person = @{
userName= "myusername"
password= "mypassword"
authnHost= "192.168.1.10"
authLoginDomain= "Local"
}
$json = $person | ConvertTo-Json
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-type", 'application/json')
$headers.Add("Accept", 'application/json')
$url = 'https://<oneviewserver>'
$uri = $url + '/rest/login-sessions'
$response = Invoke-RestMethod -Uri $uri -Method POST -Headers $headers -Body $json -ContentType 'application/json'
# Get-Networks
$uri = $url + '/rest/ethernet-networks'
$Networks = Invoke-RestMethod -Method GET -Headers $auth -Uri $uri
$ANets = $Networks.members | where {$_.ethernetNetworkType -eq "Tagged"}
#list all networks in fabric
$Anets | sort-object Name | FT name,uri -autosize
# Get the uplinkset data
$uri = $url + '/rest/uplink-sets'
$Uplinks = Invoke-RestMethod -Method GET -Headers $auth -Uri $uri
# check the switch uplink sets for the presence of all hte tagged networks and add any missing ones
ForEach ($Uplink in $Uplinks.members | where {$_.name -like "Switch_*"})
{
Write-Host -F Green "Working on" $Uplink.name
IF($ANets.count -eq $Uplink.networkUris.count){Write-Host -F Green "Yay! Networks are in sync.. we can avoid all the heavy lifting."}
ELSE
{
Write-Host -F Green "Network uri's mapped" $Uplink.networkUris.count "but there are" $ANets.count "defined"
ForEach($ANet in $ANets | where {$_.name.split("_")[1] -eq $Uplink.name.split("_")[1]})
{
$a = $null
ForEach($Neturi in $Uplink.networkUris)
{
IF($Neturi -eq $ANet.uri)
{
$a = $true
}
}
IF($a -ne $true)
{
Write-Host -F yellow "Network"$ANet.name "is missing from" $uplink.name
$Uplink.networkUris += $Anet.uri
$body = $uplink | ConvertTo-Json -Depth 5
$uri = $url + $uplink.uri
Write-Host -F Cyan "Adding network" $ANet.name "to uplinkset" $uplink.name
Invoke-RestMethod -Method PUT -Headers $auth -Uri $uri -Body $body -ContentType 'application/json'
}
}
}
}
Enjoy! Dan
s