Projet

Général

Profil

linkAAFauto.py

Laurent Couillaud, 10/07/2015 01:59

Télécharger (3,88 ko)

 
1
#!/usr/bin/env python
2
# -*- coding: utf-8 -*-
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