BrownField/Networking/VPN-SDWAN/NSX-T/Scripts/New-IfNotExist-LocalEndpoint.ps1 (115 lines of code) (raw):
function New-IfNotExist-LocalEndpoint {
param(
[string]$avsnsxTmanager,
[string]$nsxtUserName,
[SecureString]$nsxtPassword,
[string]$tier1GatewayName,
[string]$vpnServiceName,
[string]$localEndpointName,
[string]$localEndpointIp
)
$lep_path = Get-LocalEndpoint -avsnsxTmanager $avsnsxTmanager `
-nsxtUserName $nsxtUserName `
-nsxtPassword $nsxtPassword `
-tier1GatewayName $tier1GatewayName `
-vpnServiceName $vpnServiceName `
-localEndpointName $localEndpointName `
-localEndpointIp $localEndpointIp
if ($lep_path) {
Write-Host "Local Endpoint with name '$localEndpointName' or with IP '$localEndpointIp' already exists."
return $lep_path
} else {
try {
Write-Host "Local Endpoint '$localEndpointName' not found. Creating..."
New-LocalEndpoint -avsnsxTmanager $avsnsxTmanager `
-nsxtUserName $nsxtUserName `
-nsxtPassword $nsxtPassword `
-tier1GatewayName $tier1GatewayName `
-vpnServiceName $vpnServiceName `
-localEndpointName $localEndpointName `
-localEndpointIp $localEndpointIp
write-host "Local Endpoint '$localEndpointName' created successfully."
} catch {
Write-Error "Failed to create Local Endpoint '$localEndpointName': $_"
}
}
}
function Get-LocalEndpoint {
param(
[string]$avsnsxTmanager,
[string]$nsxtUserName,
[SecureString]$nsxtPassword,
[string]$tier1GatewayName,
[string]$vpnServiceName,
[string]$localEndpointName,
[string]$localEndpointIp
)
$localEndpointUrl = [string]::Format(
"$avsnsxTmanager/policy/api/v1/infra/tier-1s/{0}" +
"/ipsec-vpn-services/{1}/local-endpoints",
$tier1GatewayName,
$vpnServiceName
)
try {
$response = Invoke-APIRequest -method "Get" `
-url $localEndpointUrl `
-avsnsxtUrl $avsnsxTmanager `
-avsnsxtUserName $nsxtUserName `
-avsnsxtPassword $nsxtPassword
if ($null -eq $response -or
$null -eq $response.results -or
$response.result_count -lt 1) {
return $false
}
foreach ($ipSecVpnLep in $response.results) {
if (($ipSecVpnLep.display_name -eq $localEndpointName -and
$ipSecVpnLep.parent_path.split("/")[-1] -eq $vpnServiceName) -or
$ipSecVpnLep.local_address -eq $localEndpointIp) {
return $ipSecVpnLep.path
}
}
} catch {
Write-Error "Failed to get Local Endpoint: $_"
return $false
}
}
function New-LocalEndpoint {
param(
[string]$avsnsxTmanager,
[string]$nsxtUserName,
[SecureString]$nsxtPassword,
[string]$tier1GatewayName,
[string]$vpnServiceName,
[string]$localEndpointName,
[string]$localEndpointIp
)
$localEndpointUrl = [string]::Format(
"$avsnsxTmanager/policy/api/v1/infra/tier-1s/{0}/ipsec-vpn-services/{1}/local-endpoints/{2}",
$tier1GatewayName,
$vpnServiceName,
$localEndpointName
)
$localEndpointBody = @{
display_name = $localEndpointName
local_address = $localEndpointIp
local_id = $localEndpointIp
id = $localEndpointName
}
$localEndpointBody = $localEndpointBody | ConvertTo-Json -Depth 10
try {
$response = Invoke-APIRequest -method "Put" `
-url $localEndpointUrl `
-body $localEndpointBody `
-avsnsxtUrl $avsnsxTmanager `
-avsnsxtUserName $nsxtUserName `
-avsnsxtPassword $nsxtPassword
if ($null -eq $response) {
Write-Error "Failed to create Local Endpoint '$localEndpointName'."
} else {
return $response.path
}
} catch {
Write-Error "Failed to create Local Endpoint '$localEndpointName': $_"
return
}
}