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 2024-09-13 08:54:31

Elainay
Member
Registered: 2024-08-02
Posts: 2

Transfert de tickets par API

Bonjour à tous et à toutes.

Je viens lancer une bouteille à la mer car je suis face à un problème que je n'arrive pas à résoudre.

On m'a demandé de refaire de zéro notre serveur GLPI (suite à des incohérences) mais j'ai besoin de transférer tous les tickets existant de l'ancien serveur (on va l'appeler Serveur 1 avec GLPI 10.0.7) vers le nouveau serveur (Serveur 2 avec GLPI 10.0.16).

Je voulais passer par l'API et jusqu'à maintenant j'arrive à exporter mes tickets dans un fichier json sur le premier serveur avec cette suite de commandes :

Pour initialiser la session

curl -X GET \
	-H 'Content-Type: application/json' \
	-H "Authorization: user_token HWsRgP488iuv8IguH5wvTOlWWf0OGfNmfRRL2jmg" \
	-H "App-Token: PSROA8h4vH2GsemIBuRlqyNXoBpmSHaQdOXwZzSy" \
'http://Serveur1/glpi/apirest.php/initSession' 

Pour récupérer les tickets et les exporter dans un json sous forme de tableau

curl -X GET http://Serveur1/glpi/apirest.php/Ticket \
        -H 'Content-Type: application/json' \
        -H 'App-Token: PSROA8h4vH2GsemIBuRlqyNXoBpmSHaQdOXwZzSy' \
        -H 'Authorization: user_token HWsRgP488iuv8IguH5wvTOlWWf0OGfNmfRRL2jmg' \
        -H 'Session-Token: vkpee8vl258v4dttu4i5a54c7q' \
        -o tickets_exportes.json 
jq 'map(del(.id, .entities_id, .date_mod, .users_id_lastupdater))' tickets_exportes.json > tickets_pour_import.json

A ce moment la il me crée le fichier sous ce format :

[
  {
    "name": "problème FAX",
    "date": "2023-04-06 11:40:16",
    "closedate": "2023-06-16 14:26:54",
    "solvedate": "2023-06-16 14:26:54",
    "takeintoaccountdate": "2023-04-07 14:05:05",
    "status": 6,
    "users_id_recipient": 123,
    "requesttypes_id": 1,
    "content": "<p>certains faxes  ne passent pas </p>\n<p>problème de connexion </p>",
    "urgency": 3,
    "impact": 3,
    "priority": 3,
    "itilcategories_id": 2,
    "type": 1,
    "global_validation": 1,
    "slas_id_ttr": 0,
    "slas_id_tto": 0,
    "slalevels_id_ttr": 0,
    "time_to_resolve": null,
    "time_to_own": null,
    "begin_waiting_date": null,
    "sla_waiting_duration": 0,
    "ola_waiting_duration": 0,
    "olas_id_tto": 0,
    "olas_id_ttr": 0,
    "olalevels_id_ttr": 0,
    "ola_ttr_begin_date": null,
    "internal_time_to_resolve": null,
    "internal_time_to_own": null,
    "waiting_duration": 6045230,
    "close_delay_stat": 99168,
    "solve_delay_stat": 99168,
    "takeintoaccount_delay_stat": 95089,
    "actiontime": 0,
    "is_deleted": 0,
    "locations_id": 63,
    "validation_percent": 0,
    "date_creation": "2023-04-06 11:40:16",
    "ola_tto_begin_date": null,
    "links": [
      {
        "rel": "Entity",
        "href": "http://srv-glpi10/glpi/apirest.php/Entity/35"
      },
      {
        "rel": "User",
        "href": "http://srv-glpi10/glpi/apirest.php/User/24"
      },
      {
        "rel": "User",
        "href": "http://srv-glpi10/glpi/apirest.php/User/123"
      },
      {
        "rel": "RequestType",
        "href": "http://srv-glpi10/glpi/apirest.php/RequestType/1"
      },
      {
        "rel": "ITILCategory",
        "href": "http://srv-glpi10/glpi/apirest.php/ITILCategory/2"
      },
      {
        "rel": "Location",
        "href": "http://srv-glpi10/glpi/apirest.php/Location/63"
      },
      {
        "rel": "Document_Item",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/Document_Item/"
      },
      {
        "rel": "TicketTask",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/TicketTask/"
      },
      {
        "rel": "TicketValidation",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/TicketValidation/"
      },
      {
        "rel": "TicketCost",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/TicketCost/"
      },
      {
        "rel": "Problem_Ticket",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/Problem_Ticket/"
      },
      {
        "rel": "Change_Ticket",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/Change_Ticket/"
      },
      {
        "rel": "Item_Ticket",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/Item_Ticket/"
      },
      {
        "rel": "ITILSolution",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/ITILSolution/"
      },
      {
        "rel": "ITILFollowup",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/ITILFollowup/"
      },
      {
        "rel": "Ticket_User",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/Ticket_User/"
      },
      {
        "rel": "Group_Ticket",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/Group_Ticket/"
      },
      {
        "rel": "Supplier_Ticket",
        "href": "http://srv-glpi10/glpi/apirest.php/Ticket/4/Supplier_Ticket/"
      }
    ]
  }
]

J'ai ensuite un script qui doit se connecter à l'API du Serveur 2 et y importer les tickets qui sont dans le fichier tickets_pour_import.json :

#!/bin/bash

# Définir les variables
API_URL="http://Serveur2/apirest.php/Ticket"
USER_TOKEN="5wY1GHDAhXBZRu3dsDidWTAAncmEjnQxcqkcttzJ"
SESSION_TOKEN="s0ito7hco0q8pd580997ump2e0"
APP_TOKEN="vzkOeGGkcdacDPUuzAOBJvd7FSQN0HXISiZErSxR"

# Charger les tickets depuis le fichier JSON (qui doit être un tableau d'objets JSON)
tickets=$(cat tickets_filtrés.json)

# Vérifier que le fichier JSON est un tableau d'objets
if [[ $tickets != \[* ]]; then
echo "Erreur : Le fichier JSON doit être un tableau d'objets."
exit 1
fi

# Envoi du tableau complet de tickets
response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL" \
-H "Content-Type: application/json" \
-H "Authorization: user_token $USER_TOKEN" \
-H "Session-Token: $SESSION_TOKEN" \
-H "App-Token: $APP_TOKEN" \
-d "$tickets")

http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | head -n -1)

if [ "$http_code" -eq 201 ]; then
echo "Tous les tickets ont été importés avec succès."
else
echo "Erreur lors de l'importation des tickets. Code HTTP: $http_code"
echo "Réponse du serveur: $body"
fi

C'est la que ça coince. Quand je lance le script, j'ai toujours cette erreur :

Erreur lors de l'importation des tickets. Code HTTP: 400
Réponse du serveur: ["ERROR_BAD_ARRAY","Le paramètre input doit être un tableau d'objets; Afficher la documentation dans votre navigateur à http://172.24.1.2/apirest.php/#ERROR_BAD_ARRAY"]

Est-ce que quelqu'un saurait me dire si j'ai fais une erreur quelque part ?
Je tiens à préciser que je suis tech depuis seulement quelques mois, donc tout ce qui est code est encore un monde très obscur pour moi ?

Merci par avance !

Offline

Board footer

Powered by FluxBB