vmware powercli: tareas programadas

Para ejecutar un script de powercli mediante el programador de tareas, es necesario prepararlo para poder ser invocado desde powershell.

El script debe comenzar invocando el snapin de vmware:

add-pssnapin VMware.VimAutomation.Core

Antes de pasar a una tarea programada, recomendamos probar el script invocandolo a través de powershell:

powershell.exe c:\myscript.ps1

Tarea programada en windows

Herramientas administrativas > Programador de tareas

vmware_powercli_tarea_programada001

Tarea básica: Hora y fecha de comienzo.

vmware_powercli_tarea_programada002

Acción: Iniciar un programa
vmware_powercli_tarea_programada003Poner ruta de powershell y del script de powercli completa:

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

 

powercli_tarea_programada_64bits

Vmware vcenter migration. The operation is not allowed in the current state .

Despite having DRS enabled on our vmware cluster, we are unable to migrate virtual machines.

Every migration ends with the following error:

The operation is not allowed in the current state .
vmware_esx_error_migracion001

Thist issue occurs not only when using powercli, but also when manually trying to migrate:

$vm | move-VM -Datastore  $datastore -Destination $vmhost

If you check the host configuration (summary tab),  vmotion state is set as “No”, though  Host license is Enterprise plus.

vmware_esx_error_migracion002

Step 1: Restart licencse service in vcenter
vcenter:~ # /etc/init.d/vmware-cis-license restart
Stopping VMware CIS License Service...
Stopped VMware CIS License Service.
Starting VMware CIS License Service...
Waiting for VMware CIS License Service..................
running: PID:4108
Step 2: Disconnect and reconnect host.

When a disconnection and reconnection is performed, licence information is read, and vmotion host configuration will be re-enabled.

Vmware: configurar host profile con distintas tarjetas hbas

En el caso de tener licencias enterprise plus, los perfiles de servidor nos ayudan a mantener todas las configuraciones iguales de los servidores.

En nuestro caso, usamos siempre  un servidor de referencia. Cuando se hacen cambios sobre la configuración, por ejemplo, de red

  1. Configurar la nueva red en el servidor de referencia
  2. Probar
  3. Aplicar host profile en todos los servidores Esxi.

El problema empieza a aparecer cuando tenemos servidores diferentes, con distintos componentes físicos.

Desde el update 2 de vcenter 6, por algún motivo, han decidido que el idioma del teclado fija también el idioma del interfaz, lo que nos complica un poco la vida al buscar ayuda.

En nuestro caso, el error de hbas es:

Faltan dispositivos PCI 2 vmhba en su host que son requeridos por el perfil. El modelo de host puede ser diferente del host de referencia

vmware_host_profile_error_hba

En inglés, el error es:

Your host is missing 2 vmnic PCI devices required by the profile. Your host model may be different from the reference host

Está ya reportado en Vmware Knowledge Base.

En nuestro caso, hemos tenido que deshabilitar dos apartados completos de los perfiles:

  • Device alias configuration
  • Storage configuration

vmware_host_profile_error_hba_002

 

Using linux box to shrink and separate virtual disks

I have some virtual machines with partitions on their vmdk. This makes it terribly difficult to be resized.

I am going to use old dd linux command to copy all data.

In the hipervisor, I’m using a linux box, actually Debian box, to map all disks, and do all the block writing commands.

vmware_shrink2

I also have to take care of the first blocks of the disks, which contains the booting mark. Otherwise, I will have a copy of my data, but my disk won’t be bootable.

vmware_shrink1

Let’s get started.

I will assign to my linux box, all my disks. Old and new ones.

OS disk: Writing boot sector

#
# Copy boot blocks and old partition tables
#
dd if=/dev/sdb of=/dev/sdc bs=16 count=200

OS disk: writing data

I have to re-do partition table (using fdisk) and then copy all data.

As I copied from the original source disk the first sector, a fake partition table is also writen on my new OS disk. It’s time to repartition.

fdisk /dev/sdc
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sdc: 15 GiB, 16106127360 bytes, 31457280 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfe1387ed
Device Boot Start End Sectors Size Id Type
/dev/sdc1 * 63 31471334 31471272 15G 7 HPFS/NTFS/exFAT
/dev/sdc2 31471335 52452224 20980890 10G 7 HPFS/NTFS/exFAT

Delete second partition

Command (m for help): d 2
(...)
Command (m for help): p
(...)
Device Boot Start End Sectors Size Id Type
/dev/sdc1 * 63 31471334 31471272 15G 7 HPFS/NTFS/exFAT
(...)
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

To write the data, the dd command has to be invoked partitions name (sdb1) and not entire disk (sdb). Entire disk was used just for the boot mark.

dd if=/dev/sdb1 of=/dev/sdc1

Data disk: writing data

I have 2 options here. As it is data, I can either write blocks (dd) or just ordinary file copying.

I created the partition table.

fdisk /dev/sdd

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 7
Changed type of partition 'HPFS/NTFS/exFAT' to 'HPFS/NTFS/exFAT'.

Command (m for help): p
Disk /dev/sdd: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00c7e39c
Device Boot Start End Sectors Size Id Type
/dev/sdd1 2048 20971519 20969472 10G 7 HPFS/NTFS/exFAT

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

If we are going to use file system operations, I need to give it ntfs format:

apt-get install ntfs-3g
mkfs.ntfs /dev/sdd1

Now, it is time to mount both partitions and copy!

mkdir /mnt/old_data
mkdir /mnt/new_data
mount /dev/sdb2 /mnt/old_data/
mount /dev/sdd1 /mnt/new_data/
cp -rfp /mnt/old_data/* /mnt/new_data/

If ntfs permissions are not correctly written, you can use again old dd:

dd if=/dev/sdb2 of=/dev/sdd1

Vmware Update Manager 6

Actualización de ESXi mediante Vmware Update Manager

Requisitos previos:

La instalación de vum, sólo se puede realizar sobre una máquina windows. En nuestro caso, usaremos un servidor windows 2012 dedicado.

El instalador viene como parte de la ISO de vmware vcenter 6.0.0.

Antes de instalar, es necesario contar con .NET Framework 3.5 en la máquina :

En W2012, se puede instalar a través de la consola “Server Manager”añadiendo características, o con línea de comandos:

IMAGEN Server

dism.exe /online /enable-feature /featurename:NetFX3 /all

IMAGEN DSIM

En el caso de que la instalación devuelva el error 0x800f0906, es necesario cambiar la configuración de la política de grupo de windows

gpedit.msc

Computer Configuration > Administrative Templates > System >

Enable Specify stettings for optional component installation and co….

Check Contact Windows Update…

gpupdate /force

SqlServer 2012 : Odbc 32 bits

La base de datos que vamos a utilizar, es una instancia en SQL Server 2012. Para ello, se instala Microsoft SQL Server 2012 Native Client.

ms.quorum.error022

es necesario crear un ODBC de 32 bits

vum001

Especificamos la base de datos por defecto

vum003

Instalación del servidor Vmware Update Manager

Se monta el CD en la máquina virtual: VMware-VIMSetup-all-6.0.0-2656757.iso

Se instala el servidor de Vmware Update Manager. En este caso, son máquinas diferentes las que contienen Vmware Vcenter y Vmware Update Manager.vum004

Ambas máquinas deben tener visibilidad entre sí, en los puertos que se definen en el KB de vmware al igual que visibilidad con los servidores ESXi.

Instalación del cliente

En el cliente, se instala como un plugin dentro del cliente pesado de vmware.

En la misma ISO que el servidor Vmware Vmware-VIMSetup-all-6.0.0-2656757.iso, en la carpeta updateManager aparece

vum005

Es necesario instalar Vmware-UMClient.exe y reinicial el cliente vmware, para que aparezca como un plugin más

vum006

Crear un base line para descarga automatizada de parches

Crear un base line para servidores ESXi 6.00

vum007

dynamic

vum008

Sólo ESX 6

vum009

En nuestro caso, todos los ESX son iguales, por lo que es posible usar un único base line directamente para todo el servidor vmware

vum010

Parchear un servidor:

Vista en cliente

vum021

Pasos a realizar para parchear un servidor:

  • Stage. Es el paso en que se pasan los parches al servidor en concreto.

  • Poner en mantenimiento y aplicar los parches: “Remediate”

VMWare 6 VSCA: Monitorización con snmp

En las anteriores versiones de vmware, para hacer una monitorización estándar con snmp, era necesario instalar a través de yast los paquetes de snmp.

https://thwack.solarwinds.com/thread/70271

En la versión 6 hay algunos cambios.

VSCA Snmp en puerto 161

Viene con snmp instalado y corriendo en el puerto 161, pero sólo para envío de traps. No permite hacer llamadas get.

http://pubs.vmware.com/vsphere-60/index.jsp#com.vmware.vsphere.vcsa.doc/GUID-04815BDB-5AF6-4067-A471-28E7F1800C78.html

VSCA Snmp en puerto no estándar

Sin  embargo, se puede poner un segundo servicio de snmp, que sí responde a peticiones Get en cualquier otro puerto:

Command> snmp.set --port 49160
Command> snmp.set --communities mycommunity

Con esto, ya se puede integrar la monitorización en un sistema como nagios.

Vmware Vcenter Migración VSCA 5.5 a VSCA 6

1. Por si acaso, preparamos la vuelta atrás.

Restauración a nivel de máquina

  • Creamos un clon del servidor y apuntamos el host ESXi en el que está ejecutando.

  • Paramos los servicios de DRS para prevenir que las máquinas se muevan de host y poder restaurar en poco tiempo.

Restauración a nivel de datos

  • Creamos una copia del inventario en powershell con inventory snapshot. Aunque no se copian ni host profiles ni custom specifications, al menos nos da un punto de restauración a nivel de inventario de máquinas bastante potente.

2.Comenzando la migración.

Elegimos una máquina windows donde se hará la migración. Esta máquina tendrá que tener visibilidad directa con los hosts ESXi y con el vsphere vcenter 5.X que vamos a migrar. A nivel de seguridad, debe tener los mismos puertos abiertos que el vcenter 5.X.

En la página de vmware, se puede descargar la imagen  de vsca vSphere 6.0

En un cliente windows virtual asignamos la ISO de vsca.

vmware.migration.01

Este cliente, recomendamos que tenga visibilidad directa tanto con hosts esxi, como con el servidor vcenter que se va a migrar.

En nuestro caso, hemos puesto 2 interfaces de red.

– Interfaz de red 1 de gestión, en la misma subred que el antiguo servidor vcenter VSCA 5.5

– Interfaz de red 2 (sin puerta de enlace) en la misma subred que el servidor ESXi al que vamos a encargar la migración.

Instalamos Vmware-ClienIntegrationPlugin-6.0.0 en el cliente windows que usaremos para actualizar vsca.

vmware.migration.02

Abrimos un navegador a la siguiente dirección: file:///D:/vcsa-setup.html

vmware.migration.03

Pinchamos sobre upgrade y configuramos nuestro host vmware en el que vamos a instalar la imagen.

vmware.migration.04

Si sale el error de Platform services controller, es necesario cambiar el tipo de servidor:

Existing Appliance Type → Embedded Platform Services Controller.

vmware.migration.05

https://pubs.vmware.com/vsphere-60/index.jsp#com.vmware.vsphere.upgrade.doc/GUID-6A5C596D-103E-4024-9353-5569263EB427.html

Pasado este punto, el asistente sigue. Tarda aproximadamente 40 minutos, migrando todo el inventario, profiles, custom specifications y datos de rendimiento.

Cuando termina, apaga el antiguo vcenter, se queda el mismo con la IP del antiguo vcenter y la migración está completada.

Have fun!

Powercli: Clonar lista de máquinas eligiendo como destino el datastore que tiene mayor capacidad

Para agilizar las clonaciones de listas de máquinas, es necesario usar un powercli, que, además, elija como destino el datastore que tenga mayor espacio disponible.

VMWare ESXi
VMWare ESXi

Para ordenar los resultados de datastore en función del espacio disponible:

     $datastorelist = Get-Datastore -Location $DatastoreCluster | sort -descending FreeSpaceMB

 

En nuestro caso, tenemos los datastore configurados como un datastorecluster, pero,en el caso de no tener, podríamos usar como Location directamente el nombre del cluster o del datacenter donde queremos seleccionar el datastore.

El script completo, está disponible en github.

 
foreach ($clonename in $new_vm)		
	{
    #Select datastore with more space:
    # $datastorelist = Get-Datastore -Location $Datacenter | sort -descending FreeSpaceMB
    # Use in case there are datastore clusters
    $datastorelist = Get-Datastore -Location $DatastoreCluster | sort -descending FreeSpaceMB
    $datastore = $datastorelist[0].Name
    "Clone $clonename in $datastore"

	if (New-VM -Name $clonename -ResourcePool $respool -VM $sourceVM -Location $folder -Datastore $datastore -DiskStorageFormat Thick )
		{"DONE $clonename"}
	else
		{"Something wrong with cloning"}
}	

Powercli: Configurar máquinas virtuales para que instalen tools en el inicio

A raíz del artículo de Brian Graf y de LucD sobre cambios de especificaciones de máquinas virtuales, hemos hecho un pequeño script configure_vmtools_power_cycle.ps1 capaz de marcar en las máquinas virtuales el atributo “tools upgrade”vmware.vmtools.upgrade.power.cycle

Se invoca desde powercli

.\configure_vmtools_power_cycle.ps1

Requiere configuración para definir en qué contenedor (Location) va a aplicar el cambio de políticas.

Para evitar que queden vmware tools montadas en los linux, sólo aplica el cambio sobre máquinas definidas como Windows y encendidas.

En la versión de powercli 5.5 que estamos trabajando, sólo está relleno el cambio vm.Guest.OsFullname si la máquina está encendida. En el caso de máquinas apagadas, no podemos discriminar por sistema operativo. Por ello, se ha puesto también la opción en la función de forzar la aplicación.

 

 
Function configure_vmtools_power_cycle ( $vm, [bool] $force )
{
       

   
    # Comment if you want to upgrade non windows vm
    if ((($vm.Guest.State -eq "PoweredOn") -and  ($vm.Guest.OSFullName.Contains("Windows")) -or ($force)))
        
       {
    
        write-host "Configure vmtools check and upgrade in every powercycle: " $vm.Name $vm.Guest.OSFullName

        # This line creates the object that encapsulates the settings for reconfiguring the VM
        $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
        # This line creates the object we will be modifying
        $vmConfigSpec.Tools = New-Object VMware.Vim.ToolsConfigInfo
        # This line sets the Tools upgrades policy checkbox
        $vmConfigSpec.Tools.ToolsUpgradePolicy = "UpgradeAtPowerCycle"
        # This line commits the change to each virtual machine
        # Get-View -ViewType VirtualMachine | %{    $_.ReconfigVM($vmConfigSpec)}
    
        # Reconfigure vm
        $vm | Get-View | %{ $_.ReconfigVM($vmConfigSpec)}
        
        
   }
 }

 

Vmware: host profiles con arranque desde SAN

Los host-profiles permiten tener una plantilla de configuración de host que asegura que todos los esxi de un cluster son iguales.

vmware.hostprofiles003

Hacen extraordinariamente cómodo la configuración de nuevos servidores.

Se almacenan los datos de:

  • red
  • almacenamiento
  • ntp
  • servicios, firewall…

El problema viene, cuando parte de los servidores tienen arranque desde SAN.

El perfil,  ve el disco de arranque igual que un datastore. El perfil da error de multimapping y psa invariablemente, al aplicar el perfil sobre otros servidores.

Hemos probado a deshabilitar entero la seccción de storage configuration.

Al no tener nada de información metida en los vmware, al respecto de los discos, entra en funcionamiento el mismo mecanismo que si no huebiera host profile en absoluto: Lo que los Hosts ESX vean a través de la fibra se considera datastore.

El perfil por tanto:

  • Se puede aplicar sobre cualquier host.
  • Configura correctamente red, ntp, dns, etc.
  • Ignora todos los settings de almacenamiento sin dar error.

 

vmware.hostprofiles002