Package zephir :: Package backend :: Module prelude_rpc
[hide private]
[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.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   
24 -class RPCPrelude(XMLRPC):
25 """serveur XMLRPC zephir pour la gestion de prélude 26 """ 27
28 - def __init__(self,parent):
29 self.dbpool = db_connect() 30 self.dbpool.noisy = 0 31 XMLRPC.__init__(self) 32 self.parent = parent
33
34 - def xmlrpc_register_server(self,cred_user,id_manager):
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 # génération du mot de passe avec pwgen 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
48 - def _register_server(self,output,cred_user,id_manager):
49 passwd = output.strip() 50 # lancement de prelude-adduser sur le manager 51 try: 52 # lecture de la clé du manager 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
70 - def xmlrpc_get_managers(self, cred_user):
71 """renvoie l'adresse du manager défini sur zephir si il existe""" 72 # on récupère la liste des managers disponibles 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
76 - def _get_managers(self, data, cred_user):
77 if data == []: 78 # pas de serveurs preludemanager enregistrés 79 return 1, {} 80 else: 81 managers = {} 82 for manager in data: 83 id_man = int(manager[0]) 84 libelle = manager[1] 85 # récupération de l'adresse ip 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 # configuration inconnue pour ce manager 91 ip = '' 92 if ip != '': 93 managers[str(id_man)]=[ip,libelle] 94 95 return 1, u(managers)
96
97 - def xmlrpc_register_logger(self,cred_user,id_serveur):
98 """permet de vérifier si des serveurs ont été modifiés 99 """ 100 return 1, u("""Fonction non implémentée""")
101