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