Vamos a comenzar hablando de la función más simple que hay, que es CHost::get. Simple en cuanto que sólo devuelve los valores de un host si éste existe. Como su propio nombre indica, get. Pues bien, esta función es importante por que puede ayudar a saber si un host ya existe o no y por lo tanto, permite evitar llamadas más complejas a la API. Si un host no existe, ¿por qué lo vamos a intentar borrar? Y si existe, ¿por qué lo vamos a intentar volver a crear? A mayores, la función get nos devuelve otros valores de interés del host, ya que permite realizar un filtrado por algunos datos. La forma de emplearla es muy sencilla,
$host = CHost::get(array('filter' => array('host' => 'nombre')));
Con esto conseguiremos una salida similar a ésta, al pasarle un nombre de host que exista.
Array ( [0] => Array ( [hostid] => 35 ) )Y vacío en caso contrario,
Array ( )
Gracias a ello, podremos realizar condiciones de este tipo,
$host = CHost::get(array('filter' => array('host' => 'nombre'))); if(!empty($host)) { }
Aunque llegados a este punto, lo que realmente no interesa no es únicamente saber el id del equipo, sino toda la información que éste tiene dentro. Para saber esto hay que realizar la llamada al get con un par de parámetros extra.
$hosts = CHost::get(array('filter' => array('host' => 'nombre'), 'select_profile' => true, 'extendoutput' => API_OUTPUT_EXTEND));
Y aquí la salida sí contiene toda la información que se espera del host.
Array ( [0] => Array ( [profile] => Array ( [hostid] => 35 [devicetype] => 01 [name] => [os] => Linux [serialno] => [tag] => 12596 [macaddress] => [hardware] => [software] => Apache [contact] => infor@domain.com [location] => [notes] => ) [profile_ext] => Array ( ) [maintenances] => Array ( [0] => Array ( [maintenanceid] => 0 ) ) [hostid] => 35 [proxy_hostid] => 0 [host] => nombre [dns] => nombre.domain.com [useip] => 0 [ip] => 0.0.0.0 [port] => 10050 [status] => 0 [disable_until] => 0 [error] => [available] => 0 [errors_from] => 0 [lastaccess] => 0 [inbytes] => 0 [outbytes] => 0 [useipmi] => 0 [ipmi_port] => 623 [ipmi_authtype] => 0 [ipmi_privilege] => 0 [ipmi_username] => [ipmi_password] => [ipmi_disable_until] => 0 [ipmi_available] => 0 [snmp_disable_until] => 0 [snmp_available] => 0 [maintenanceid] => 0 [maintenance_status] => 0 [maintenance_type] => 0 [maintenance_from] => 0 [ipmi_ip] => [ipmi_errors_from] => 0 [snmp_errors_from] => 0 [ipmi_error] => [snmp_error] => ) )
Si no se filtran las salidas, get devolverá todos los hosts que Zabbix esté a monitorizar, de ahí que lo veamos con el filtro, ya que puede resultar más útil. Aunque por ejemplo, si lo que nos interesa es saber el número de hosts que hay en Zabbix, podríamos ejecutarlo sin filtro alguno
$hosts = CHost::get();
obteniendo en el array de salida el id de todos los equipos. Útil si luego tenemos que acceder a todos ellos para alguna tarea.
No hay comentarios :
Publicar un comentario