Si tenemos un minicloud con OVH, podemos gestionar las instancias (máquinas vituales) con un script creado por Dominique Gallot. El script utiliza la API SOAP de OVH, de tal manera que permite obtener información sobre las instancias, arrancarlas y pararlas desde el terminal, sin tener que hacerlo desde el panel de administración.

En la página de OVH tienen el script ovhclud, para gestionar la nube (Public Cloud), pero parece que todavía no soporta las instancias de minicloud.

Instalación

Para descargar el script de la página de Gallot:

$ wget -q http://svn.gallot.be/blog/ovh-cloud-api/ovh.pm
$ wget -q http://svn.gallot.be/blog/ovh-cloud-api/ovh.pl
$ chmod a+x ovh.pl

El script utiliza la librería libsoap-lite-perl, por lo que deberá estar instalada en el sistema.

Acciones

Para obtener un listado de los servicios que tenemos:

$ ./ovh.pl -u ab12345-ovh -p mypassword -a listservice
Services
name : ab12345-cloud0
title : Cloud
zone : ab1c2.project.ovh.net

Para listar las instancias:

$ ./ovh.pl -u ab12345-ovh -p mypassword -q -a listvm
cloud1  12345   running 211.58.125.116

Para listar una instancia concreta:

$ ./ovh.pl -u ab12345-ovh -p mypassword -q -a listvm -s cloud1
cloud1  12345   running 211.58.125.116

En este caso, hay una instancia encendida. Si queremos pararla sólo tenemos que especifica el nombre de la misma:

$ ./ovh.pl -u ab12345-ovh -p mypassword -a stopvm -m cloud1

Podemos comprobar que está parada:

$ ./ovh.pl -u ab12345-ovh -p mypassword -a listvm
name : cloud1
id : 12345
state : stopped
ip :
ipDns :

Para arrancar la instancia también debemos especificar el nombre:

$ ./ovh.pl -u ab12345-ovh -p mypassword -a startvm -m cloud1

Si acto seguido comprobamos la instancia, vemos que ya tiene asignada una IP (distinta a la anterior), aunque está marcada como stopped:

$ ./ovh.pl -u ab12345-ovh -p mypassword -a listvm
name : cloud1
id : 12345
state : stopped
ip : 136.125.58.211
ipDns : mc-136-125-58-211.ovh.net

Transcurrido el tiempo que la instancia tarda en arrancar, ya queda marcada como encendida:

$ ./ovh.pl -u ab12345-ovh -p mypassword -a listvm
name : cloud1
id : 12345
state : running
ip : 136.125.58.211
ipDns : mc-136-125-58-211.ovh.net

También podemos reiniciarla:

$ ./ovh.pl -u ab12345-ovh -p mypassword -a rebootvm

Si queremos seguir el intercambios de mensajes SOAP podemos añadir el argumento -t.

Parar una instancia proporcionando su URL o su IP

Teniendo esto en cuenta, el siguiente script stop-cloud-url.sh detiene la instancia dada su URL:

#!/bin/bash -
USERNAME=ab12345-ovh
PASSWORD=mypassword
DOMAIN="$1"
IP=$(host "$DOMAIN" | awk '{print $NF}')
VMNAME=$(ovh.pl -u $USERNAME -p $PASSWORD -q -a listvm | grep $IP | awk '{print $1}')
ovh.pl -u $USERNAME -p $PASSWORD -a stopvm -m $VMNAME

Si, en lugar de un dominio, tenemos su IP, podemos detener la instancia usando el script stop-cloud-ip.sh:

#!/bin/bash -
USERNAME=ab12345-ovh
PASSWORD=mypassword
IP="$1"
VMNAME=$(ovh.pl -u $USERNAME -p $PASSWORD -q -a listvm | grep $IP | awk '{print $1}')
ovh.pl -u $USERNAME -p $PASSWORD -a stopvm -m $VMNAME

Can’t locate ovh.pm in @INC

El script ovh.pl hace uso del paquete ovh.pm. Si no ejecutamos ovh.pl desde el mismo directorio en el que está ovh.pm se quejará de que no lo encuentra. Para solucionarlo, podemos copiar el paquete a una ruta incluido en el @INC (más o menos como el CLASSPATH de Java o el PYTHONPATH de Python):

$ perl -e 'print "@INC";'
/etc/perl /usr/local/lib/perl/5.12.4 /usr/local/share/perl/5.12.4 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.12 /usr/share/perl/5.12 /usr/local/lib/site_perl .

También podemos incluir la siguiente directiva, en ovh.pl, para que incluya el directorio donde se encuentra ovh.pm:

use lib '/home/myuser/modules';

Programar el encendido o apagado de una instancia

Programar el encendido o apagado de la instancia se vuelve muy sencillo.

Si queremos programar un encendido o apagado a una hora concreta, o dentro de un tiempo determinado:

$ at 08:00
$ at midnight
$ at noon
$ at now
$ at now + 5 minutes
$ at midnight + 2 weeks

Después, introducimos la ruta del script y terminamos con ^D (control+D).

Si queremos que sea algo periódico, por ejemplo, de lunes a viernes de 7am a 5pm, utilizaremos el cron:

$ crontab -e
# m h d mon dow(0=sunday)
0  7 * * 1-5 /path/to/start-cloud.sh
0 17 * * 1-5 /path/to/stop-cloud-url.sh sub.domain.com

Entradas relacionadas


Published

Category

admin

Tags

Contacto