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.
Para ordenar los resultados de datastore en función del espacio disponible:
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.
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”
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)}
}
}
En el caso de estar usando también pnp4nagios, o cualquier otro addon capaz de hacer una gráfica , hay que respetar también la sintáxis de performance data.
Para definir los argumentos de entrada a un powershell, en el comienzo del script se define su nombre, posición y si es necesario:
En mi caso, he desarrollado un plugin para poder conocer el estado de un pool de aplicaciones en un servidor IIS. El código completo está aquí.
Publicarlo a través de NSClient++
Con nuestro nuevo script escrito y funcionando, es momento de configurar nsclient++ para poder acceder desde nuestro nagios.
En primer lugar, en la carpeta de scripts C:\Program Files\NSClient++\scripts copiamos nuestro nuevo check con extensión ps1.
El funcionamiento de NSClient++ para los external scripts, hace que todos ellos se invoquen a través del cmd de windows. Por lo tanto, debemos especificar en la linea, que es powershell quien debe ejecutar nuestro nuevo check.
Utilizando powershell, podemos hacer un pequeño script que nos libere un datastore completo, moviendo las máquinas virtuales que residen en él a una nueva ubicación.
Queremos clonar de forma automática un número de máquinas, con un patrón concreto. Para ello, hemos usado de powershell:
-Match
-notmatch
La autentación contra vcenter está fuera del script. Debe hacerse antes de llamarlo.
Al no tener resource pools configurados, la nueva máquina, debe dejarse en el resourcepool “Resources”. Con get-resourcepool podemos consultar cuáles tenemos disponibles en nuestra arquitectura.