Contents

Crear VLANs con PowerCLI de forma masiva

En más de una ocasión me he encontrado con la necesidad de crear rangos grandes de VLANs (realmente Virtual Machine Port Groups con tag de VLAN) en infraestructuras sin switches distribuidos y con varios nodos ESXi. Si bien crear unas pocas VLANs en algunos nodos es una tarea rápida que no entraña mucho misterio, cuando los números suben se puede volver una tarea tediosa y en la que es muy fácil cometer errores. Es por ello que en la entrada de hoy veremos cómo crear VLANs con PowerCLI de forma masiva de forma muy sencilla.

Usando New-VirtualPortGroup para crear VLANs con PowerCLI

Antes de empezar, como siempre, podemos consultar los cmdlets disponibles para la gestión de Virtual Port Groups (VLANs) con Get-Command:

/wp-content/uploads/2018/09/Comandos_VirtualPortGroup.png
Comandos VirtualPortGroup
Los cmdlets resultantes son bastante autoexplicativos, pero se puede consultar la lista de verbos aprobados y su significado en la documentación de Microsoft.

Tal como dice el título de la sección nos valdremos de New-VirtualPortGroup para crear una nueva VLAN. Este cmdlet es muy sencillito y, como se puede ver en la ayuda del mismo, dispone de muy pocos parámetros:

  • Name: El nombre que daremos al Virtual Port Group.
  • VirtualSwitch: El Virtual Switch sobre el que crearemos la VLAN.
  • VlanId: El tag de la VLAN.

Así que vamos a proceder a crear un nuevo Virtual Port Group de prueba llamado ‘sobrebits’ con VLAN tag 666:

1
2
3
4
5
PS C:\> New-VirtualPortGroup -Name sobrebits -VirtualSwitch vswitch0 -VLanId 666

Name                      Key                            VLanId PortBinding NumPorts
----                      ---                            ------ ----------- --------
sobrebits                 key-vim.host.PortGroup-sobr... 666

Crear rango de VLANs con PowerCLI

Visto como crear una VLAN con PowerCLI podemos proceder a utilizar el comando para generar VLANs de forma masiva. Para ello podemos valernos de un bucle for:

1
2
3
4
5
6
7
8
9
# Declaramos las variables de VLAN inicial, final y el vswitch sobre el que crearlas:
$Start = 667
$End = 675
$Vswitch = 'vswitch0'

# Recorremos el rango creando las VLAN:
for ($i=$Start; $i -le $End; $i++) {
    New-VirtualPortGroup -VirtualSwitch $Vswitch -Name "VLAN$i" -VlanID $i
}

Si ejecutamos el código podremos ver como se crean todos los Virtual Port Groups:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13

Name                      Key                            VLanId PortBinding NumPorts
----                      ---                            ------ ----------- --------
VLAN667                   key-vim.host.PortGroup-VLAN667 667
VLAN668                   key-vim.host.PortGroup-VLAN668 668
VLAN669                   key-vim.host.PortGroup-VLAN669 669
VLAN670                   key-vim.host.PortGroup-VLAN670 670
VLAN671                   key-vim.host.PortGroup-VLAN671 671
VLAN672                   key-vim.host.PortGroup-VLAN672 672
VLAN673                   key-vim.host.PortGroup-VLAN673 673
VLAN674                   key-vim.host.PortGroup-VLAN674 674
VLAN675                   key-vim.host.PortGroup-VLAN675 675

Usando el módulo New-VMHostVlan para crear VLANs masivamente con PowerCLI

Para acabar, me gustaría compartir un módulo que he creado y que yo mismo uso que básicamente utiliza lo visto en el punto anterior pero me permite ejecutarlo en modo comando y que siempre llevo cargado en mi sesión de PowerShell. Podéis descargar el módulo desde mi repositorio de GitHub.

Con New-VMHostVlan podemos utilizar los siguientes parámetros:

  • Start: VLAN de inicio.
  • End: VLAN final.
    • Si no se especifica una únicamente crea la VLAN de -Start.
  • Server: Servidor ESXi al que conectarse para crear las VLANs.
    • Si no se especifica intenta crearlo en el servidor al que ya se esté conectado. Si no se está conectado a ninguno devuelve error.
  • Vswitch: vSwitch en el que crear las VLANs.
  • Prefix: Prefijo a especificar para el campo Name de la VLAN.
    • Por defecto es ‘VLAN’.
    • Ejemplo: Si especificamos '-Prefix V' crearía el nombre de las VLANs en formato V671, V672…

Así que la ejecución de la función es sencillisima, este podría ser un ejemplo:

1
2
3
4
5
6
7
8
9
PS C:\> New-VMHostVlan -Start 676 -End 680 -Vswitch 'vswitch0' -Prefix 'sobrebits'

Name                      Key                            VLanId PortBinding NumPorts
----                      ---                            ------ ----------- --------
sobrebits676              key-vim.host.PortGroup-sobr... 676
sobrebits677              key-vim.host.PortGroup-sobr... 677
sobrebits678              key-vim.host.PortGroup-sobr... 678
sobrebits679              key-vim.host.PortGroup-sobr... 679
sobrebits680              key-vim.host.PortGroup-sobr... 680

Después de todo lo ejecutado en la entrada esto es lo que podríamos ver en nuestro nodo:

/wp-content/uploads/2018/09/crear-vlans-con-powercli.png
Crear vlans con powercli

¡Espero que la entrada os sea útil y os ahorre algo de vuestro valioso tiempo!