Backup automatizado config NSX Edges con Powershell-REST API

Buenas, en este post vamos a ver como realizar un Backup de la configuración de los Edges que tenemos en nuestra infraestructura de NSX, de manera que podamos en cualquier momento realizar una restauración de la configuración de nuestro Edge, o incluso realizar despliegues de Edges, con la configuración de otro Edge, del cual hayamos realizado la copia. Para ello se puede realizar mediante llamadas a la REST API de NSX.

Como ya sabemos, se pueden realizar operaciones contra REST API, invocando request https. Para ello podemos utilizar la aplicación Postman, muy recomendada para realizar este tipo de acciones, ya que es muy sencilla de utilizar. Primero debemos entender que puedes realizar varios métodos mediante contra la REST API, aquí os dejo una tabla con los tipos, códigos y explicación:

post_nsx2

Bien, vamos a realizar una prueba, para ello podemos lanzar una consulta sencilla, por ejemplo para la REST API de NSX, una consulta que nos devuelva los Edges que hay en nuestro NSX. Como es una consulta, el método es GET, y atacaremos a la siguiente url: “https://<fqdn_nsx_manager_or_IP/api/4.0/edges>”. Bien, lo primero es configurar el método de autenticación. En este caso utilizaremos el “Basic Auth” y añadiremos las credenciales con permisos para NSX Manager.

post_nsx1

Una vez hemos apretado en Preview Request, podemos avanzar a la siguiente pestaña Headers, en la cuál deberemos configurar los parámetros “Accept” y “Content-Type“. Para ambos, le daremos el mismo valor, que será el formato en el cuál nos devolverá la información, en este caso “application/xml”, aunque acepta otros formatos como “application/json”. Utilizar el que os sea más cómodo.

post_nsx3

Por último, ejecutaremos la sentencia. Y nos devolverá como resultados los Edges que tengamos configurados en nuestra infraestructura NSX.

Bien, esta es una buena opción, para realizar una consulta puntual, algún cambio de configuración, algún despliegue nuevo, etc. Pero ahora, vamos a ver cómo atacar a la REST API de NSX mediante PowerCLI.

Lo primero es añadirnos el Módulo de NSX para PowerCLI:

post_nsx4

Para atacar a la REST API de NSX, utilizaremos Invoke-WebRequest y aquí os dejo el script que he realizado:


##################################################################
## Realizar backup Edges NSX 
## ------------------------------------------------------------###
## V. 1.0 Mario Gómez - CloudVM
## ------------------------------------------------------------###
## Syntaxis: backup_edges.ps1 -VCENTER vCenterName
## ------------------------------------------------------------###
##################################################################

# Functions

function Backup-Edge
{
     param(
           [Parameter(
           Position=0,
           Mandatory=$true,
           ValueFromPipeline=$true,
           ValueFromPipelineByPropertyName=$true)
           ]
             [String]$BaseUrl,
             [String]$Username,
             [String]$Password,
             [String]$EdgeId
     )
     $base64auth = [convert]::ToBase64String([text.encoding]::ASCII.GetBytes("$($username):$($password)"))
     $url = $BaseUrl+$EdgeId
     $params = @{Authorization = "Basic "+ $base64auth;Accept = "application/xml";"Content-Type" = "application/xml"}
     $response = Invoke-WebRequest -Uri $url -Headers $params -Method Get
     $file = $response | Format-XML
     return $file
}

# Connect to NSX Manager
$connection = Connect-NsxServer -vCenterServer vcenter.cloudvm.es

# Declaración de variables

$filepath = "E:\CloudVM\Backup_Edges\"
$fecha = Get-Date -Format ddMMMMMMMMMMMMMyy
$password = "CloudVM@2020"
$username = "admin"
$lista_edges_id = @()
$nsx_server = $connection.Server
$url = "https://"+$nsx_server+"/api/4.0/edges/"

# Sino esta creada la carpeta, creamos una carpeta para cada vCenter
if ((Get-ChildItem -ErrorAction Ignore -Path $filepath).Name -notlike "*$VCENTER*"){mkdir $filepath\$VCENTER | Out-Null}

# Creamos dentro de la carpeta determinada del vCenter, una carpeta con la fecha del Backup
$backup_path = $filepath + "\" + $VCENTER
$backup_folder = "Backup_Edges_"+$fecha
mkdir $backup_path\$backup_folder | Out-Null
$backup_path = $backup_path + "\" + $backup_folder

# Recogemos un listado de los Edges
$lista_edges_id = (Get-NsxEdge).id

$lista_edges_id | ForEach-Object {
             Write-Host "[INFO] Realizando Backup del Edge [ $_ ]..." -ForegroundColor Yellow
             $backup_file = Backup-Edge -BaseUrl $url -Username $username -Password $password -EdgeId $_
             # Exportamos el Backup File a un xml en el directorio de Backups
             $file = $backup_path+"\"+$_+".xml" 
             $backup_file | Out-File -FilePath $file
}

Disconnect-NsxServer

Os dejo el enlace a la documentación de la REST API de NSX 6.4.x : https://docs.vmware.com/en/VMware-NSX-Data-Center-for-vSphere/6.4/nsx_64_api.pdf

Espero que os haya gustado y os sea de utilidad 😉 . Muchas gracias por compartir!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *