You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2017-05-17 09:34:38

slap
Member
Registered: 2017-05-15
Posts: 46

Unification du parc GLPI et Zabbix

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. smile

Last edited by slap (2017-05-17 09:36:08)

Offline

#2 2017-05-17 09:49:51

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

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

#3 2017-05-17 10:10:52

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

Bonjour LaDenrée ! Comment va le Glaude ? wink

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 smile

Offline

#4 2017-05-17 10:19:41

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

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

#5 2017-05-17 10:40:17

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

<?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

#6 2017-05-17 10:45:54

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

Merci beaucoup LaDenrée !

Je vais tester tout ça et je reviens vers toi quand j'ai avancé !

Offline

#7 2017-05-17 16:32:56

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

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

#8 2017-05-17 16:39:32

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

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

#9 2017-05-17 16:46:59

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

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

#10 2017-05-17 17:04:16

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

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

#11 2017-05-17 17:12:48

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

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

#12 2017-05-17 17:22:53

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

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

#13 2017-05-17 17:45:19

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

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

#14 2017-05-17 20:11:56

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

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

#15 2017-05-18 09:39:44

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

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

#16 2017-05-18 09:56:05

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

ç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

#17 2017-05-18 09:59:29

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

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

#18 2017-05-18 10:09:06

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

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

#19 2017-05-18 10:20:05

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

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

#20 2017-05-18 10:32:38

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

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

#21 2017-05-18 10:38:20

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

J'utilise bien un serveur web pour GLPI, je n'utilise pas de ligne de commande.

Offline

#22 2017-05-18 10:44:49

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

reprenons du début :

que vous affiche la page :

www.glpi.MONDOMAINE.fr/apirest.php


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

#23 2017-05-18 10:46:14

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

La page m'affiche la documentation de : GLPi REST API: Documentation

Offline

#24 2017-05-18 10:52:16

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Unification du parc GLPI et Zabbix

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

#25 2017-05-18 10:53:01

slap
Member
Registered: 2017-05-15
Posts: 46

Re: Unification du parc GLPI et Zabbix

Oui

Offline

Board footer

Powered by FluxBB