1
2
3
4
5
6
7
8
9
10
11
12
13 """module de gestion de prelude
14 """
15 from twisted.internet.utils import getProcessOutput
16 from zephir.backend.db_utils import *
17 from zephir.backend import config
18 from zephir.backend.config import u
19 from zephir.backend.xmlrpceole import XMLRPCEole as XMLRPC
20 from zephir.backend.lib_backend import ResourceAuthError
21 import sys,os,shutil,time,base64,xmlrpclib
22
24 """serveur XMLRPC zephir pour la gestion de prélude
25 """
26
28 self.dbpool = db_connect()
29 self.dbpool.noisy = 0
30 XMLRPC.__init__(self)
31 self.parent = parent
32
34 """négocie l'enregistrement d'une sonde prelude dans prelude manager
35 id_serveur : identifiant zephir du serveur sonde
36
37 -génère un mot de passe aléatoire
38 -demande le lancement de prelude-adduser sur le manager
39 -renvoie le mot de passe pour permettre l'enregistrement côté sonde
40 """
41
42 cmd_pass = getProcessOutput("/usr/bin/pwgen",
43 args = ["-B","-s","-1"],
44 env = {'LC_ALL': 'C'})
45 return cmd_pass.addCallback(self._register_server,cred_user, id_manager)
46
48 passwd = output.strip()
49
50 try:
51
52 serv = self.parent.s_pool.get(cred_user, int(id_manager))
53 key = file(os.path.join(serv.get_confdir(),'cle_publique')).read()
54 try:
55 ip_manager = serv.get_config().get_value('adresse_ip_eth0')[0]
56 except:
57 return 0, u("""Adresse ip du manager %s non disponible""" % id_manager)
58 manager_rpc = xmlrpclib.ServerProxy('https://%s:%s' % (ip_manager, config.PRELUDE_PORT))
59 res = manager_rpc.register_server(xmlrpclib.base64.encodestring(key),passwd)
60 except:
61 import traceback
62 traceback.print_exc()
63 res = 0
64 if res == 1:
65 return 1, u(passwd)
66 elif res == -1:
67 return -1, u("""Un enregistrement est déjà en cours""")
68 else:
69 return 0, u("""Impossible de lancer prelude-adduser sur le manager""")
70
72 """renvoie l'adresse du manager défini sur zephir si il existe"""
73
74 query = """select distinct(serveurs.id), serveurs.libelle from serveurs, modules where\
75 serveurs.module_actuel=modules.id and modules.libelle like %s"""
76 return self.dbpool.runQuery(query, ('%s-%%' % module,)).addCallbacks(self._get_managers, db_client_failed,callbackArgs=[cred_user])
77
79 if data == []:
80
81 return 1, {}
82 else:
83 managers = {}
84 for manager in data:
85 id_man = int(manager[0])
86 libelle = manager[1]
87
88 serv = self.parent.s_pool.get(cred_user, id_man)
89 try:
90 ip = serv.get_config().get_value('adresse_ip_eth0')[0]
91 except:
92
93 ip = ''
94 if ip != '':
95 managers[str(id_man)]=[ip,libelle]
96
97 return 1, u(managers)
98
100 """permet de vérifier si des serveurs ont été modifiés
101 """
102 return 1, u("""Fonction non implémentée""")
103