You are not logged in.
Hello,
Je cherche une solution pour ajouter un port réseau à un device. Idéalement, si je pouvais ajouter le port avec la mac et l'IP directement à un device, ce serait super.
N'ayant pas encore trouvé comme faire, j'avance par petits pas...
Quand j'essaye d'ajouter le port réseau (sans encore le lier) j'obtiens un message me disant que je n'ai pas le droit. J'ai fait le test avec un login super-admin avec le même résultat
Invoke-RestMethod : ["ERROR_GLPI_ADD","You don't have permission to perform this action."]
Dans les détails de l'ajout du port, je spécifie uniquement son nom et la mac.
Si vous avez une idée, je suis preneur.
Bonne journée,
JC
Offline
Please, help me
Offline
il faut au moins définir à quel type et à quel element vous voulez l'associer, ainsi que le type de port à ajouter
$input='{ "input": {"items_id": "179"
,"itemtype": "NetworkEquipment"
,"entities_id": "2"
,"is_recursive": "0"
,"logical_number": "01"
,"name": "portbyAPI"
,"instantiation_type": "NetworkPortEthernet"
}
}';
$url=$api_url."/Networkport/";
Trouver la panne avant de réparer...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
Merci!..
Je vais tester ça et je reviens :-)
Offline
Fantastique!.. Ca marche :-)
Une dernière question pour la route... Est-ce qu'il est possible d'ajouter l'IP en même temps? Jusque là, j'ai ajouté la MAC et ça fonctionne au poil.
Offline
Bon...
Ca fait un bon bout de temps que je teste tout ce que je peux et je ne parviens pas à trouver les infos relatives au Network Names (et, surtout, aux IPs associées).
J'arrive à récupérer le nom du network name mais pas les IP.
Une idée de comment lire/écrire ça?
Merci!
Offline
Hello.
Dans les tests unitaires de GLPI, j'ai développé l'ajout d'un port éthernet avec nom réseau + IP:
CF : https://github.com/glpi-project/glpi/bl … #L538-L565
Vous pouvez ignorer le commentaire sur le _xmlrpc_fckng_fix qui ne concerne que l'api xmlrpc et non l'api rest
Offline
Merci pour cette réponse qui fait renaître l'espoir :-)
De mon côté, je fais du Powershell (c'est le seul language de scripting que je connais).
J'ai fait un petit module qui permet d'utiliser des fonctions de base.
Entre autre, la fonction "add-glpitiem"
Function Add-GlpiItem {
param($ItemType,$Details,$Creds)
$AppURL = $Creds.AppURL
$UserToken = $Creds.UserToken
$AppToken = $Creds.AppToken
# Details are expected to be an object.
# You can create it with
# $Details = @{
# name="PC99999"
# serial="01.02.03.04.05"
# }
$Details = @{input=$Details}
$SessionToken = Get-GLPISessionToken
$json = ConvertTo-Json $Details
$AddResult = Invoke-RestMethod "$AppURL/$($ItemType)" -Method Post -Headers @{"session-token"=$SessionToken.session_token; "App-Token" = "$AppToken"} -Body $json -ContentType 'application/json'
Invoke-RestMethod "$AppURL/killSession" -Headers @{"session-token"=$SessionToken.session_token; "App-Token" = "$AppToken"}
return $AddResult
}
Pour l'utiliser, j'ai quelque chose comme :
$NetworkPortDetails = @{
items_id="340"
itemtype="Phone"
name="LAN"
entities_id="0"
is_recursive="0"
logical_number="1"
instantiation_type="NetworkPortEthernet"
NetworkName_name="plop"
NetworkName_fqdns_id="0"
NetworkName_ipaddresses = {"10.117.18.127"}
_create_children = "true"
}
Add-GlpiItem -ItemType Networkport -Creds $GlpiCreds -Details $NetworkPortDetails
Ca ne produit pas d'erreur, le port est créé, mais je n'ai pas l'IP.
Le NetworkName est bien là avec son nom, mais pas l'IP.
Je pense que ça vient du fait que ipaddress doit être un array. Je me trompe?
Offline
Tiens, au fait...
Quand je récupère l'objet NetworkPort, je n'ai pas les IP qui existeraient. Je m'y prends comme un manche? (C'est fort probable...)
Offline
Attention NetworkName__ipaddresses contient 2 _ !
Offline
autre chose, il est impératif d'avoir la clef -1 en face de l'ip, c'est un peu complexe, mais pour expliquer vite, le framework de glpi ne fait les ajouts que sur les clefs negatives.
Cf : https://github.com/glpi-project/glpi/bl … #L259-L271
Offline
Merci!..
Je suis parvenu à un résultat :-)
Je savais que j'étais tout proche.
Je suppose que la clé négative permet l'ajout à n+1 pour ne pas avoir de doublon. En revanche, je présume que je peux éditer une entrée en utilisant le bon ID. Je vais tester.
Offline
Bon...
Je sais maintenant écrire mais je ne parviens pas à lire la(les) IP(s).
Je récupère le port réseau
id : 737386
items_id : 340
itemtype : Phone
entities_id : 0
is_recursive : 0
logical_number : 0
name : LAN
instantiation_type : NetworkPortEthernet
mac : 48:7a:55:01:88:d0
comment :
is_deleted : 0
is_dynamic : 0
date_mod : 2019-01-21 11:28:45
date_creation : 2019-01-21 11:28:45
links : {@{rel=Phone; href=https://glpi.****.**/apirest.php/Phone/340}, @{rel=Entity; href=https://glpi.****.**/apirest.php/Entity/0}}
Mais je ne sais pas comment arriver aux Network Names.
Offline
alors vraiment de tête, j'ai pas le code sous les yeux, ca devrait etre
apirest.php/NetworkName/:id/IPAddress
ou
apirest.php/NetworkName/:id/IPAddress_IPNetwork
à tester.
Offline
Merci!
Je confirme que c'est bien apirest.php/NetworkName/:id/IPAddress :-)
En principe, c'est ma dernière question.
Je ne parviens pas à faire un update du port réseau pour ajouter l'IP.
Je sais ajouter un nouveau port avec l'IP et la mac mais je ne sais pas ajouter l'IP si la mac existe déjà.
Je fais un
$NetworkPortDetails = @{
id="$NetworkPort.id"
NetworkName_fqdns_id="0"
NetworkName__ipaddresses = @{"-1"="$IP"}
}
Update-GlpiItem -ItemType Networkport -Creds $GlpiCreds -Details $NetworkPortDetails
Je me sens vraiment con avec ce problème.
Depuis des mois, je manipule GLPI depuis mon module powershell avec un certain succès et ces foutues adresses IP me résistent.
Offline
Si avez déjà un NetworkName pour votre équipement,
il faut POST une ipadress directement avec ces params
- itemtype = NetworkName
- items_id = id du network name
- name = l'ip
Offline
Merci encore pour le soutien et la patience!!
Je sens que je touche au but. Il doit encore me manquer un tout petit bout...
Si je fais
$IPDetails = @{
name="1.2.3.4"
itemtype="NetworkName"
items_id="737386"
}
Add-GlpiItem -ItemType ipaddress -Creds $GlpiCreds -Details $IPDetails
Ca me retourne
Invoke-RestMethod : ["ERROR_GLPI_ADD","You don't have permission to perform this action."]
En gros, le même genre de message que j'avais au tout début.
Je suis retourné lire ce qui avait été changé pour résoudre le souci de création de port à l'origine de mon topic mais je ne sais pas ce qui manque ici :-/
Offline
-ItemType IPAddress
désolé j'ai écris mon message surement trop vite
Offline
J'ai toujours le même problème de ["ERROR_GLPI_ADD","You don't have permission to perform this action."] malgré le changement de ItemType.
Désolé pour tout ça, je me rends bien compte que c'est casse-pied.
J'ai l'impression que la méthode pour lire, modifier, effacer ou ajouter un adresse IP ne suit pas du tout les habitudes d'usage de l'API.
Et puisque mes compétence en développement sont nulles, je n'ai pas la possibilité de me plonger dans le code pour savoir comment retrouver les infos dont j'ai besoin. C'est hyper frustrant :-(
Offline
J'ai toujours le même problème de ["ERROR_GLPI_ADD","You don't have permission to perform this action."] malgré le changement de ItemType.
Autre solution, faire un update (PUT) du network port et de la même façon que lors de l'ajout de ce dernier, ajouter un array NetworkName__ipaddresses avec un [-1 => ip] dedans
J'ai l'impression que la méthode pour lire, modifier, effacer ou ajouter un adresse IP ne suit pas du tout les habitudes d'usage de l'API.
C'est tout a fait le cas et absolument pas lié à l'API, c'est aussi le cas dans le cœur que cette partie soit pénible à utiliser.
Offline
Thank you for sharing your experience guys this helps a lots. keep it up
Offline
J'ai toujours le même problème de ["ERROR_GLPI_ADD","You don't have permission to perform this action."] malgré le changement de ItemType.
Autre solution, faire un update (PUT) du network port et de la même façon que lors de l'ajout de ce dernier, ajouter un array NetworkName__ipaddresses avec un [-1 => ip] dedans
Juste pour info, cette méthode ne fonctionne pas.
Pas de message d'erreur. Le nom du network name est bien ajouté, mais pas l'IP.
Offline
J'ai compris!..
Je n'ai pas encore de solution, mais je viens de me rendre compte que la gestion est différente entre les device réseaux et les téléphones!!
Pour les devices réseaux, c'est
Device
└ Network Name(s)
Pour les phones, c'est
Phone
└ Network Port(s)
└Network Name(s)
Du coup, toute notre discussion prend un autre sens.
Franchement, c'est chiantissime.
Offline
Bonjour,
Je remonte un peu ce sujet...
Avez-vous réussi à mettre à jour l'adresse IP d'un équipement avec l'API ?
Je bloque également sur ce point depuis quelques temps maintenant.
La gestion réseau est quand même extrêmement complexe comparé au vielle version (multiple table,...).
J'arrive bien à ajouter une IP ou la mettre à jour dans la partie NetworkName mais impossible de faire la liaison avec un équipement...
Si vous avez réussi, je suis preneur de votre solution... (j'en suis au point de vouloir passer par des requêtes SQL, au moins on peut récupérer les infos via le mode debug).
Bonne soirée,
Offline
Bonjour.
Comme indiqué en haut, la suite de tests unitaires de l'api contiennent un test concernant l'ajout de port réseaux à un ordinateur.
CF: https://github.com/glpi-project/glpi/bl … #L538-L565
Offline