Agregar y eliminar PortGroup con script

siguiendo con la línea de Scripting que tan útil es, voy a aportar un par de scripts que resultan muy útiles. Quien no se ha encontrado alguna vez con la impediosa y pesada tarea de tener que crear PortGroup de forma masiva entre los ESXi de un cluster. Pues os voy a aportar unos scripts para poder automatizar las tareas de creación y eliminación de PortGroup de manera escalada en los ESXi de nuestro Cluster.

Primero aclarar a que nos referimos con PortGroup. En VMware se nombra PortGroup a un objeto dentro de nuestra infraestructura que se crea dentro de Switch Virtual, ya sea vSS (vSwitch Standard) o vDS (vSwitch Distributed), con el fin de agrupar puertos con una configuración común. De manera que agregando un PortGroup a un vSwitch, nos permite segmentar la red dentro de un switch virtual. Posteriormente se agregan las VMs a los PortGroup mediante las tarjetas de red virtuales de cada VM. Indicar que los PortGroup deben de tener un nombre o “label network”, deben de tener también un VLAN ID, que dependiendo de la configuración externa (Hardware de Red), deberá de ir taggeada. También podemos configurar a la hora de crear el PortGroup la Seguridad (Promiscuous Mode, Mask Address Changes, Forged Transmit).En cuanto a Traffic Shaping podemos configurar como medida de control de tráfico inyectado a la red. Por último, podemos a través de NIC Teaming configurar Failover de NICs y en caso de tener algún problema alguna vmnic asignada al vSwitch, actuar según convenga.

  • Agregar PortGroup a vSwitch existente

Para poder lanzar el script, le pasaremos como parámetros, el Virtual Center, el Cluster, el vSwitch, label PortGroup y el VLAN ID.

#Agregar PortGroup a Cluster ESXi

param(
[Parameter(Mandatory=$True)]
[string]$vCenterName,
[Parameter(Mandatory=$True)]
[string]$ClusterName,
[Parameter(Mandatory=$True)]
[string]$VSwitch,
[Parameter(Mandatory=$True)]
[string]$NamePortGroup,
[Parameter(Mandatory=$True)]
[string]$NumIDVLAN
)

# Hay que añadir esta línea cuando se llama a PowerCli desde PowerShell de Windows.
Add-PSSnapin VMware.VimAutomation.Core

# CREDENCIALES
$USER = 'USERNAME CON PERMISOS'
$PASS = 'AQUI INTRODUCIMOS LA PASS'

# Conexión a Virtual Center en PowerCli
Connect-VIServer -server $vCenterName -user $USER -password $PASS |out-null


$Cluster = Get-Cluster $ClusterName

write-host

$TargetHost = $Cluster | Get-VMHost
Foreach ($vmhost in $TargetHost){
$vswitchnuevo =  Get-VirtualSwitch -VMHost $vmhost -Name $VSwitch
New-VirtualPortGroup -VirtualSwitch $vswitchnuevo  -Name $NamePortGroup  -VLanID $NumIDVLAN

}

  • Eliminar PortGroup a vSwitch existente

Para poder lanzar el script, le pasaremos como parámetros, el Virtual Center, el Cluster, el vSwitch, label PortGroup.

#Eliminar PortGroup en Cluster

param(
[Parameter(Mandatory=$True)]
[string]$vCenterName,
[Parameter(Mandatory=$True)]
[string]$ClusterName,
[Parameter(Mandatory=$True)]
[string]$VSwitch,
[Parameter(Mandatory=$True)]
[string]$NamePortGroup
)

# Hay que añadir esta línea cuando se llama a PowerCli desde PowerShell de Windows.
Add-PSSnapin VMware.VimAutomation.Core

# CREDENCIALES
$USER = 'USERNAME CON PERMISOS'
$PASS = 'AQUI INTRODUCIMOS LA PASS'
# Conexión a Virtual Center en PowerCli
Connect-VIServer -server $vCenterName -user $USER -password $PASS
#|out-null

$Cluster = Get-Cluster $ClusterName

write-host

$TargetHost = $Cluster | Get-VMHost

# Para cada Host del Cluster se eliminará la VLAN pasada con el ID Especificado
Foreach ($VMHost in $TargetHost)
{
$HOST_STATE = get-vmhost -name $VMHost
$CONNECTIONSTATE = $HOST_STATE.connectionstate
# Para cada Host, comprueba si su estado es Connected o Maintenance y eliminará el portgroup, sino lo obviará.
if ($CONNECTIONSTATE -like "Maintenance" -or $CONNECTIONSTATE -like "Connected"){
$virtualPortGroup = Get-VirtualPortGroup -VMHost $vmhost -VirtualSwitch $VSwitch -Name $NamePortGroup
Remove-VirtualPortGroup -VirtualPortGroup $virtualPortGroup -Confirm:$False
}
}