Manager
Présentation d'un outil python pour manipuler/gérer les process du serveur de jeu Ryzom Core pour Khanat.
Pre-requis
Il faut installer :
- python3
On récupère les scripts
Attention, dans la version de test on pointe sur mon repo khanat-code, a terme on sera sur la branche officielle
git clone https://git.khaganat.net/aleajactaest/khanat-code.git
cd khanat-code; git checkout feature/19-package-server-in-a-Docker-container; cd ..
programme
Serveur
Le serveur de management est géré par un script. Il est lancé en tâche de fond et attend les commandes
khanat-code/code/khaganat/tools/manage.py
Client
Il existe actuellement un client pour manipuler le serveur.
A terme, il existera un autre client pour manipuler le serveur. [objectif l'intégrer à l'outil Web de management de khaganat - django]
khanat-code/code/khaganat/tools/client.py
Installation
Controler la présence des scripts
- khaganat/tools/manage.py
- khaganat/tools/client.py
Création d'un certificat
Pour la création du certificat, nous utilisons la version TLS1.2.
Vous retrouver dans le code un script python pour générer (pour le test) les certificats
khanat-code/code/khaganat/tools/create_certificate.py
Il génère (en autre) :
- ca/private/cakey.pem : la clef de notre certificat racine
- ca/certs/cacert.pem : le certificat racine
- ca/appli/certs/applicert.pem : le certificat utilisé par tous les composant du Manager
- ca/appli/certs/cachaincert.pem : concaténation du certificat racine & application
- ca/appli/private/serverkey.pem : la clef du certificat du serveur (manager)
- ca/appli/certs/servercert.pem : le certificat du serveur (manager)
- ca/appli/private/clientkey.pem : la clef du certificat du client
- ca/appli/certs/clientcert.pem : le certificat du client
Configuration
La configuration se compose de deux parties.
- configuration général (port d'écoute, certificat, adresse réseau d'écoute
- configuration de chacun des programmes (commande, répertoire de base, taille de la log et taille du buffer
[config] # Define port listen (default 8000) port = 8000 # key keyfile = /home/gameserver/ca/appli/private/serverkey.pem # certificate certfile = /home/gameserver/ca/appli/certs/servercert.pem # certification to check signature ca_cert = /home/gameserver/ca/appli/certs/cachaincert.pem # address listen (default all port) address = ############################## ############################## # List all program we manage # ############################## ############################## ############################## # Admin Executor Service ############################## [aes] # command to launch the program command = ryzom_admin_service -A/home/gameserver/khanat/server -C/home/gameserver/khanat/server -L/home/gameserver/log/khanat --nobreak --fulladminname=admin_executor_service --shortadminname=AES # Path : where this program is launched path = /home/gameserver/khanat/server/ # size buffer log for each program launched (number line stdout) logsize = 1000 # buffer size (define value bufsize on subprocess.Popen, this buffer is use before read by manager) bufsize = 100 # Define other program
Utilisation
Serveur
Démarrer le serveur
nohup /home/gameserver/ext/khaganat/tools/manage.py --log info --show-log-console --filelog /home/gameserver/log/khanat/manager.log -c /home/gameserver/khanat/khaganat.cfg --launch-program 2>/dev/null 1>/dev/null 0</dev/zero &
Client
Status de tous les programmes
contrôle l'état de tous les programmes (retourne “started” ou “stopped”)
/home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="STATUSALL"
Démarre tous les programmes
Démarre tous les programmes (retourne “started”, “already-started” ou “crashed”)
/home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="STARTALL"
Arrête tous les programmes
Arrête tous les programmes (retourne “stopped”)
/home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="STOPALL"
Arrête le manager (et tous les programmes)
Arrête le manager (ainsi que tous les programmes)
/home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="SHUTDOWN"
Liste des programmes
Retourne la liste de tous les programmes disponible (démarré ou arrêté)
/home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="LIST"
Status d'un programme
contrôle l'état de d'un programme (retourne “started” ou “stopped”)
/home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="STATUS" --program="aes"
Démarre d'un programme
Démarre un programme (retourne “started” ou “stopped”)
/home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="START" --program="aes"
Arrête un programme
Arrête un programme (retourne “stopped”)
/home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="STOP" --program="aes"
Retourne la log d'un programme
Retourne les X derniers messages de la sortie standard (stdout) d'un programme.
firstline: première ligne que vous souhaitez récupérer
/home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="LOG" --program="aes" --firstline=0
Envoyer une entrée dans un programme
Envoie dans l'entrée du programme une action (Ex. help)
/home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="ACTION" --program="aes" --action="help all"
Souvent utilisé avec la commande “LOG” qui permet de voir le résultat.
Fonctionnement
Le serveur “manager” se met en écoute “style” https.
Il attend les commandes et les envoient à ces fils (chaque fils gère un programme)
Nous utilisons le format REST pour communiquer avec le serveur (les données envoyées au format json).
A Faire
- Faisabilité d'une authentification pour séparer les droits en fonction des commandes