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"
}