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-06-23 10:01:17

bagahe
Member
Registered: 2020-06-23
Posts: 18

[RESOLU]Api REST et dictionnaire logiciel

Bonjour,

Je souhaite effectuer des sauvegardes / ajouts sur mon GLPI (9.4.6) sur le dictionnaire logiciel que je m'apprête à monter (inventaire fait via Ocs Inventory).
J'ai beau chercher je n'arrive pas à obtenir les informations déjà dans la base de données.

Quel est la méthode pour accéder au dictionnaire via l'API ?
Quelle adresse utiliser ?

Merci de votre aide smile

Last edited by bagahe (2020-06-29 14:50:35)

Offline

#2 2020-06-24 08:45:02

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

Re: [RESOLU]Api REST et dictionnaire logiciel

Bonjour,
Avant tout, il faut s'assurer que
- l'API est active
- l'utilisateur qui doit s'y connecter à le droit de le faire
- la machine qui doit se connecter à une IP qui correspond à un "API Client"

Une fois que tout ça est OK, l'API est utilisable via http(s)://[mon Serveur GLPI]/apirest.php/

Après, tout dépend du language utilisé pour se connecter. Perso, je fais tout en Powershell, mais il y a de nombreuses autres possibilités.

Offline

#3 2020-06-24 09:32:40

bagahe
Member
Registered: 2020-06-23
Posts: 18

Re: [RESOLU]Api REST et dictionnaire logiciel

Bonjour et merci smile

l'Api est bien active, je l'interroge via Php et pour la création de ticket, modification de données sur des champs supplémentaires et autre cela fonctionne.
Ce que je n'arrive pas à trouver ce sont les adresses à interroger pour avoir le dictionnaire.

Je sais que pour avoir par exemple la liste des logiciel je dois utiliser http(s)://[mon Serveur GLPI]/apirest.php/Software/[Id software]
Par contre pour atteindre mes dictionnaires rien ne fonctionne, j'ai pas de piste T_T.

L'objectif est de créer un dictionnaire viable et de l'extraire via cette méthode pour pouvoir le recréer à tout moment.

Offline

#4 2020-06-24 10:19:51

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

Re: [RESOLU]Api REST et dictionnaire logiciel

j'arrive à récupérer une règle avec

/apirest.php/ruledictionnarysoftware/41/


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-06-24 16:32:22

bagahe
Member
Registered: 2020-06-23
Posts: 18

Re: [RESOLU]Api REST et dictionnaire logiciel

Bonjour,

Désolé du temps de réponse.

Cela ne fonctionne pas j'avais essayé cela.
En gros cela me retourne du vide :

Session : 88096a44adc7174fff5699883458e2b7
Url : [adresse glpi]/apirest.php/ruledictionnarysoftware/?range=0-10
curl_exec() : Array ( )

Et mon code est le suivant :

$headers =array(
    'Content-Type: application/json',
    'Session-Token: '.$sess_token,
    'App-Token: ' .$SessionEnCours->getApp_Token()
    );           
             
$url=$api_url ."/ruledictionnarysoftware/?range=0-10";    
    
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$json = curl_exec($ch);
$obj = json_decode($json,true);

echo "Url : ".$url."<br>";
echo "curl_exec() : "; 
print_r($obj);
curl_close ($ch);

Offline

#6 2020-06-24 17:12:15

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

Re: [RESOLU]Api REST et dictionnaire logiciel

je ne peux récupérer une règle que si je donne son ID

mais je ne peux pas récupérer la liste les règles.

et même avec ma règle ensuite je n'arrive pas jusqu'aux critères ou actions donc ça a peu d'intérêt.


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

#7 2020-06-25 10:19:55

bagahe
Member
Registered: 2020-06-23
Posts: 18

Re: [RESOLU]Api REST et dictionnaire logiciel

Arf ça aide pas sad
Je vais essayer de creuser le sujet voir si il y a une solution à cela.

Offline

#8 2020-06-25 12:03:45

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

Re: [RESOLU]Api REST et dictionnaire logiciel

Si on passe par l'object "rule", en filtrant sur le sub_type = RuleDictionnarySoftware, on peut obtenir la liste des dictionnaires.
(Je fais tout ça en Powershell)

Get-GlpiItems -Creds $GlpiCreds -ItemType rule | Where-Object {$_.sub_type -eq "RuleDictionnarySoftware"}

id            : 70
entities_id   : 0
sub_type      : RuleDictionnarySoftware
ranking       : 1
name          : TEST
description   : 
match         : AND
is_active     : 1
comment       : 
date_mod      : 2020-06-24 12:59:40
is_recursive  : 0
uuid          : 6d4e60f4-d9d62df8-5ef3315c557fe7.95389470
condition     : 0
date_creation : 2020-06-24 12:56:28
links         : {@{rel=Entity; href=https://servicedesk-poc.police.etat.lu/apirest.php/Entity/0}}

De là, on peut récupérer les ID, les noms, etc.
On peut aussi créer des dictionnaires en ajoutant un objet "rule" qui aurait comme sub_type = RuleDictionnarySoftware

Ensuite, pour gérer les critères et les actions, on peut le faire par les subitem rulecriteria et ruleaction de l'objet rule

Get-GlpiSubItems -Creds $GlpiCreds -ItemType rule -id 70 -Relation rulecriteria

id        : 165
rules_id  : 70
criteria  : manufacturer
condition : 2
pattern   : microsoft
links     : {@{rel=Rule; href=https://servicedesk-poc.police.etat.lu/apirest.php/Rule/70}}

id        : 166
rules_id  : 70
criteria  : name
condition : 2
pattern   : update
links     : {@{rel=Rule; href=https://servicedesk-poc.police.etat.lu/apirest.php/Rule/70}}

Idem pour les actions.

Get-GlpiSubItems -Creds $GlpiCreds -ItemType rule -id 70 -Relation ruleaction

id          : 70
rules_id    : 70
action_type : assign
field       : softwarecategories_id
value       : 2
links       : {@{rel=Rule; href=https://servicedesk-poc.police.etat.lu/apirest.php/Rule/70}}

Dans mon exemple, c'est un dictionnaire qui filtre les softwares qui ont "Microsoft" dans le nom de l'éditeur et "update" dans le nom du software et qui assigne la catégorie id 2 (Microsoft Updates)

Voilà :-)

Offline

#9 2020-06-25 14:02:58

bagahe
Member
Registered: 2020-06-23
Posts: 18

Re: [RESOLU]Api REST et dictionnaire logiciel

Merci Jean Christophe, j'étais dessus justement et j'allais poster ma solution une fois terminée smile

Offline

#10 2020-06-29 14:50:13

bagahe
Member
Registered: 2020-06-23
Posts: 18

Re: [RESOLU]Api REST et dictionnaire logiciel

Bonjour,

Le message peux être clos j'ai réussi à lister les règles et descendre dans les process pour avoir toutes mes informations.
Un grand merci à vous


$ch = curl_init();
$item_SQL = strtolower($item);
$headers =array(
    'Content-Type: application/json',
    'Session-Token: '.$sess_token,
    'App-Token: ' .$SessionEnCours->getApp_Token()
    );           
             
$url=$api_url ."/Rule?expand_dropdowns=true&range=0-500"; 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$json = curl_exec($ch);
$obj_regles = json_decode($json,true);

echo "Url : ".$url."<br>";
echo "curl_exec() : "; 

curl_close ($ch);
$id = "";

$line = 1;

foreach($obj_regles as $col_regles){
    if ($col_regles["sub_type"] == "RuleDictionnarySoftware"){
        $id = $col_regles["id"];
        $name = $col_regles["name"];
        $active = $col_regles["is_active"];
        if ($active == 1) {
            $active = "oui";
        } else {
            $active = "non";
        }
        $comment = $col_regles["comment"];
        $rang = $col_regles["ranking"];

        $url=$api_url ."/RuleAction?range=0-500"; 
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        $json = curl_exec($ch);
        $obj_actions = json_decode($json,true);
        curl_close ($ch);

        foreach($obj_actions as $col_actions){
            if ($col_actions["rules_id"] == $id){
                $action_type = $col_actions["action_type"];
                $field = $col_actions["field"];
                $value = $col_actions["value"];
           
                $url=$api_url ."/RuleCriteria?range=0-500"; 
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        
                curl_setopt($ch, CURLOPT_URL, $url);
        
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        
                $json = curl_exec($ch);
                $obj_criterias = json_decode($json,true);
                curl_close ($ch);
                
                foreach($obj_criterias as $col_criterias){
                    if ($col_criterias["rules_id"] == $id){
                        $criteria = $col_criterias["criteria"];
                        $condition = $col_criterias["condition"];
                        $pattern = $col_criterias["pattern"];
                        
                        $line++;
                        Dictionary::$DictionaryRules[] = new Dictionary($id,$name,$rang,$comment,$active,$action_type,$field,$value,$criteria,$condition,$pattern,$line);
                    }
                }
            }
        }
    }
}

Offline

Board footer

Powered by FluxBB