1
|
|
2
|
|
3
|
|
4
|
""" Script de configuration automatique de la réplication AAF
|
5
|
|
6
|
Ce script permet d'identifier tous les scribes de la base zephir et de créer automatiquement
|
7
|
la jointure avec l'export AAF mis à disposition sur le zephir.
|
8
|
|
9
|
Script mis à disposition sous licence GPLv3.
|
10
|
|
11
|
Auteurs :
|
12
|
- Philippe Caseiro <pcaseiro@cadoles.com>
|
13
|
- Laurent Couillaud <lcouillaud@ac-noumea.nc>
|
14
|
|
15
|
"""
|
16
|
|
17
|
import os
|
18
|
import xmlrpclib
|
19
|
import argparse
|
20
|
import getpass
|
21
|
|
22
|
def isScribe(zephir, moduleID):
|
23
|
"""
|
24
|
Détermine si le moduleID est celui d'un scribe
|
25
|
:zephir: Connexion XMLRPC vers le zephir
|
26
|
:moduleID: Identifiant unique des modules sur le zephir
|
27
|
"""
|
28
|
|
29
|
mods = zephir.modules.get_module(moduleID)
|
30
|
if mods[1][0]['libelle'].find("scribe") == -1:
|
31
|
return False
|
32
|
else:
|
33
|
return True
|
34
|
|
35
|
def getScribes(zephir):
|
36
|
"""
|
37
|
Récupère la liste de tous les serveurs scribe depuis le zephir
|
38
|
:zephir: Connexion XMLRPC vers le zephir
|
39
|
"""
|
40
|
scribes = []
|
41
|
servers = zephir.serveurs.get_serveur()
|
42
|
for srv in servers[1]:
|
43
|
if isScribe(zephir, srv['module_initial']):
|
44
|
scribes.append(srv)
|
45
|
return scribes
|
46
|
|
47
|
def getScribeIDByRNE(lst, rne):
|
48
|
"""
|
49
|
Récupère l'ID d'un scribe en fonction d'un rne
|
50
|
:lst: Liste des serveurs
|
51
|
:rne: code RNE
|
52
|
"""
|
53
|
for elm in lst:
|
54
|
if elm['rne'] == rne:
|
55
|
return elm['id']
|
56
|
|
57
|
def getScribeLibelleByID(lst, sid):
|
58
|
"""
|
59
|
Récupère le libéllé du serveur en fonction de l'ID du scribe
|
60
|
:lst: Liste des serveurs
|
61
|
:sid: Id du scribe
|
62
|
"""
|
63
|
for elm in lst:
|
64
|
if elm['id'] == sid:
|
65
|
return elm['libelle']
|
66
|
|
67
|
parser = argparse.ArgumentParser(description='Process some integers.')
|
68
|
parser.add_argument("--user", action='store', help="Zephir login")
|
69
|
parser.add_argument("--password", action='store', help="Zephir password")
|
70
|
parser.add_argument("--zephir", action='store', help="Adresse IP du serveur Zéphir")
|
71
|
parser.add_argument("--directory", action='store', help="Répertoire d'arrivé des exports AAF")
|
72
|
parser.add_argument("--notify", action='store_true', help="Envoyer la notification d'upload au Zéphir",default=False)
|
73
|
|
74
|
results = parser.parse_args()
|
75
|
|
76
|
if not results.user:
|
77
|
user = raw_input("Login Zéphir : ")
|
78
|
else:
|
79
|
user = results.user
|
80
|
|
81
|
if not results.password:
|
82
|
password = getpass.getpass("Mot de passe Zéphir")
|
83
|
else:
|
84
|
password = results.password
|
85
|
|
86
|
if not results.zephir:
|
87
|
zephir = raw_input("Adresse IP du serveur Zéphir :")
|
88
|
else:
|
89
|
zephir = results.zephir
|
90
|
|
91
|
if not results.directory:
|
92
|
rootdir = raw_input("Répertoire d'arrivé des exports AAF :")
|
93
|
else:
|
94
|
rootdir = results.directory
|
95
|
|
96
|
try:
|
97
|
""" Ouverture de la session XMLRPC sur le zephir """
|
98
|
zephir = xmlrpclib.Server("https://" + user + ":" + password + "@" + zephir + ":7080")
|
99
|
|
100
|
""" Récupération de la liste des scribes sur le zephir """
|
101
|
scribes = getScribes(zephir)
|
102
|
|
103
|
"""
|
104
|
Vérification de la jonction de chaque fichier tar.gz du dossier /var/lib/zephir/aaf a chaque serveur scribe.
|
105
|
Si le fichier n'est pas jointé, il procède à la jointure et execute la notification de l'upload
|
106
|
"""
|
107
|
|
108
|
for archive in os.listdir(rootdir):
|
109
|
if archive.endswith("tar.gz"):
|
110
|
archrne = archive.split('.')[0]
|
111
|
scribeid = getScribeIDByRNE(scribes, archrne)
|
112
|
if zephir.aaf.get_list(scribeid)[1] == []:
|
113
|
zephir.aaf.add_file(scribeid, archive)
|
114
|
print("Association de l'archive [" + archive + "] avec le scribe [" + getScribeLibelleByID(scribeid) + "]")
|
115
|
if results.notify:
|
116
|
zephir.aaf.notify_upload(archive)
|
117
|
else:
|
118
|
print("\tAssociation déjà en place pour le scribe [" + getScribeLibelleByID(scribes, scribeid) + "]" )
|
119
|
continue
|
120
|
|
121
|
except xmlrpclib.ProtocolError as err:
|
122
|
print "Execution error"
|
123
|
print err
|
124
|
exit(2)
|
125
|
|