Automatizar la provisión de campos de usuario
Los campos de usuario de los dispositivos monitorizados en CNM se pueden actualizar mediante el API. Esta automatización nos permite:
-
- Tener un mayor control sobre nuestros "assets".
- Integrar/federar los datos de nuestros sistmas de control de TI.
- Tener más robustez frente a posibles errores en la introducción de datos.
- Mejorar el control sobre los datos almacenados.
Para ver lo sencillo que puede resultar vamos a ver un ejemplo concreto. Supongamos que definimos un campo de usuario para almacenar el proveedor encargado del mantenimiento del dispositivo y que somos capaces de obtenerlo en base a algún criterio propio, como puede ser:
-
- Según el tipo de dispositivo. Es el caso en que los servidores los lleva el proveedor A, los routers y switches el proveedor B, los firewalls el proveedor C y a esto hay que añadir las excepciones correspondientes.
- A partir de los datos almacenados en algún repositorio de nuestra organización (SQL, LDAP, BBDD no SQL etc ..).
- A partir de una información contenida en el propio equipo.
- En base a una combinación de todas las anteriores.
Esto se puede resolver con un script que haga lo siguiente:
- Obtener del token de acceso.
- Obtener la lista de dispositivos
- Recorrer la lista de dispositivos y según una lógica que aplica al campo tipo de dispositivo calcula el campo proveedor y actualiza el dispositivo correspondiente.
Un script codificado en PERL y utilizando curl para hacer las peticiones, tendría el siguiente aspecto:
#!/usr/bin/perl -w #------------------------------------------------------------------------- # api_sample_devices_custom_curl.pl #------------------------------------------------------------------------- use strict; use JSON; use Data::Dumper; use URI::Escape; #------------------------------------------------------------------------- my $result; my $cnm_ip='localhost'; my ($user,$pwd)=('admin','xxxxx'); #------------------------------------------------------------------------- # Se obtiene el token $result=`/usr/bin/curl -ks "https://$cnm_ip/onm/api/1.0/auth/token.json?u=$user&p=$pwd"`; my $data=decode_json($result); my $token=$data->{'sessionid'}; #------------------------------------------------------------------------- # Se obtienen los dispositivos $result=`/usr/bin/curl -ks -H "Authorization: $token" "https://$cnm_ip/onm/api/1.0/devices.json"`; my $devices=decode_json($result); #------------------------------------------------------------------------- # Se itera sobre los dispositivos y segun el tipo de dispositivo # se actualiza el campo de usuario Proveedor foreach my $d (@$devices) { my $proveedor_txt='s30labs'; if ($d->{'devicetype'} =~ /^Serv/) { $proveedor_txt='Proveedor Sistemas'; } elsif ($d->{'devicetype'} =~ /^Serv/) { $proveedor_txt='Proveedor Telco'; } my $proveedor = uri_escape($proveedor_txt); my $id=$d->{'id'}; my $ip=$d->{'deviceip'}; my $r = `/usr/bin/curl -ks -H "Authorization: $token" -X PUT "https://$cnm_ip/onm/api/1.0/devices/$id.json?Proveedor=$proveedor"`; print "$id\t$ip : $r\n" } |