# Scripts Airwatch GLPI ## Explication de l'usage des scripts et de la configuration : ### Fichier de configuration global settings.json Les scripts prennent les informations de configuration du fichier de configuration présent dans le répertoire conf, si celui-ci n'existe pas au lancement d'un script, il est automatiquement créé avec des valeurs d'exemples. Un chemin personnalisé vers un fichier de configuration peut être renseigné avec le paramètre -c. Voici un exemple du fichier de configuration : ```toml [AIRWATCH] Server = "https://airwatchServer" APIKey = "APIKEY" # Méthode d'authentification (CMSURL or PASSWORD) # CMSURL permet l'authentification avec un certificat utilisateur (CertificatePath, CertificatePassword) # PASSWORD permet l'authentification avec un nom d'utilisateur et un mot de passe (APIUser, APIPassword) AuthenticationMethod = "CMSURL" CertificatePath = "/path/to/cert" CertificatePassword = "12345" APIUser = "UserAPI" APIPassword = "PasswordUserAPI" # Utilisateur de staging que l'on va remplacer par l'utilisateur trouvé dans GLPI StagingUser = "staging-pr" [GLPI] Server = "http://127.0.0.1/glpi" AppToken = "GLPIAppToken" UserToken = "GLPIUserToken" # User agent qui sera visible sur GLPI lors de la synchronisation UserAgent = "Airwatch Synchronizer" [LOGS] Enabled = true # Chemin où seront créé les fichiers de log Path = "./logs/" # Mode debug pour avoir plus d'informations Debug = false ``` --- ### syncGLPI.py Le script syncGLPI.py permet de synchroniser les données des appareils présents dans Airwatch avec un inventaire GLPI. Les actions du script : - vérification et suppression des doublons en fonction du numéro de série et de la date de dernier enrôlement - vérification de la présence des appareils dans l'inventaire GLPI et envoi d'un inventaire à partir des données d'Airwatch pour mettre à jours les informations - modification du numéro de série de l'appareil sur GLPI si celui-ci n'est pas identique à celui d'Airwatch - modification du friendlyname de l'appareil sur Airwatch à partir du nom d'inventaire de l'appareil sur GLPI #### Synchronisation Les éléments synchronisés de Airwatch vers GLPI : - l'utilisateur de l'appareil - la dernière date de remontée vers le serveur Airwatch - UUID - le nom du système d'exploitation et sa version - les logiciels présents sur la machine - le numéro de série Les éléments synchronisés de GLPI vers Airwatch : - Le nom d'inventaire de la machine qui est mis pour le friendlyname #### Paramètres Ce script possède les paramètres suivants qui sont optionnels pour son exécution : - **-sF / --searchFilter** : permet de filtrer la recherche des appareils dans airwatch sur un attribut spécifique parmi la liste suivante : "Id", "SerialNumber", "Imei", "UserName" - **-sV / --searchValue** : la valeur pour la recherche lorsque -searchFilter est utilisé - **-f / --force** : permet d'outrepasser la vérification du verrou posé par le script lors de son exécution - **-c / --configPath** : permet de définir un chemin vers un fichier de configuration a utilisé pour l'exécution du script - **-s / --silent** : exécute le script sans faire de retour dans la console, les informations seront toujours présentes dans les fichiers de log - **-v / --verbose** : affiche des informations lors de son exécution, utile pour résoudre des problèmes liés à des droits d'accès API ou des problèmes d'ouvertures réseaux --- ### StagingUserAssignation.py Le script StagingUserAssignation.py permet d'assigner les appareils en staging qui sont assignés à un utilisateur de staging à l'utilisateur renseigné dans l'inventaire GLPI. Il récupère le nom de l'utilisateur de staging dans le fichier de configuration. #### Paramètres - **-u / --staginguser** : permet de préciser l'utilisateur de staging pour la recherche des appareils à modifier (override le fichier de paramètres) - **-sn / --serialnumber** : permet de filtrer sur un numéro de série précis - **-f / --force** : permet d'outrepasser la vérification du verrou posé par le script lors de son exécution - **-c / --configPath** : permet de définir un chemin vers un fichier de configuration a utilisé pour l'exécution du script - **-s / --silent** : exécute le script sans faire de retour dans la console, les informations seront toujours présentes dans les fichiers de log - **-v / --verbose** : affiche des informations lors de son exécution, utile pour résoudre des problèmes liés à des droits d'accès API ou des problèmes d'ouvertures réseaux ## Dépendances Installation des paquets linux : **debian/ubuntu** ``` apt-get install -y python3 python3-pip git ``` **redhat/centos** ``` yum install -y python3 python3-pip git ``` **Dépendances python** ``` python3 -m pip install cryptography requests toml ``` ## Installation des scripts Pour installer les scripts : 1. Télécharger le contenu de ce projet dans un répertoire du serveur : ``` git clone https://gitlab.forge.education.gouv.fr/jsecula/glpi-airwatch-sync.git ``` 2. Modifier le contenu du fichier de configuration global (settings.json) avec les valeurs correspondant à votre infrastructure. Les clés et certificats API se récupèrent aux emplacements suivants : - **Clé API Airwatch**: Groupes et Paramètres > Tous les paramètres > Système > Avancé > Interface de programmation (API) > API REST - **Certificat Airwatch**: lors de la création ou la modification d'un utilisateur Admin - **Token d'application GLPI**: Configuration > Générale > API - **Token utilisateur GLPI**: Administration > Utilisateurs > choisir l'utilisateur > Jeton d'API 3. Lancement automatique avec systemd : Création des services et des timers dans /etc/systemd/system/ : **airwatchSync.service** ``` [Unit] Description=Script Airwatch pour la synchronisation des données Airwatch et GLPI. [Service] Type=oneshot WorkingDirectory=/opt/airwatchSync ExecStart=/opt/airwatchSync/syncGLPI.py User=root ``` **airwatchSync.timer** (exécution toutes les heures) ``` [Unit] Description=Script Airwatch pour la synchronisation des données Airwatch et GLPI. [Timer] OnUnitInactiveSec=1h AccuracySec=1us Unit=airwatchSync.service [Install] WantedBy=timers.target ``` **airwatchStaging.service** ``` [Unit] Description=Script qui assigne les appareils en staging aux utilisateurs en se basant sur GLPI. [Service] Type=oneshot WorkingDirectory=/opt/airwatchSync ExecStart=/opt/airwatchSync/StagingUserAssignation.py User=root ``` **airwatchStaging.timer** (exécution toutes les minutes) ``` [Unit] Description=Script qui assigne les appareils en staging aux utilisateurs en se basant sur GLPI. [Timer] OnUnitInactiveSec=1m AccuracySec=1us Unit=airwatchSync.service [Install] WantedBy=timers.target ``` Rechargement de systemd et activation des timers ``` systemctl daemon-reload systemctl enable airwatchSync.timer airwatchStaging.timer systemctl start airwatchSync.timer airwatchStaging.timer ```