Package zephir :: Package backend :: Module prelude_rpc
[frames] | no frames]

Source Code for Module zephir.backend.prelude_rpc

  1  # -*- coding: UTF-8 -*- 
  2  ########################################################################### 
  3  # Eole NG - 2007 
  4  # Copyright Pole de Competence Eole  (Ministere Education - Academie Dijon) 
  5  # Licence CeCill  cf /root/LicenceEole.txt 
  6  # eole@ac-dijon.fr 
  7  # 
  8  # prelude_rpc.py 
  9  # 
 10  # fonctions xmlrpc pour la gestion de prélude dans Zephir 
 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   
23 -class RPCPrelude(XMLRPC):
24 """serveur XMLRPC zephir pour la gestion de prélude 25 """ 26
27 - def __init__(self,parent):
28 self.dbpool = db_connect() 29 self.dbpool.noisy = 0 30 XMLRPC.__init__(self) 31 self.parent = parent
32
33 - def xmlrpc_register_server(self,cred_user,id_manager):
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 # génération du mot de passe avec pwgen 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
47 - def _register_server(self,output,cred_user,id_manager):
48 passwd = output.strip() 49 # lancement de prelude-adduser sur le manager 50 try: 51 # lecture de la clé du manager 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
71 - def xmlrpc_get_managers(self, cred_user, module='preludemanager'):
72 """renvoie l'adresse du manager défini sur zephir si il existe""" 73 # on récupère la liste des managers disponibles 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
78 - def _get_managers(self, data, cred_user):
79 if data == []: 80 # pas de serveurs preludemanager enregistrés 81 return 1, {} 82 else: 83 managers = {} 84 for manager in data: 85 id_man = int(manager[0]) 86 libelle = manager[1] 87 # récupération de l'adresse ip 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 # configuration inconnue pour ce manager 93 ip = '' 94 if ip != '': 95 managers[str(id_man)]=[ip,libelle] 96 97 return 1, u(managers)
98
99 - def xmlrpc_register_logger(self,cred_user,id_serveur):
100 """permet de vérifier si des serveurs ont été modifiés 101 """ 102 return 1, u("""Fonction non implémentée""")
103