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 2021-03-23 10:02:01

Sico31
Member
Registered: 2018-09-24
Posts: 595

Régle de lieu et regexp

Bonjour,
je cherche à attribuer de façon automatique le lieu d'un asset inventorié lors d'une découverte/inventaire basé sur une plage IP ; ce sont des imprimantes.
J'ai 6 plages différentes pour 6 lieux différents. (10.35.XX.(0 à 50))
J'ai donc créée une regle qui se base sur l'IP avec un regexp, mais si ce regexp fonctionne sur les sites de vérification (regex101 notamment), cela ne passe plus sous GLPI/Fusion.
Ce qui, vous l'avouerez, n'est pas le plus pratique puisque GLPI n'apporte (encore une fois) aucune aide.

Je cherche donc à attribuer un lieu si mon matos inventorié se trouve dans la plage 10.35.10. (0 à 50), j'ai essayé différentes règles qui marchaient partiellement (seuls les nombres étaient pris en compte, pas les chiffres) ; celle-ci étant sensé tout prendre correctement :
/10.35.10.[0-9]{1}$|[1-4]{1}[0-9]{1}$|50/

Si vous avez trouvé une solution chez vous, je suis preneur smile

Merci à vous et excellente journée


Manger un castor, c'est sauver un arbre.
Quand on est mort, on ne sait pas qu'on est mort ; c'est pour les autres que c'est difficile. Quand on est con, c'est pareil !

Offline

#2 2021-03-23 10:14:49

Jean-Christophe
Moderator
Registered: 2007-08-22
Posts: 734

Re: Régle de lieu et regexp

Ce sont des réseaux différents ?
Ou c'est un seul réseau plat et attribution des IP en fonction des lieux est manuelle ?
Il y a quoi après l'IP .50 ?

Ce qui me chiffonne, c'est que 50, ça ne correspond à rien dans la définition des réseaux...
64, OK, mais 50 ??

Offline

#3 2021-03-23 12:45:47

Sico31
Member
Registered: 2018-09-24
Posts: 595

Re: Régle de lieu et regexp

j'ai 6 plages différents : 10.35.10.0 à 10.35.10.50 correspond au lieu A
10.35.20.0 à 10.35.20.50 correspond au lieu B
10.35.30.0 à 10.35.30.50 correspond au lieu C
etc

Ou c'est un seul réseau plat et attribution des IP en fonction des lieux est manuelle ?

Je ne comprends pas la question (on est que mardi matin en mars aussi ... je sors de mon hibernation)


Manger un castor, c'est sauver un arbre.
Quand on est mort, on ne sait pas qu'on est mort ; c'est pour les autres que c'est difficile. Quand on est con, c'est pareil !

Offline

#4 2021-03-23 13:27:55

Jean-Christophe
Moderator
Registered: 2007-08-22
Posts: 734

Re: Régle de lieu et regexp

Une plage réseau est toujours définie par le masque de sous-réseau appliqué.
Ici, je suppose que les machines ont un masque de sous-réseau en 255.255.255.192 et donc, ça couvre 64 IP de x.y.z.0 à x.y.z.63
Il n'est techniquement pas possible de faire des plages d'IP limitées à 50 adresses.

Du coup, la règle pourrait être
IP Address         Is CIDR            10.35.10.0/26

10.35.10.0/26 couvre de 10.35.10.0 -> 10.35.10.63

Je t'invite à faire un tour ici : https://www.site24x7.com/tools/ipv4-sub … lator.html
Tu pourrais faire les essais de notation et de taille de sous-réseau.

PS : CIDR veut dire Classless Inter-Domain Routing. C'est une manière de noter un réseau et sa taille (mais ce n'est pas la seule).

Offline

#5 2021-03-23 14:03:05

Sico31
Member
Registered: 2018-09-24
Posts: 595

Re: Régle de lieu et regexp

Je vais regarder ça , merci smile


Manger un castor, c'est sauver un arbre.
Quand on est mort, on ne sait pas qu'on est mort ; c'est pour les autres que c'est difficile. Quand on est con, c'est pareil !

Offline

#6 2021-04-13 08:47:58

FredoSG
Member
Registered: 2021-04-12
Posts: 13

Re: Régle de lieu et regexp

Bonjour,

J'utilise GLPI 9.5.4 avec FusionInventory 9.5+3.0 sous Debian (dans AWS) et je fais face au meme probleme avec des regles de lieux qui ne fonctionnent pas.

Pour vous donnez un peu de contexte, nous avons les memes noms de serveurs dans une centaine de datacenters a travers le monde et voudrions pouvoir assigner automatiquement le lieu correct via une regle FusionInventory.
Deux parametres peuvent me permettre de determiner le lieu:
1) Soit le FQDN (ie SRVXX.PAYSYY.NOM_DE_DOMAINE.COM) ou le nom de domaine (ie PAYSYY.NOM_DE_DOMAINE.COM)
2) Soit la plage reseau (Le serveur est connecte a plusieurs reseaux, un ou deux reseaux prives et un public. Il 'sagit ici du sous-reseau IP publique)

J'ai essaye de creer 4 regles pour detecter le lieux mais aucune ne semble etre prise en compte or lorsque je teste ces regles directement dans la regle toutes fonctionnent:
1) Domain    contains    PAYSYY.NOM_DE_DOMAINE.COM
2) Domain    contains    PAYSYY
3) Address IP    is CIDR    180.XX.YY.80/28
4) Subnet    is not CIDR    180.XX.YY.80/255.255.255.240

J'ai verifie le fichier XML remonte a GLPI par FusionInventory:
1) Mon domaine est bien present dans les proprietes <WORKGROUP/>, <FQDN/> et <DEVICEID/>
2) Le sous reseau est bien present dans la propriete <IPSUBNET/> mais pas avec la notation CIDR, juste sous la forme X.X.X.X, le masque de sous reseau est lui bien present dans la propriete <IPMASK> au sein de la meme propriete <NETWORKS/>. A noter qu'il existe 11 cartes reseaux (dont une virtuelle pour du bonding), je ne suis pas sur que cela soit la source du probleme.

Est-ce qu'il existe un moyen de savoir quelles regles FusionInventory sont appliquees lors de l'import d'un nouvel element? Est-ce qu'il existe un fichier de log ou un mode verbose pour debugger le moteur de regles?

Merci pour votre aide,

Last edited by FredoSG (2021-04-13 08:49:05)

Offline

#7 2021-04-13 11:58:43

Jean-Christophe
Moderator
Registered: 2007-08-22
Posts: 734

Re: Régle de lieu et regexp

Si la machine a plusieurs IP, je ne sais pas comment c'est géré pour les règles. Je n'ai jamais creusé jusque là.

Par contre, sur base du nom de domaine, ça devrait passer.
En testant la règle (en lui donnant le nom de domaine "à la main"), est-ce que c'est correctement interprété ?

Offline

#8 2021-04-13 12:40:57

FredoSG
Member
Registered: 2021-04-12
Posts: 13

Re: Régle de lieu et regexp

Bonjour Jean Christophe,

Oui en testant la regle a la main via la fonction "Test" cela fonctionne bien, ma regle est validee.

En analysant le fichier de log disponible sous /var/www/html/glpi/files/_log/php-errors.log j'ai constate l'erreur suivante:
[2021-04-13 04:23:48] glpiphplog.CRITICAL:   *** Uncaught Exception ArithmeticError: Bit shift by negative number in /var/www/html/glpi/plugins/fusioninventory/inc/inventoryrulelocation.class.php at line 364
  Backtrace :
  inc/rule.class.php:1526                            PluginFusioninventoryInventoryRuleLocation->checkCriteria()
  inc/rule.class.php:1417                            Rule->checkCriterias()
  inc/rulecollection.class.php:1437                  Rule->process()
  plugins/fusioninventory/inc/toolbox.class.php:814  RuleCollection->processAllRules()
  ...ry/inc/inventorycomputerinventory.class.php:330 PluginFusioninventoryToolbox::addLocation()
  ...ry/inc/inventorycomputerinventory.class.php:102 PluginFusioninventoryInventoryComputerInventory->sendCriteria()
  ...fusioninventory/inc/communication.class.php:227 PluginFusioninventoryInventoryComputerInventory->import()
  ...fusioninventory/inc/communication.class.php:461 PluginFusioninventoryCommunication->import()
  plugins/fusioninventory/front/communication.php:92 PluginFusioninventoryCommunication->handleOCSCommunication()
  plugins/fusioninventory/index.php:59               include_once()

J'ai donc supprime toutes les regles et recree la regle suivante, avec plus de criteres (en utilisant l'operateur logique OR)
Address IP    is CIDR    180.XX.YY.80/28
Subnet    is CIDR    180.XX.YY.80/28
Domain    contains    xx


Je n'ai plus d'erreurs dans les logs mais cela ne fonctionne toujours pas lorsque la machine est importe.
L'import se passe bien, mais le lieu n'est pas applique.

Paradoxalement ma regle de dictionnaire pour classifier le modele de serveur fonctionne sans probleme.

Je ne suis pas sur de savoir ce qui ne fonctionne pas, avez-vous des pistes? Est-ce qu'il existe d'autres fichiers de logs plus detailles qui montrerait comment les regles sont appliquees?

Merci a vous,

Last edited by FredoSG (2021-04-13 12:42:01)

Offline

#9 2021-04-14 04:23:28

FredoSG
Member
Registered: 2021-04-12
Posts: 13

Re: Régle de lieu et regexp

Bonjour,

J'ai continue mes tests. J'ai pu confirmer que le moteur de regle fonctionnait correctement.
J'ai teste la regle avec le nom du serveur et le lieu a ete attribue sans probleme.
J'ai ensuite teste avec une des addresses IP locale (Address IP is CIDR192.168.0.0/24) et cela a tres bien fonctionne.

Ceci prouve que l'adresse IP publique n'est pas recuperee par GLPI (par contre elle se trouve bien dans le fichier XML remonte par FI). Est-ce que GLPI limite le nombre d'IP qu'il recupere de la part de FI?

J'ai teste d'autres regles avec le domaine mais quelquesoit la partie du fqdn utilisee, la regle est totalement ignoree.

Selon vous est-ce que le probleme vient de Fusion Inventory ou est ce que cela vient de GLPI?

Merci pour votre aide,

Last edited by FredoSG (2021-04-14 09:15:27)

Offline

#10 2021-04-15 09:22:23

FredoSG
Member
Registered: 2021-04-12
Posts: 13

Re: Régle de lieu et regexp

Bonjour,

Comme le domaine et le reseau IP publique n'etaient pas detecte via les regles de lieu, nous avons decide d'utilise les tags comme solution de contournement.

Cote serveur (CentOS 7)
Dans /etc/fusioninventory/agent.cfg
tag=LOCATION=XXYY

Dans GLPI, creer une regle avec les parametres suivants:
Critere: FusionInventory tag    regular expression matches    /LOCATION\=Votre Expression Reguliere/
Action: Location    Assign the value from regular expression    #0

Cette regle permet de creer automatiquement le lieu specifie via le tag pour chaque serveur.

Qui dois-je contacter pour signaler ce bug de champs non detecte?

Merci a vous,

Last edited by FredoSG (2021-04-16 04:33:13)

Offline

#11 2021-04-16 05:44:20

FredoSG
Member
Registered: 2021-04-12
Posts: 13

Re: Régle de lieu et regexp

Bonjour,

Apres avoir lu le code source, un de mes collegues a constate les  points suivants:
- Le domaine est bien detecte lorsqu'on utilise les regles d'entites (contrairement au regles de lieu)
- Le domaine est donc bien reconnu lorsque les regles d'entites sont interpretees.
- Au moment ou les regles de lieu sont interepretees, le domaine n'est pas assigne. Est-ce qu'il y a une raison particuliere pour cela?

En parallele pour aider ceux qui font face au meme probleme, il existe deux solutions de contournements aux regles de lieu lorsque l'on veux  assigner un lieu par rapport au nom de domaine:
1) Utiliser un tag (comme je l'ai mentionne dans mon precedent post)
2) Utiliser les regles d'entites a la place (avec lesquels il est egalement possible d'assigner un lieu).

Merci,

Last edited by FredoSG (2021-04-16 05:51:22)

Offline

Board footer

Powered by FluxBB