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, ...).

Toutes les fonctions présentes dans l'application web sont accessibles via XML-RPC[1].

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.

1
#!/usr/bin/python
2
# -*- coding: UTF-8 -*-
3
# Karim Ayari
4
# DSI - Rectorat de Lyon
5
# récupére la valeur d'une variable demandée
6
7
import xmlrpclib, getpass, sys, os, socket
8
from zephir.backend import serveurs_rpc
9
from pyeole.ansiprint import print_red,print_green
10
from getpass import getpass
11
12
13
def GetVar(variable,amon=None,val=None,groupe=None):
14
    """
15
    récupére la valeur d'une ou plusieurs variables
16
    """
17
    if amon != "" and amon != None and variable != "":
18
        config = zephir_proxy.serveurs.get_config(amon)
19
        print amon,config[1]['libelle_etab']
20
        for var_ in variable.split(","):
21
	    try:
22
	        config[1][var_]
23
	    except KeyError:
24
	        print_red("La variable '%s' n'existe pas !" % (var_))
25
	    else:
26
                print var_,config[1][var_]
27
    elif variable != "" and val != None and amon == "" and groupe != None:
28
        #on récupére le groupe
29
        gr = zephir_proxy.serveurs.get_groups()
30
        #groupe
31
        for gr_ in enumerate(gr[1]):
32
            if gr_[1][1] == groupe:
33
                amons=gr_[1][2]
34
        #on cherche dans les configurations des amons
35
        res=[]
36
        for idz in amons:
37
	    for var_ in variable.split(","):
38
                config = zephir_proxy.serveurs.get_config(idz)
39
                try:
40
                    val in config[1][var_]
41
                except KeyError:
42
                    print "%s | %s | Existe pas" % (idz, config[1]['libelle_etab'])
43
                    pass
44
                else:
45
	            #on stocke le résultat (id zéphir) dans une liste pour traitement.
46
	            res.append(idz)
47
	            #on affiche le résultat (id et nom établissement)
48
                    print "%s : %s | %s | %s" % (var_,idz, config[1]['libelle_etab'], config[1][var_])
49
50
51
if __name__ == "__main__":
52
    user = raw_input("Utilisateur Zephir: ")
53
    password = getpass("mot de passe pour %s :" % user)
54
    try:
55
        zephir_proxy = xmlrpclib.ServerProxy('http://%s:%s@127.0.0.1:7081' % (user, password))
56
    except:
57
        raise
58
    else:
59
	val = None
60
	groupe = None
61
	amon = None
62
        amon = raw_input("Id zéphir du serveur ? laisser vide pour saisir un groupe : ")
63
        if amon == "":
64
            groupe = raw_input("Saisir le nom du groupe : ")
65
            variante = raw_input("Saisir le nom de la variante : ")
66
        variable = raw_input("Quelle variable interroger (séparer par , si plusieurs) : ")
67
        if variable != "":
68
            val = raw_input("Valeur à rechercher : ")
69
        GetVar(variable,amon,val,groupe)

Exemple du retour d'affichage des informations :

1
Utilisateur Zephir: admin_zephir
2
mot de passe pour admin_zephir :
3
Id zéphir du serveur ? laisser vide pour saisir un groupe : 
4
Saisir le nom du groupe : Amon261         
5
Saisir le nom de la variante : 
6
Quelle variable interroger (séparer par , si plusieurs) : maxchildren1,maxchildren2
7
Valeur à rechercher : 
8
maxchildren1 : 236 | etab1 | 256
9
maxchildren2 : 236 | etab1 | 256