diff --git a/README.md b/README.md index 1430ca2..9717ee4 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## 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. +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. Voici un exemple du fichier de configuration : @@ -85,6 +85,10 @@ Il récupère le nom de l'utilisateur de staging dans le fichier de configuratio - **-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 +## Installation avec docker + + + ## Dépendances Installation des paquets linux : @@ -98,9 +102,28 @@ apt-get install -y python3 python3-pip git yum install -y python3 python3-pip git ``` -**Dépendances python** +## Modules python nécessaires +Voici la liste des modules python nécessaires au fonctionnement des scripts : + - cryptography + - requests + - toml + +Un fichier requirements.txt contenant les modules dont dépendent les scripts est présent dans le répertoire scripts. +Les modules peuvent être installés de plusieurs façons : + +**Avec le gestionnaire de paquet python Pip** ``` -python3 -m pip install cryptography requests toml +python -m pip install -r requirements.txt +``` + +**Avec le gestionnaire de paquet apt (debian/ubuntu)** +``` +apt-get install -y python3-cryptography python3-requests python3-toml +``` + +**Avec le gestionnaire de paquet yum (redhat/centos)** +``` +yum install -y python3-cryptography python3-requests python3-toml ``` ## Installation des scripts @@ -172,7 +195,7 @@ Description=Script qui assigne les appareils en staging aux utilisateurs en se b [Timer] OnUnitInactiveSec=1m AccuracySec=1us -Unit=airwatchSync.service +Unit=airwatchStaging.service [Install] WantedBy=timers.target diff --git a/create_services.sh b/create_services.sh new file mode 100644 index 0000000..2f1bbe6 --- /dev/null +++ b/create_services.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +python3 /services.py + +systemctl daemon-reload + +systemctl enable *-sync.timer *-staging.timer + +systemctl start *-sync.timer *-staging.timer + +tail -f /dev/null \ No newline at end of file diff --git a/dockerfile b/dockerfile new file mode 100644 index 0000000..5c1d56c --- /dev/null +++ b/dockerfile @@ -0,0 +1,10 @@ +FROM python +RUN <<-EOF +apt-get update +apt-get install -y python3-cryptography python3-requests python3-toml +EOF +ADD scripts\* /airwatchConnector +ADD services.py +ADD create_services.sh +RUN chmod u+x /create_services.sh +ENTRYPOINT ["/create_services.sh"] \ No newline at end of file diff --git a/scripts/conf/settings.dist.conf b/scripts/conf/settings.conf.dist similarity index 100% rename from scripts/conf/settings.dist.conf rename to scripts/conf/settings.conf.dist diff --git a/scripts/requirements.txt b/scripts/requirements.txt new file mode 100644 index 0000000..77953dc --- /dev/null +++ b/scripts/requirements.txt @@ -0,0 +1,3 @@ +cryptography +requests +toml \ No newline at end of file diff --git a/services.py b/services.py new file mode 100644 index 0000000..8fe50d0 --- /dev/null +++ b/services.py @@ -0,0 +1,75 @@ +import os +import toml + +baseDir = "/airwatchConnector" +logDir = f"{baseDir}/logs" +confDir = f"{baseDir}/conf" +confFiles = os.listdir(confDir) + +# On récupère que les fichiers .conf +confFiles = [conf for conf in confFiles if os.path.isfile(f"{confDir}/{conf}") and not conf.endswith(".conf")] + +for conf in confFiles: + # On forme un nom à partir du nom du fichier de conf sans l'extension + # et on enlève les espaces + confName = conf[:5].replace(' ', '') + + with open(f"{confDir}/{conf}", "r") as f: + settings = toml.load(f) + + # Create log folder + if(settings["LOGS"]["Enabled"]): + logPath = settings["LOGS"].get(Path) + if not os.path.exists(f"{logDir}/{logPath}"): + os.makedirs(f"{logDir}/{logPath}") + + + with open(f"/etc/systemd/system/{confName}-sync.service", "w") as f: + f.write(f"""[Unit] +Description=Script Airwatch pour la synchronisation des données Airwatch et GLPI. + +[Service] +Type=oneshot +WorkingDirectory=/airwatchConnector +ExecStart=/airwatchConnector/syncGLPI.py -c {confDir}/{conf} -s -f +User=root +""") + + with open(f"/etc/systemd/system/{confName}-sync.timer", "w") as f: + f.write(f"""[Unit] +Description=Script Airwatch pour la synchronisation des données Airwatch et GLPI. + +[Timer] +OnUnitInactiveSec=1h +AccuracySec=1us +Unit={confName}-sync.service + +[Install] +WantedBy=timers.target +""") + + with open(f"/etc/systemd/system/{confName}-staging.service", "w") as f: + f.write(f"""[Unit] +Description=Script qui assigne les appareils en staging aux utilisateurs en se basant sur GLPI. + +[Service] +Type=oneshot +WorkingDirectory=/airwatchConnector +ExecStart=/airwatchConnector/StagingUserAssignation.py -c {confDir}/{conf} -s -f +User=root +""") + + with open(f"/etc/systemd/system/{confName}-staging.timer", "w") as f: + f.write(f"""[Unit] +Description=Script qui assigne les appareils en staging aux utilisateurs en se basant sur GLPI. + +[Timer] +OnUnitInactiveSec=1m +AccuracySec=1us +Unit={confName}-staging.service + +[Install] +WantedBy=timers.target +""") + +