You are not logged in.
Pages: 1
Bonjour
Je viens de remarquer une différence de comportement selon que l'agent s'interface avec le plugin fusioninventory ou glpiinvnetory.
Dans mon cas de figure, j'ai besoin de remonter la liste des admins locaux lors des inventaires fournis par l'agent (j'utilise glpi-agent 1.5).
J'ai modifié l'agent de manière que les données soit bien présentes dan le fichier json / xml généré .
J'ai deux instances (GLPI 9.5. avec fusioninventory , et GLPI10 avec glpiinentory).
Tout se passe correctement avec le plugin fusioninventory, le ficheir xml est bien présent sur le serveur, et les données intégrés
Avec le plugin glpiinentory, le fichier json n'est pas présent sur le serveur.
De plus, l'agent log une erreur
[Wed Jul 12 19:51:48 2023][error] [http client] communication error: 500 Internal Server Error, Unhandled schema entry local_admins
[Wed Jul 12 19:51:48 2023][debug2] format: Zlib
[Wed Jul 12 19:51:48 2023][debug2] [http client] 2D6E5BDE: received message:
{"status":"error","message":"Unhandled schema entry local_admins","expiration":24}
[Wed Jul 12 19:51:48 2023][error] [http client] 2D6E5BDE: server error: Unhandled schema entry local_admins
A première vue, glpiinentory integre un check de cohérence des données remontés par l'agent.
Comment fait on pour intégrer de nouveaux champs ?
Last edited by J2C99 (2023-07-13 10:10:25)
Offline
Le check est présent dans le fichier src/Inventory/Inventory.php
Dans le switch , il faut rajouter un case supplémentaire (case 'local_admins':) tout simplement
final public function processInventoryData()
{
//map existing keys in inventory format to their respective Inventory\Asset class if needed.
foreach ($this->data as $key => &$value) {
$assettype = false;
switch ($key) {
case 'accesslog': //not used
case 'autoupdatesystems_id': //set on host, ignore - not present in specs
case 'envs': //not used
..
default:
if (method_exists($this, 'processExtraInventoryData')) {
$assettype = $this->processExtraInventoryData($key);
}
if ($assettype === false) {
//unhandled
throw new \RuntimeException("Unhandled schema entry $key");
}
break;
Offline
Salut J2C99,
GLPI valide les données en se basant sur les specs JSON du fichier inventory.schema.json : https://github.com/glpi-project/inventory_format
Tu retrouveras ce fichier dans le dossier vendor/glpi-project/inventory_format de GLPI.
Si tu commences à toucher à ce fichier, il faudra que tu le maintiennes à chaque montée de version de GLPI.
Si tu as des modifications intéressantes à partager n'hésites pas à proposer des PRs, pour le format, pour l'agent et pourquoi pas GLPI.
GLPI-Agent developer from Teclib' and GLPI-Network team
Previously FusionInventory-Agent maintainer
Offline
hello @gbougard
j'ai donc trouvé la reponse à mes questions
Il est vrai que si on ajoute des 'spécificites', forcement lors des maj cela est perdu. (schema json, mais aussi inventory.php)
@j2c99, @gbougard
ok pour ajouter un case supplementaire
mais php etant un peu 'obscur' bien que j'ai developpé plugin, j'aiemrais notamment avec GLPIinventory remonté informations dans ce plugin, comme je le faisais dans FI :
vaut-il mieux creer un repertoire 'plugin' au meme niveau que Asset ou un repertoire 'customer' ?
Merci
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
hello @gbougard
j'ai suivi le processus, mais lors de l'import des données, j'ai une erreur dans le php
[11-Apr-2024 16:51:02 Europe/Paris] PHP Warning: foreach() argument must be of type array|object, string given in D:\wamp\www\glpi\src\Blacklist.php on line 548
et
[11-Apr-2024 16:51:02 Europe/Paris] PHP Warning: foreach() argument must be of type array|object, string given in D:\wamp\www\glpi\src\Inventory\Asset\InventoryAsset.php on line 216
foreach ($value as $key => &$val) {
if ($val instanceof \stdClass || is_array($val)) {
continue;
}
erreur que je ne comprends pas
est-ce lié au 'format' des données dans le script perl ?
my $winfo = {
NAME =>$W1
};
$inventory->addEntry(
section => 'Winfo',
entry => $winfo);
ou autre explication ?
Merci
Last edited by ec2311 (2024-04-11 17:02:33)
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
Bonjour @j2c99, @gbougard
Je poursuis sur ce theme car je ne trouve pas de solution 'viable'.
j'ai un script qui doit me remonter qu'une seule donnée.
Auquel cas je termine mon script agent par ajout de la ligne :
$inventory->{content}{INFOSUPP}=$info; (ce qui me semble etre le cas du script bios qui realise un setbios, fonction developpée dans inventory.pm)
le script tourne sans probleme, et dans le fichier xml je vois bien le contenu de ce INFOSUPP : ok
cependant lors de l'execution en automatique
erreur dans le php.log
-> foreach() argument must be of type array|object, string given in D:\wamp\www\glpi\src\Blacklist.php at line 548
-> foreach() argument must be of type array|object, string given in D:\wamp\www\glpi\src\Inventory\Asset\InventoryAsset.php at line 210
Ce n'est pas un probleme de schema, sinon j'aurais une bad request avec erreur 400
Du coup mon inventaire ne remonte pas
En spécifiant un schema différent (tableau) et en modifiant mon script en realisant un addentry : cela fonctionne
MAIS
le souci est que je possede des agent GLPI-agents, mais aussi FI
GLPI-agent : envoie en JSON
FI en xml uniquement
Or, quand on spécifie tableau dans le schema json, il attend alors 'n' lignes (n>1) et donc mon inventaire pour un agent FI (et envoie en tableau) ne passe pas.
Est-ce que l'extends que l'on specifie à la classe a son importance ?
je vois que "class bios extends device"
j'ai spécifié "class suppinfo extends inventoryasset"
Merci pour votre aide
Last edited by ec2311 (2024-04-24 14:36:03)
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
A priori l'erreur du blacklist est lié au fait que mon script perl genere du string (que j'ai defini comme tel dans le schema attendu)
il y a l'air d'avoi un mismatch entre le schema et ce que je genere via le script perl
mais je n'ai pas d'erreur sur le schema lui meme.
au niveau blacklist (548)
je vois mes valeurs remontée en type string, et non comme un object (quand je compare aux autres valeurs dans la log)
certaienement un souci de generation dans le script perl : mais je ne vois pas quoi :
înfo contient toutes les valeurs que je souhaite remonter
$inventory->{content}{SUPPINFO}=$info;
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
lorsque je demande tableau : pas de souci.
du coup, comme mon pb vient du xml et que je n'ai qu'un enreg -> el serveur dit non
De ce fait, je repete mon enregistrement dans le cas du FI -> j'ai donc 2 enregistrements générés
et donc en tableau plus de probleme
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
Bonjour à tous,
Nous sommes plusieurs à vouloir faire les mêmes actions, vous serait-il possible de prendre le temps afin de partager votre travail ?
Merci par avance.
Offline
Bonjour @Dead-red
en fait si on ajoute des informations via l'agent, il faut ajouter format deja cote agent (fichier inventory.pm, se situant C:\Program Files\GLPI-Agent\perl\agent\GLPI\Agent)
Exemple d'ajout :
AJOUT1 => [ qw/NAME VALEUR1 / ]
à mettre à la fin de la liste avec la ponctuation en plus
Ajout du script réalisant les taches souhaitées dans repertoire C:\Program Files\GLPI-Agent\perl\agent\GLPI\Agent\Task\Inventory\Win32
En suite, cote serveur i lfaut 'modifier' le schema json attendu
En effet : on ajoute une information, donc le schéma doit etre modifié
Cette description se trouve : ...glpi\vendor\glpi-project\inventory_format et se nomme inventory.schema.json
faire une sauvegarde du schema original
Il faut ajouter ainsi la description json ajoutée
Puis
il faut modifier les scripts "d'action"
ces derniers se trouvent dans : \glpi\src\Inventory
Faire une copie de inventory.php
Puis ajouter la description dans la focntion processInventoryData()
ici j'ai declaré un AJOUT1 (précédemment) donc il faudraa ajouter un case : 'ajout1'
en $assettype : spécifier le nom du script qui doit réaliser l'action
Ce(s) script(s) se trouvent : \glpi\src\Inventory\Asset
Par contre j'ai un souci :
Je ne parviens par à recupere l'id de l'ordinateur malgré un
$computers_id = $this->item->fields['id'];
voici ce que contient mon 'item'
s:9:"dohistory";b:1;s:7:"devices";a:0:{}s:13:" * usenotepad";b:1;s:6:"fields";a:0:{}s:5:"input";a:0:{}s:7:"updates";a:0:{}s:9
-> fields est vide : pourquoi ?
(je précise que je fais le test via import manuel)
Last edited by ec2311 (2024-10-23 15:33:30)
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
Pages: 1