Zabbix 2.0 API - host.create

Aunque ya hace tiempo que no hablaba acerca de cómo emplear el API de Zabbix, eso no quiere decir que no la estuviese usando, más bien todo el contrario. Durante este tiempo hice numerosas cosas con ella, y la más especial, emplear la versión escrita en Python para interactuar con ella. Puesto que tuve que escribir código en Python, aproveché para recordar y ver cómo evolucionó este lenguaje de programación.
Por si alguien lo necesita, voy a hacer una serie/mini-tutorial acerca de cómo manejar el API de Zabbix (en su versión 2.0), esta vez desde Python.
Lo primero que necesitamos para ello es obtener el código para hablar con el API de Zabbix. Existen varios port's a Pyhton, yo personalmente opté por éste, que es el port a Python de la librería Ruby oficial. Para comenzar a trabajar, lo que necesitamos es crear una carpeta y descargar el código Python necesario (un único fichero). En dicha carpeta también crearemos los script's que vayamos haciendo, para así evitar problemas con las rutas (por simplificar).
shell> mkdir scripts_zabbix
shell> cd scripts_zabbix
shell> wget https://raw.github.com/gescheit/scripts/master/zabbix/zabbix_api.py
Ahora que ya tenemos todo listo, sólo nos queda escribir el pequeño código necesario para crear/actualizar host's en Zabbix. Puesto que deseamos ser ordenados, crearemos un primer fichero de conexión y configuración. Luego un segundo fichero que hará los cálculos y las llamadas. El primer fichero, zabbix_conf.py tendrá el siguiente código.
#!/usr/bin/env python
from zabbix_api import ZabbixAPI

user = 'admin'
password = 'zabbix'
url = 'http://localhost/'
zabbix = ZabbixAPI(server = url)
zabbix.login(user = user, password = password)

templatesList = {
  'windows': '1', # id del template Windows
  'linux': '2',   # id del template Linux
}
soList = {
  'windows': '1', # id del hostgroup Windows
  'linux': '2',   # id del hostgroup Linux
}
Lógicamente, cada uno que adapte la URL, el nombre de usuario y la contraseña a la de su sistema. Acordaros que el usuario que empleéis debe tener acceso a la API. Ahora creamos el segundo fichero, zabbix_host.py que tendrá la siguiente forma,
#!/usr/bin/env python
from zabbix_conf import *
import sys
import getopt
import traceback
import csv
from optparse import OptionParser

use = "Usage: %prog [options]"
parser = OptionParser(usage = use)

parser.add_option("-a", "--add", dest="add", action="store_true", default=False, help="Insert host.")

options, args = parser.parse_args()

if options.add:
  file = csv.reader(open('hosts.list', 'r'), delimiter=' ')
  for index, row in enumerate(file):
    try:
      temporal = {
        "name": row[0].strip(),
        "dns": row[0].strip() + "your_network.net",
        "pais": row[1].strip().upper(),
        "so": row[2].strip()
      }
      groups = [{"groupid": soList[temporal["so"]]}]
      templates = [{"templateid": templatesList[temporal["so"]}]
      profile = {
        "site_country": temporal["pais"],
        "os_full": temporal["so"]
      }
      print str(index + 1) + ":", temporal["name"]
      print "\tGrupos:", groups
      print "\tTemplates:", templates
      print "\tPerfil:", profile

    except:
      print "\tFallo:", data
      continue

    hosts = zabbix.host.get({'filter': {'name': temporal["name"]}, 'output': "extend"})
    if hosts:
      host = {
        'hostid': hosts[0]["hostid"], # línea importante para actualizar
        'host': temporal["name"],
        'groups': groups,
        'templates': templates,
        'inventory': profile,
        'inventory_mode': 0
      }
      r = zabbix.host.update(host);
      if r:
        print "Actualizado correctamente"
      else:
        print "Fallo al actualizar"

    else:
      host = {
        'host': temporal["name"],
        'interfaces': [{'type': 1, 'ip': "0.0.0.0", 'port': 10050, 'useip': 0, 'main': 1, 'dns': temporal["dns"]}],
        'groups': groups,
        'templates': templates,
        'inventory': profile,
        'inventory_mode': 0
      }
      r = zabbix.host.create(host);
      if r:
        print "Añadido correctamente"
      else:
        print "Fallo al crear"
Pues que la idea es automatizar la creación de host's, como podéis observar, al principio del script se lee un fichero, hosts.list, que contiene la siguiente información,
host_1 España Windows
host_2 España Linux
host_3 EE.UU. Linux
Modificar el comportamiento del script no es muy complejo y espero que a alguien le sirva como referencia para comenzar a emplear el API de Zabbix de manera útil.

PD: Recordar que en Python la identación es MUY importante!

La entrada Zabbix 2.0 API - host.create la puedes leer el Puppet Linux.


4 comentarios :

  1. Hola estoy empezando con zabbix 2.2 y tu blog me parece super interesante. ¿Has publicado algo mas sobre el uso del API?

    ResponderEliminar
    Respuestas
    1. Hola,

      Sí, tengo más cosas acerca del uso de zabbix-api. Los puedes ver aquí: http://www.elmundoenbits.com/search/label/zabbix-api

      Eliminar
  2. Muchas gracias por el aporte! Tu blog es bastante interesante.

    ResponderEliminar
    Respuestas
    1. Gracias a ti por la visita y si te sirvió algo de lo que hay, genial! :-)

      Eliminar

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios