lunes, 30 de junio de 2014

Comandos útiles PowerCli

Hola de nuevo,

PowerCli es un módulo de powershell con CmdLets para gestionar un entorno de vSphere directamente desde la consola. Por supuesto como se tratan de comandos powershell podemos incluirlos en un script para realizar varias tareas a la vez, usar los famosos pipes de powershell, etc...
A continuación pongo unos cuantos comandos de los que a mí me resultan más útiles:

1. Para conectar a un servidor ESX o a un servidor vCenter (nos pedirá los credenciales necesarios para conectar a ese servidor):

 Connect-VIServer <IP del servidor>

2. En caso de estar conectado a un servidor vCenter, para obtener un listado de los host ESX conectados:

 Get-VMHost

(Nos aparece un listado Nombre - Estado - Número de CPUs - Uso de CPU)

3. Para obtener información avanzada de los hosts ESX

 get-vmhost | Get-VMHostAdvancedConfiguration

4. Para obtener un listado de los datastores presentados a los servidores de Vmware y del espacio libre que tienen.

Get-Datastore

5. Si queremos información más detallada de los datastores:

Get-Datastore | select Name, FileSystemVersion, FreeSpaceGB, CapacityGB


 6. Para ver las máquinas virtuales tienen discos dentro de un datastore concreto:

Get-Datastore <nombre datastore> | Get-VM

7. Para obtener un reporte de las máquinas virtuales que tenemos

 Get-VM

(Nos aparece un listado con las columnas Nombre - Estado - CPU's - RAM)

Además en este comando (y en otros también) podemos obtener resultados filtrados según el nombre de las máquinas virtuales con el parámetro -Name

 Get-VM -Name <*texto*>

(Devolverá el listado de máquinas virtuales que su nombre contenga el texto pasado por parámetro)

8. Existen otras maneras de filtrar. Como he comentado antes podemos usar pipes, y en la variable $_ tenemos el resultado del pipe anterior. Así, con el siguiente comando obtenemos las máquinas virtuales que están encendidas.

 Get-VM | Where {$_.PowerState -eq "PoweredOn"}

9. Para obtener más información de las máquinas virtuales: El comando Get-VM nos devuelve una lista de objetos de tipo "VMware.VimAutomation.Types.VirtualMachine" con diferentes propiedades, de las cuales podemos obtener información. Las que encuentro más útiles son:

Guest: Sistema operativo de la máquina virtual
HardDisks: Información sobre los discos de la máquina virtual
Host: Información sobre el host ESX
NumCPU: Número de CPU's
PowerState: Para saber si está encendida
Version: Versión del hardware de la màquina virtual (7,8....)
VMResourceConfig: Información sobre la configuración de compartición de recursos (shares para los que ya sabéis de que va el tema)
VMSwapfilePolicy: Información sobre donde se guarda el fichero de swap de la máquina virtual.

Podemos listar estas propiedades con el mismo comando:

 Get-VM | select Name, Description, NumCpu, MemoryGB, Version, Host, {$_.Guest.IPAddress}

10. Existen otros comandos que podemos usar con pipes para obtener información más detallada:

Máquinas con discos persistentes:
 get-VM | Get-HardDisk | Where {$_.Persistence -eq "IndependentPersistent"}

 Información avanzada de la máquina virtual y sus dicheros de configuración
 Get-VM | get-View 

Máquinas virtuales con snapshots creados

get-vm | get-snapshot | format-table vm,name,sizeMB,IsCurrent,PowerState,created

11. Para acabar, algún comando útil de los que se suelen usar en powershell para exportar resultados a ficheros o para ordenar los resultados obtenidos:

get-vm | get-snapshot | format-list | out-file c:\snaps.txt

Get-VM | select Name, NumCpu, MemoryGB | Export-Csv -path “<path CSV>” -NoTypeInformation

Get-VM | select Name, Description, NumCpu, MemoryGB | sort MemoryGB | Export-Csv -path “<path>” –NoTypeInformation



De momento esto es todo, evidentemente existen un montón de comandos más en PowerCLi para gestionar un entorno de virtualización con Vmware, pero he querido retratar en estos primeros pasos unos cuantos comandos para obtener información sobre el entorno, algo útil por si tenemos que sacar de manera rápida algún resumen de nuestro sistema.

Hasta la próxima entrada!




sábado, 14 de junio de 2014

Errores con Google Apps Directory Sync

Eres administrador de Google Apps? Entonces quizás utilizas la herramienta Directory Sync, para sincronizar información entre los usuarios de un directorio activo de Microsoft y  los usuarios de Google Apps.

Hace poco me encontré con que la herramiento Directory Sync daba un error al realizar la sincronización. Al mirar el log encontré la siguiente información:

[2014-06-09 12:23:21,785] [pool-8-thread-2] [ERROR] [plugin.google.GDataRetryPolicy] Retry attempts exhausted for Updating person Pepito Sánchez, with attempt # 0
[2014-06-09 12:23:21,785] [pool-8-thread-2] [ERROR] [plugin.google.GDataRetryPolicy] Last encountered exception: com.google.gdata.util.InvalidEntryException: Bad Request
External id value can&#39;t be empty.

[2014-06-09 12:23:21,785] [pool-8-thread-2] [DEBUG] [usersyncapp.util.RetryImpl] Retry attempts exhausted for Updating person Pepito Sánchez with attempt # 0

Buscando en Google por este apenas lograba encontrar información, así que decidí rebuscar un poco por micuenta. Como se puede ver en el registro de error los usuarios que tienen problemas son usuarios que tienen un valor nulo en el campo externalIDs. Parece ser una especie de campo libre donde podemos introducir identificadores para nuestros usuarios que funcionen de manera independiente del ID único que tienen en Google Apps. Hasta aquí todo bien si no fuera porque en los usuarios de mi organización este campo ni siquiera lo tienen, ya que si no lo creas expresamente el campo ni existe. Así que me dispuse a buscar qué usuarios podían tener ese campo creado. Puedes consultar los usuarios que te dan problemas des de la web de la API (eso sí, debes tener habilitada la API en tu dominio):

https://developers.google.com/admin-sdk/directory/v1/reference/users/get#try-it

Activamos el interruptor "Authorize requests using OAuth 2.0 " para que nos deje realizar la consulta:


 Poniendo la dirección de correo del usuario problemático en el campo UserKey y dándole al botón "Execute" observo la siguiente respuesta:

200 OK
- Show headers -
{
 [...]
,
 "externalIds": [
  {
   "value": "",
   "type": "organization"
  }
 ],
 [...]
}

Como se puede ver el campo externalIDs (de tipo lista) contiene en mi caso un elemento de tipo "organization" pero con valor NULL, y Google Directory Sync se queja de que ese valor no puede estar vacío.

Así que si modificamos el campo "value" poniéndole un valor cualquiera que no sea null. Lo podemos cambiar desde la siguiente web:

https://developers.google.com/admin-sdk/directory/v1/reference/users/patch#try-it

En el campo UserKey volvemos a poner la dirección de correo de ese usuario, y ponemos el campo "Patch body" en modo Freeform:



 Le ponemos un valor cualquiera de la siguiente forma (hay que poner el editor ):

{
  "externalIds":[
    {
     "value": "xxx",
     "type": "organization"
    }
   ]
}

Después de ejecutar esta consulta el programa dejará de dar error y sincronizará el resto de datos. No sé en qué punto ese campo se ha rellenado, es el misterio que me queda por resolver. Pero en cualquier caso ese es el problema, espero que le sirva a alguien.

Saludos!

lunes, 9 de junio de 2014

VMTools en Debian 7

Hoy voy a explicar como, desde un sistema vSphere,  instalar las VMware Tools en una máquina virtual con la distribución Debian 7, ya que si instalamos una máquina virtual desde cero con esta distribución el proceso no es tan automático como podría ser por ejemplo en un sistema guest Windows. Por supuesto necesitaremos permisos de usuario root para realizar estas acciones.

Para empezar instalaremos el compilador gcc:

apt-get install gcc make

Después instalamos los ficheros de cabecera del kernel que estemos usando:

apt-get install linux-headers-$(uname -r)

Ahora des del cliente de vSphere vamos al menú de la máquina virtual y seleccionamos la opción para instalar/actualizar las VMWare Tools:











En una máquina virtual con Windows esta opción automáticamente lanzaría el instalador de las VMTools, en cambio en Debian deberemos montar manualmente la unidad de CD para acceder al instalador:

mount /dev/sr0  /mnt/

Ahora en el directorio mnt tenemos el fichero tar.gz con el instalador. Lo copiamos a un directorio temporal y lo descomprimimos para acceder al instalador:

cp /mnt/VMwareTools-{version de las tools}.tar.gz /tmp
cd /tmp
tar xvf VMwareTools-{version de las tools}.tar.gz


Al descomprimir se habrá crear un directorio llamado vmware-tools-distrib dentro del direcotio tmp, donde encontraremos el instalador que podremos lanzar, y que nos hará unas cuantas preguntas. Las marco en negrita y indico en rojo una pequeña explicación sobre cada cosa:

/tmp/vmware-tools-distrib/vmware-install.pl

[...]
In which directory do you want to install the binary files?
[/usr/bin]
Directorio donde queremos instalar los binarios, se puede dejar el que sale por defecto

What is the directory that contains the init directories (rc0.d/ to rc6.d/)?
[/etc]
Directorio que contiene los directorios con los niveles de inicialización del arranque del sistema. Se puede dejar por defecto, o si por el motivo que sea los has cambiado deberás indicarlo aquí.

What is the directory that contains the init scripts?
[/etc/init.d]
Directorio con los scripts de arranque de inicio automático

In which directory do you want to install the daemon files?
[/usr/sbin]
Directorio donde queramos instalar los ficheros del demonio de las VMTools, podemos dejar este por defecto

In which directory do you want to install the library files?
[/usr/lib/vmware-tools]
Directorio donde queramos instalar las librerías de las VMTools, se puede dejar este por defecto.
[...]
In which directory do you want to install the documentation files?
[/usr/share/doc/vmware-tools]
Ubicación de los ficheros de documentación, podemos dejar este por defecto.
[...]

Before running VMware Tools for the first time, you need to configure it by
invoking the following command: "/usr/bin/vmware-config-tools.pl". Do you want
this program to invoke the command for you now? [yes]
Ahora tenemos la opción de configurar las VMTools antes de iniciarlas por primera vez
[...]
Searching for GCC...
Detected GCC binary at "/usr/bin/gcc".
The path "/usr/bin/gcc" appears to be a valid path to the gcc binary.
Would you like to change it?
[no] Aquí podemos indicar el path donde está instalado el compilador gcc si no lo ha detectado automáticamente
[...]
The path "/lib/modules/3.2.0-4-amd64/build/include" appears to be a valid path
to the 3.2.0-4-amd64 kernel headers.
Would you like to change it?
[no] Aquí podemos indicar el path donde están almacenados los ficheros de cabecera del kernel que estamos usando, en caso de que no lo detecte automáticamente.
[...]
The VMware Host-Guest Filesystem allows for shared folders between the host OS
and the guest OS in a Fusion or Workstation virtual environment.  Do you wish
to enable this feature? [no]
Aquí podemos cambiar la opción a "yes" si queremos que la máquina virtual tenga activada la funcionalidad de tener carpetas compartidas entre la máquina virtual y el host que la está ejecutando.
[...]
The vmblock enables dragging or copying files between host and guest in a
Fusion or Workstation virtual environment.  Do you wish to enable this feature?
[no]
Aquí podemos cambiar la opción a "yes" si queremos poder copiar ficheros entre la máquina virtual y el cliente simplemente arrastrando ficheros entre ellas.
[...]
Would you like to enable VMware automatic kernel modules?
[no]
Ojo, opción experimental. Nos sirve para activar la compilación automática de los módulos de vmware en caso de actualizar el kernel. Al iniciar el sistema con el nuevo kernel se prepararían los modulos (vmxnet, etc...)
[...]
Enjoy,
--the VMware team

Cuando recibimos el saludo del equipo de VMware significa que hemos acabado la instalación. Hemos finalizado el trabajo, ya tenemos las VMTools instaladas.