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 2020-05-20 23:56:57

windrake_nc
Member
Registered: 2020-05-20
Posts: 14

API - Modifier l'operatingsystem d'un computer

Bonjour,

Je cherche le moyen de modifier le système d'exploitation d'un ordinateur via une API. J'arrive à faire une "création", c'est à dire : si l'ordinateur n'a pas de système d'exploitation indiqué j'arrive à lui en attribué un.
Du coup je voie bien dans la table glpi_items_operatingsystems l'enregistrement correspondant.

Mais si par la suite je souhaite modifier je n'y arrive pas. Voici mon code (autoit) :

$Id_Pc = '17' ;<-C'est l'ID de mon ordinateur
$Id_Os = '2' ;<- C'est l'ID de mon système d'exploitation

$data = '{"input": {"items_id": "'& $Id_Pc &'","operatingsystems_id": "'& $Id_Os &'","itemtype": "Computer"}}'
Json_Dump($data)

$oHTTP.Open("PUT", $sDomain & "apirest.php/computer/"&$id_pc&"/Item_OperatingSystem/", False)
$oHTTP.SetRequestHeader('Session-Token',$session_token)
$oHTTP.SetRequestHeader('App-Token', $sAppToken)
$oHTTP.SetRequestHeader('cache-control','no-cache')
$oHTTP.SetRequestHeader('Content-Type','application/json')
$oHTTP.Send($data)
$oReceived = $oHTTP.ResponseText
$oStatusCode = $oHTTP.Status


j'ai également essaye avec :
$data = '{"input": {"operatingsystems_id": "'& $Id_Os &'"}}'
$oHTTP.Open("PUT", $sDomain & "apirest.php/computer/"&$id_pc&"/Item_OperatingSystem/", False

et :

$data = '{"input": {"items_id": "'& $Id_Pc &'","operatingsystems_id": "'& $Id_Os &'","itemtype": "Computer"}}'
$oHTTP.Open("PUT", $sDomain & "apirest.php/computer/Item_OperatingSystem/", False

et des dizaines de combinaison mais la je sèche.
J'ai essaye de regarder dans les logs du serveur Nginx lorsque je le fais via l'interface web mais je ne trouve rien de particulier qui peux m'aider.

Si quelqu'un a une idée ou la solution. Merci

Offline

#2 2020-05-21 14:27:07

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

Re: API - Modifier l'operatingsystem d'un computer

ce que je fais en PHP :

GET sur $url="/Computer/".$Id_Pc."/Item_OperatingSystem/";  puis je récupère $Id_OS_PC  :  ça vous l'avez fait (mais attention l'id de la table pivot pas de l'OS)

ensuite
$url="/Item_OperatingSystem/".$Id_OS_PC;  (mettre à jour le lien entre PC et OS)
$fields='{"input": { "items_id": ".$Id_pc.", "itemtype": "Computer","operatingsystems_id":".$idDeMonNouveauOs."}}';

ensuite un PUT (j'ai une fonction glpi_put qui m'ajoute les headers, l'url de base de glpir etc...
$obj=glpi_put($url,$fields);


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

#3 2020-05-22 01:09:39

windrake_nc
Member
Registered: 2020-05-20
Posts: 14

Re: API - Modifier l'operatingsystem d'un computer

Bonjour LaDenrée,

Merci pour ta réponse. j'ai fais des tests mais je n'y arrive toujours pas. Je dois mal comprendre le truc du machin.

J'ai un Computer avec un ID 17 --> glpi_computers.id
J'ai un OS avec un ID 2 --> glpi_operatingsystems.id
J'ai une table de liaison avec un ID 4 --> glpi_items_operatingsystems.id


Si je comprends bien, il faut:
1) connaitre l'ID du PC, dans mon cas 17
2) connaitre l'ID de l'OS actuel, dans mon cas 0. J'ai remis à vide.
3) connaitre l'ID de l'OS futur, dans mon cas 2.
4) connaitre l'ID de la table de liaison, dans mon cas 4.

REQUETTE =
$url="/Item_OperatingSystem/4";
$fields='{"input": { "items_id": "17", "itemtype": "Computer","operatingsystems_id":"2"}}';

J'ai un retour 200 mais de message et pas de changement.
Ou alors c'est simplement une erreur d'écriture. Peux tu me valider la logique ?

Merci

Last edited by windrake_nc (2020-05-22 01:10:31)

Offline

#4 2020-05-22 08:23:03

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

Re: API - Modifier l'operatingsystem d'un computer

voilà exactement ma requête

$url="/Item_OperatingSystem/74";
$fields='{"input": { "items_id": "31", "itemtype": "Computer","operatingsystems_id": "19"}}';

la logique me semble bonne mais j'ai un doute  si l'os actuel est vide est il pertinent de faire un PUT ?  j'aurais plutôt fait un post pour le creer puis un put pour le modifier.


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

#5 2020-05-28 09:41:00

windrake_nc
Member
Registered: 2020-05-20
Posts: 14

Re: API - Modifier l'operatingsystem d'un computer

Bonjour,
Bon j'arrive a faire un GET et un POST ça c'est OK
En revanche je n'arrive pas à faire de PUT (maj).
J'ai donc naturellement contourner le problème avec un DEL puis un POST mais le DEL non plus ne fonctionne pas.
Je ne comprends vraiment pas.

J'ai vérifié, à la création d'un computer il n'y a pas d'OS.
Lorsque qu'il y a association d'un OS au Computer alors il y a un enregistrement dans la table de liaison glpi_items_operatingsystems.
Cette enregistrement existe toujours même si depuis l'interface web ont modifie l'OS avec '-----' soit vide.

Donc dans la majorité des cas juste un POST fonctionne c'est quand même rare de changer d'OS mais le problème est je suppose le même avec la version.
Si quelqu'un à un exemple de DEL et de PUT ou un exemple avec Postman par exemple.
Merci

Offline

Board footer

Powered by FluxBB