From c46e42628266acedcaf1a3bf312a4632ca5400b0 Mon Sep 17 00:00:00 2001 From: Jason Secula Date: Thu, 10 Jul 2025 19:57:29 +0200 Subject: [PATCH] =?UTF-8?q?V=C3=A9rification=20des=20appareils=20dans=20la?= =?UTF-8?q?=20corbeille=20du=20serveur=20GLPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/includes/GLPIAPI.py | 10 +++++++--- scripts/syncGLPI.py | 8 +++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/scripts/includes/GLPIAPI.py b/scripts/includes/GLPIAPI.py index 2b3b984..bf3e6d3 100644 --- a/scripts/includes/GLPIAPI.py +++ b/scripts/includes/GLPIAPI.py @@ -33,17 +33,21 @@ class GLPIAPI: "App-Token": self.AppToken } - def GetDevice(self, device): + def GetDevice(self, device, trashbin=False): + if(trashbin): + checkDeleted = 1 + else: + checkDeleted = 0 if(device.Imei != ''): # Recherche des appareils en fonction du numéro de série ou de l'imei # l'imei pouvant être dans le champ numéro de série ou les champs imei custom - search_parameter = f'is_deleted=0&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{device.SerialNumber}$'\ + search_parameter = f'is_deleted={checkDeleted}&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{device.SerialNumber}$'\ f'&criteria[1][link]=OR&criteria[1][field]=5&criteria[1][searchtype]=contains&criteria[1][value]=^{device.Imei}$'\ f'&criteria[2][link]=OR&criteria[2][field]=76667&criteria[2][searchtype]=contains&criteria[2][value]=^{device.Imei}$'\ f'&criteria[3][link]=OR&criteria[3][field]=76670&criteria[3][searchtype]=contains&criteria[3][value]=^{device.Imei}$' else: # Recherche des appareils en fonction du numéro de série seulement - search_parameter = f'is_deleted=0&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{device.SerialNumber}$' + search_parameter = f'is_deleted={checkDeleted}&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{device.SerialNumber}$' searchUri = f"{self.Server}/apirest.php/search/computer?{search_parameter}" search = requests.get(searchUri, headers=self.Headers) diff --git a/scripts/syncGLPI.py b/scripts/syncGLPI.py index 1d2a2b0..3b2898f 100644 --- a/scripts/syncGLPI.py +++ b/scripts/syncGLPI.py @@ -204,7 +204,13 @@ for device in devices: loggerDouble.error(f"{count} devices matching airwatch device {device.FriendlyName} (Airwatch id={device.Id}) in GLPI (GLPI ids = {', '.join(deviceID)}), skipping this device...") continue if(count == 0): - loggerMissing.error(f"Device {device.FriendlyName} (id={device.Id}) not found in GLPI, is it in the trash bin ? Skipping device...") + deviceIDTrash, dataTrash, countTrash = glpiapi.GetDevice(device, trashbin=True) + if(countTrash > 1): + loggerDouble.error(f"{countTrash} devices matching airwatch device {device.FriendlyName} (Airwatch id={device.Id}) in GLPI trashbin (GLPI ids = {', '.join(deviceIDTrash)}), skipping this device...") + elif(countTrash == 1): + logger.warning(f"Device {device.FriendlyName} (Airwatch id={device.Id}) in GLPI trashbin (GLPI id={deviceIDTrash}), skipping...") + else: + loggerMissing.error(f"Device {device.FriendlyName} (Airwatch id={device.Id}) not found in GLPI.") continue inventory = glpiapi.CreateInventoryForAirwatchDevice(device, data["1"], apps)