Présentation de l'API
L'API permet d'automatiser certaines tâches peu pratiques dans l'application web (génération batch de configurations de migration, mise à jour de groupes existants, ...).
L'aide au développement se trouve dans l'application web Zéphir à l'adresse :
https://<adresse_zephir>:8070/aide/devel/
Les fonctions de l'API sont documentées et disponibles à l'adresse :
https://<adresse_zephir>:8070/aide/api
/
AttentionPython3
Les exemples proposés ont été développés et fonctionnent en python2.
Pour réaliser les mêmes manipulations avec un interpréteur python3 (Zéphir ≥ 2.8.0), il faut a minima remplacer remplacer la ligne :
import xmlrpclib
par :
from xmlrpc import client as xmlrpclib
Exemple 1 - Affichage d'information
Exemple
Dans cet exemple le script se connecte sur le serveur Zéphir et propose de choisir un des modules 2.4.1 pour afficher l'ID, le RNE, le serveur DNS et les adresses IP des interfaces eth0 et eth1.
Exemple 2 - Affichage d'information avec interaction
Exemple
Dans cet exemple le script se connecte sur le serveur Zéphir et propose de choisir un groupe de machine ou une version de module pour afficher l'ID, le RNE, le serveur DNS et les adresses IP des interfaces eth0 et eth1.
Exemple du retour d'affichage des informations :
choix du module : 54
Serveurs de type amon-2.4.1 :
* serveur 115 (etablissement 00000001) :
- dns : 192.168.232.2
- ip eth0 : 192.168.0.31
- ip eth1 : 10.1.1.1
* serveur 118 (etablissement 00000001) :
- dns : 192.168.232.2
- ip eth0 : 192.168.0.31
- ip eth1 : 10.1.1.1
Exemple 3 - Affichage d'information avec interaction et authentification
Exemple
Dans cet exemple le script, proposé par Karim Ayari, se connecte sur le serveur Zéphir, demande une authentification, récupère la valeur d'une variable ou de plusieurs variables sur une machine ou sur un groupe de machine.
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# Karim Ayari
# DSI - Rectorat de Lyon
# récupére la valeur d'une variable demandée
import xmlrpclib, getpass, sys, os, socket
from zephir.backend import serveurs_rpc
from pyeole.ansiprint import print_red,print_green
from getpass import getpass
def GetVar(variable,amon=None,val=None,groupe=None):
"""
récupére la valeur d'une ou plusieurs variables
"""
if amon != "" and amon != None and variable != "":
config = zephir_proxy.serveurs.get_config(amon)
print amon,config[1]['libelle_etab']
for var_ in variable.split(","):
try:
config[1][var_]
except KeyError:
print_red("La variable '%s' n'existe pas !" % (var_))
else:
print var_,config[1][var_]
elif variable != "" and val != None and amon == "" and groupe != None:
#on récupére le groupe
gr = zephir_proxy.serveurs.get_groups()
#groupe
for gr_ in enumerate(gr[1]):
if gr_[1][1] == groupe:
amons=gr_[1][2]
#on cherche dans les configurations des amons
res=[]
for idz in amons:
for var_ in variable.split(","):
config = zephir_proxy.serveurs.get_config(idz)
try:
val in config[1][var_]
except KeyError:
print "%s | %s | Existe pas" % (idz, config[1]['libelle_etab'])
pass
else:
#on stocke le résultat (id zéphir) dans une liste pour traitement.
res.append(idz)
#on affiche le résultat (id et nom établissement)
print "%s : %s | %s | %s" % (var_,idz, config[1]['libelle_etab'], config[1][var_])
if __name__ == "__main__":
user = raw_input("Utilisateur Zephir: ")
password = getpass("mot de passe pour %s :" % user)
try:
zephir_proxy = xmlrpclib.ServerProxy('http://%s:%s@127.0.0.1:7081' % (user, password))
except:
raise
else:
val = None
groupe = None
amon = None
amon = raw_input("Id zéphir du serveur ? laisser vide pour saisir un groupe : ")
if amon == "":
groupe = raw_input("Saisir le nom du groupe : ")
variante = raw_input("Saisir le nom de la variante : ")
variable = raw_input("Quelle variable interroger (séparer par , si plusieurs) : ")
if variable != "":
val = raw_input("Valeur à rechercher : ")
GetVar(variable,amon,val,groupe)
Exemple du retour d'affichage des informations :
Utilisateur Zephir: admin_zephir
mot de passe pour admin_zephir :
Id zéphir du serveur ? laisser vide pour saisir un groupe :
Saisir le nom du groupe : Amon261
Saisir le nom de la variante :
Quelle variable interroger (séparer par , si plusieurs) : maxchildren1,maxchildren2
Valeur à rechercher :
maxchildren1 : 236 | etab1 | 256
maxchildren2 : 236 | etab1 | 256