You are not logged in.
Bonjour,
J'ai été missionné pour faire l'unification de GLPI et Zabbix; je dois synchroniser le parc des machines entre ces deux outils.
Ma question est:
Lorsque une machine est ajoutée au parc dans GLPI (FusionInventory), est-il possible de l'ajouter automatiquement dans Zabbix ?
J'ai cherché pas mal de temps sur le forum et sur différents sites, je n'ai rien trouvé de concret.
J'ai vu que GLPI et Zabbix n'utilisent pas le même langage pour ajouter les machines.. difficile donc.
Merci d'avance pour vos retours.
Last edited by slap (2017-05-17 09:36:08)
Offline
Bonjour,
à partir de la version 9.1 vous avez une api dans GLPI qui vous permet de récupérer les ordinateurs.
zabbix possède aussi une API avec laquelle on peut importer des objets.
un petit script entre les 2 API devrait répondre à votre besoin.
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Bonjour LaDenrée ! Comment va le Glaude ?
Merci pour ta réponse ! Ca me soulage de savoir que cela est possible.
Pourrais-tu m'éclaircir concernant le script ? Me mettre sur la voie..
Merci
Offline
bonjour,
je ne connais pas zabbix j'ai juste vu que l'api permet d'importer des items ( voir les forums zabbix pour ce coté).
pour le "script" j'utilise le php ( parce que çest avec ça que je suis le plus à l'aise mais il y a d'autres techniques...);
j'active l'api glpi et j'autorise l'IP de mon client (idem sur zabbix)
sur un serveur web vous vous creez une page php (client API) qui :
-va vous authentifier
-va récupérer la liste des PC ( ou de n'importe quel item que vous voulez transférer) avec un filtre par date par exemple
-va s'authentifier sur zabbix
-pour chaque PC de la liste GLPI vérifier que le PC existe sur zabbix
-si le pc n'existe pas, envoyer les données à l'api zabbix pour créer le pc.
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
<?php
/***************initialisation de l'api GLPI**************/
$api_url="www.glpi.MONDOMAINE.fr/apirest.php";
$user_token="MONTOKEN";
$app_token="MONAPPTOKEN";
echo "session token<br/>";
$ch = curl_init();
$url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token ."&user_token=".$user_token;
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json,true);
$sess_token = $obj[session_token];
$headers = [
'Content-Type: application/json',
'app-token: ' .$app_token,
'session-token: '.$sess_token
];
/*****get PC************/
$ch = curl_init();
$url=$api_url . "/Computer/";
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json,true);
/******** vous avez maintenant dans $obj la liste des pc GLPI**********/
//sur zabbix : initier l'API
foreach ($obj as $computer)
{
echo "<br/>********".$computer[name]."**********<br/>";
print_r($computer);
/*
ajouter votre code zabbix pour ajouter le nouveau matériel (si n'existe pas déjà)
*/
}
?>
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Merci beaucoup LaDenrée !
Je vais tester tout ça et je reviens vers toi quand j'ai avancé !
Offline
Alors, j'ai exécuté le script en veillant bien a ouvrir l'API de GLPI ainsi qu'a renseigner les tokens.
j'ai quelques erreurs, j'ai essayé de regardé au niveau du script mais je ne suis pas sur de comprendre.
Pourrais-tu m'éclairer ?
$ php C:/Users/USER/Desktop/script.php
session token<br/>PHP Notice: Use of undefined constant session_token - assumed 'session_token' in /home/USER/C:/Users/USER/Desktop/script.php on line 22
PHP Notice: Undefined index: session_token in /home/USER/C:/Users/USER/Desktop/script.php on line 22
PHP Notice: Use of undefined constant name - assumed 'name' in /home/USER/C:/Users/USER/Desktop/script.php on line 46
PHP Warning: Illegal string offset 'name' in /home/USER/C:/Users/USER/Desktop/script.php on line 46
<br/>********E**********<br/>ERROR_APP_TOKEN_PARAMETERS_MISSING
PHP Notice: Use of undefined constant name - assumed 'name' in /home/USER/C:/Users/USER/Desktop/script.php on line 46
PHP Warning: Illegal string offset 'name' in /home/USER/C:/Users/USER/Desktop/script.php on line 46
<br/>********l**********<br/>le paramètre app_token est manquant; Afficher la documentation dans votre navigateur à https://MONDOMAINE/apirest.php/#ERROR_APP_TOKEN_PARAMETERS_MISSING
Last edited by slap (2017-05-17 16:35:26)
Offline
oups, il manque les apostrophes sur $computer['name'] et $obj['session_token']; , j'ai écrit le script un peu vite sans le tester...
(et je n'ai pas ajouté les balises html)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>TEST API</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="Generator" content="Dev-PHP 2.6.1" />
<meta name="Keywords" content="GLPI,API," />
<meta name="Description" content=" Test API" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
</head>
<body>
<h1>test apI</h1>
<?php
/***************initialisation de l'api GLPI**************/
$api_url="www.glpi.MONDOMAINE.fr/apirest.php";
$user_token="MONTOKEN";
$app_token="MONAPPTOKEN";
echo "session token<br/>";
$ch = curl_init();
$url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token ."&user_token=".$user_token;
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json,true);
$sess_token = $obj['session_token'];
$headers = [
'Content-Type: application/json',
'app-token: ' .$app_token,
'session-token: '.$sess_token
];
/*****get PC************/
$ch = curl_init();
$url=$api_url . "/Computer/";
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json,true);
/******** vous avez maintenant dans $obj la liste des pc GLPI**********/
//sur zabbix : initier l'API
foreach ($obj as $computer)
{
echo "<br/>********".$computer['name']."**********<br/>";
print_r($computer);
/*
ajouter votre code zabbix pour ajouter le nouveau matériel (si n'existe pas déjà)
*/
}
?>
</body>
</html>
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Merci!
Ca a réglé une erreur mais le problème du token persiste..
Voici le nouveau log:
$ php C:/Users/USER/Desktop/script.php
session token<br/>PHP Notice: Undefined index: session_token in /home/USER/C:/Users/USER/Desktop/script.php on line 20
PHP Warning: Illegal string offset 'name' in /home/USER/C:/Users/USER/Desktop/script.php on line 44
<br/>********E**********<br/>ERROR_APP_TOKEN_PARAMETERS_MISSING
PHP Warning: Illegal string offset 'name' in /home/USER/C:/Users/USER/Desktop/script.php on line 44
<br/>********l**********<br/>le paramètre app_token est manquant; Afficher la documentation dans votre navigateur à https://DOMAINE/apirest.php/#ERROR_APP_TOKEN_PARAMETERS_MISSING
Last edited by slap (2017-05-17 16:50:09)
Offline
vous n'avez pas mis la page dans /var/www/html/ et appelé la page avec un navigateur ?
php n'a pas récupéré le session token dans la première partie du code, du coup ,'api n'est pas initialisée et plus rien ne marche après;
avez vous activé l'authentification par jeton de session externe sur l'API ?
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Je suis sous Windows et j'utilise Cygwin pour exécuter le script.
Oui, l'authentification par jeton externe est bien activée sur l'API.
Offline
c'est déjà là cette partie là qui ne fonctionne pas pourtant c'est du standard.
si votre extension cURL est installée il ne reste que la définition des variables à vérifier, est ce la bonne url (localhost ?), et les jetons correspondant au client ($apptoken correspondnate à l'IP ?)
$api_url="www.glpi.MONDOMAINE.fr/apirest.php";
$user_token="MONTOKEN";
$app_token="MONAPPTOKEN";echo "session token<br/>";
$ch = curl_init();
$url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token ."&user_token=".$user_token;curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json,true);
print_r($obj);
$sess_token = $obj['session_token'];
en ajoutant le print_r($obj); avez vous une réponse de l'API ?
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Ca à l'air d'être une erreur sur le jeton "user_token".
J'ai du me tromper d'élément, j'ai bien généré "app_token" qui est correct.
Pouvez-vous m'assurer sur la nature de l'élément que je dois mettre pour "user_token", pour éviter les mal-entendus ?
Offline
user token : vous pouvez le recuperer dans
administration>utilisateurs>[myUser]>onglet préférence : Clé d'accès distant
dans un premier temps ne cherchez pas la difficulté :
choisissez un utilisateur avec un profil superadmin par defaut sur la racine en récursif.
ensuite vous pourrez creer un untilisateur APIZABBIX vec un profil "lecture du parc".
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Bonjour,
OK, j'ai créé un utilisateur super-admin sur la racine, j'ai récupéré le user-token.
Actuellement, les logs me retourne le session-token mais les autres erreurs sont toujours la.
PHP Warning: Illegal string offset 'name' in /home/USER/C:/Users/USER/Desktop/script.php on line 45
<br/>********E**********<br/>ERROR_APP_TOKEN_PARAMETERS_MISSING
PHP Warning: Illegal string offset 'name' in /home/USER/C:/Users/USER/Desktop/script.php on line 45
<br/>********l**********<br/>le paramètre app_token est manquant; Afficher la documentation dans votre navigateur à https://DOMAINE/apirest.php/#ERROR_APP_TOKEN_PARAMETERS_MISSING
J'ai aussi créé mon utilisateur APIZABBIX en lecture seule du parc.
Offline
ça avance....
pouvez vous vérifier le contenu de $headers : y a il les 2 jetons de définis?
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Oui ..
Oui les deux jetons sont définis:
- $user_token : (que j'ai récupéré via l'utilisateur super-admin que j'ai créé (test))
- $app_token : (que j'ai récupéré via le client API que j'ai créé dans Configuration\Générale\API (slap)
Last edited by slap (2017-05-18 09:59:59)
Offline
attention dans le $header c'est jeton de session et app pas user.
vous pouvez aussi faire passer les jetons dans l'url :
$ch = curl_init();
$url=$api_url . "/Computer/?Content-Type=%20application/json&app_token=".$app_token ."&session_token=".$sess_token;
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
/**********curl_setopt($ch, CURLOPT_HTTPHEADER, $headers)*******/
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json,true);
print_r($obj);
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Au temps pour moi.
Je suis un peu perdu, visiblement il ne récupère aucun token ..
Quelle est la différence, dans l'url, entre
$url=$api_url . "/initSession?Content...
Et
$url=$api_url . "/Computer/?Content...
Je ne sais pas d'ou vient le problème ..
logs:
$ php C:/Users/USER/Desktop/script.php
session token<br/>PHP Notice: Undefined variable: sess_token in /home/USER/C:/Users/USER/Desktop/script.php on line 14
Array
(
[0] => ERROR_SESSION_TOKEN_MISSING
[1] => le paramètre session_token est manquant ou vide; Afficher la documentation dans votre navigateur à https://DOMAINE/apirest.php/#ERROR_SESSION_TOKEN_MISSING
)
PHP Notice: Undefined index: session_token in /home/USER/C:/Users/USER/Desktop/script.php on line 23
PHP Warning: Illegal string offset 'name' in /home/USER/C:/Users/USER/Desktop/script.php on line 47
<br/>********E**********<br/>ERROR_APP_TOKEN_PARAMETERS_MISSING
PHP Warning: Illegal string offset 'name' in /home/USER/C:/Users/USER/Desktop/script.php on line 47
<br/>********l**********<br/>le paramètre app_token est manquant; Afficher la documentation dans votre navigateur à https://DOMAINE/apirest.php/#ERROR_APP_TOKEN_PARAMETERS_MISSING
Last edited by slap (2017-05-18 10:20:25)
Offline
comme je vous l'ai dit le client que j'ai créé est fait pour un serveur web.
si vous l'utilisez en ligne de commande il faut adapter la syntaxe : c'est bien ce que vous faites ?
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
J'utilise bien un serveur web pour GLPI, je n'utilise pas de ligne de commande.
Offline
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
La page m'affiche la documentation de : GLPi REST API: Documentation
Offline
c'est bien cette adresse exacte que vous avez mis dans $api_url ?
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Oui
Offline