systemadmin.es > Aplicaciones > Exportar inventario de servidores con racktables a CSV

Exportar inventario de servidores con racktables a CSV

Anteriormente ya hablamos de racktables, se trata de un software para mantener el inventario de servidores con su posición en el rack. En el caso que necesitemos exportar dichos datos a un formato tratable como es CSV veremos que no hay ninguna opción en el software por lo que deberemos mirar en la base de datos.

Podemos exportar fácilmente cualquier query a CSV, el problema siempre radica en poder obtener los datos en una sola query. Tras activar el query-log de MySQl y pedir los datos mediante la interfaz web junté varias partes para finalmente obtener los datos a exportar:

  • Nombre del equipo
  • Serial
  • Lugar donde se encuentra
  • Tipo de hardware

Por ejemplo:

*************************** 157. row ***************************
element_id: 180
      name: DAE
  asset_no: 11ZZZZ1
   rack_id: 5
    row_id: 2
      lloc: CPD-1
  contacto: jordi
    hwtype: EMC CLARiiON CX300

La query es de todo menos eficiente, ya que simplemente he ido añadiendo las partes que me han interesado:

SELECT id as element_id, name, asset_no, 
(select rack_id from RackSpace where object_id = id order by rack_id asc limit 1) as rack_id,
(select row_id from Rack where id = rack_id) as row_id, 
(select name from RackRow where id = row_id) as lloc,
(select AV.string_value from RackObject as RO 
inner join AttributeMap as AM on RO.objtype_id = AM.objtype_id 
inner join Attribute as A on AM.attr_id = A.id 
left join AttributeValue as AV on AV.attr_id = AM.attr_id and AV.object_id = RO.id 
left join Dictionary as D on D.dict_key = AV.uint_value and AM.chapter_id = D.chapter_id 
left join Chapter as C on AM.chapter_id = C.id 
WHERE RO.id=element_id and A.name="contact person") as contacto, 
(select D.dict_value from RackObject as RO 
inner join AttributeMap as AM on RO.objtype_id = AM.objtype_id 
inner join Attribute as A on AM.attr_id = A.id 
left join AttributeValue as AV on AV.attr_id = AM.attr_id and AV.object_id = RO.id 
left join Dictionary as D on D.dict_key = AV.uint_value and AM.chapter_id = D.chapter_id 
left join Chapter as C on AM.chapter_id = C.id WHERE RO.id=element_id and A.name="HW type") as hwtype
INTO OUTFILE "/tmp/inventario.csv" 
FIELDS TERMINATED BY  ',' 
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY  '\\' 
LINES TERMINATED BY '\n' 
from RackObject;

Con esto obtendremos el fichero /tmp/inventario.csv con los datos listos para ser importados en cualquier otro sitio para ser tratados.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>