188 lines
7.1 KiB
Markdown
188 lines
7.1 KiB
Markdown
# 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
|
|
```
|
|
|