From ebf822aad60875853d24a6c1e57350ba18f619ea Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Thu, 19 Sep 2024 11:34:08 +0200 Subject: [PATCH] refs #705 implement RestaurarImagen() and add some fixes --- .../modules/server/ogAdmClient/__init__.py | 57 ++++++++++++++++--- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/src/opengnsys/modules/server/ogAdmClient/__init__.py b/src/opengnsys/modules/server/ogAdmClient/__init__.py index 1c3ee0a..04352ad 100644 --- a/src/opengnsys/modules/server/ogAdmClient/__init__.py +++ b/src/opengnsys/modules/server/ogAdmClient/__init__.py @@ -384,6 +384,8 @@ class ogAdmClientWorker (ServerWorker): def inclusionCliente (self): cfg = self.LeeConfiguracion() if not cfg: + logger.warning ('No se ha podido recuperar la configuración de las particiones del disco') + logger.warning ('Ha ocurrido algún problema en el proceso de inclusión del cliente') logger.error ('LeeConfiguracion() failed') return False res = self.enviaMensajeServidor ('InclusionCliente', { 'cfg': cfg }) @@ -445,7 +447,7 @@ class ogAdmClientWorker (ServerWorker): with open (fileautoexec, 'w') as fd: fd.write (base64.b64decode (res['contents']).decode ('utf-8')) - self.ejecutaArchivo (fileautoexec); + self.ejecutaArchivo (fileautoexec) return True @@ -473,7 +475,7 @@ class ogAdmClientWorker (ServerWorker): def cargaPaginaWeb (self, url=None): if (not url): url = self.urlMenu - os.system ('pkill -9 browser'); + os.system ('pkill -9 browser') p = subprocess.Popen (['/opt/opengnsys/bin/browser', '-qws', url]) try: @@ -577,11 +579,6 @@ class ogAdmClientWorker (ServerWorker): self.muestraMenu() self.procesaComandos() - ## este es una respuesta, y creo que nadie nos va a llamar nunca a este endpoint - ## curl --insecure https://192.168.1.249:8000/ogAdmClient/NoComandosPtes - #def process_NoComandosPtes (self, path, get_params, post_params, server): - # logger.warning ('in process_NoComandosPtes') - def respuestaEjecucionComando (self, cmd, herror, ids): if ids: ## Existe seguimiento cmd['ids'] = ids ## Añade identificador de la sesión @@ -627,7 +624,7 @@ class ogAdmClientWorker (ServerWorker): 'par': par, 'sft': sft_dst, } - return self.respuestaEjecucionComando (cmd, herror, 0); + return self.respuestaEjecucionComando (cmd, herror, 0) return {'true':'true'} ## XXX @@ -714,7 +711,49 @@ class ogAdmClientWorker (ServerWorker): raise Exception ({ '_httpcode': 404, '_msg': 'This method has been removed' }) def process_RestaurarImagen (self, path, get_params, post_params, server): - logger.warning ('in process_RestaurarImagen') + logger.debug ('in process_RestaurarImagen, path "{}" get_params "{}" post_params "{}" server "{}"'.format (path, get_params, post_params, server)) + + for k in ['dsk', 'par', 'idi', 'ipr', 'nci', 'ifs', 'ptc', 'nfn', 'ids']: ## XXX "ids" es realmente obligatorio? + if k not in post_params: + logger.error (f'required parameter ({k}) not in POST params') + return {} + + dsk = post_params['dsk'] + par = post_params['par'] + idi = post_params['idi'] + ipr = post_params['ipr'] + nci = post_params['nci'] + ifs = post_params['ifs'] + ptc = post_params['ptc'] ## Protocolo de clonación: Unicast, Multicast, Torrent + nfn = post_params['nfn'] + ids = post_params['ids'] + + self.muestraMensaje (3) + + try: + output = self.interfaceAdmin (nfn, [dsk, par, nci, ipr, ptc]) + self.muestraMensaje (11) + herror = 0 + except: + logger.warning ('Error al ejecutar el comando') + self.muestraMensaje (12) + herror = 1 + + cfg = self.LeeConfiguracion() + if not cfg: + logger.warning ('No se ha podido recuperar la configuración de las particiones del disco') + + self.muestraMenu() + + cmd = { + 'nfn': 'RESPUESTA_RestaurarImagen', + 'idi': idi, ## Identificador de la imagen + 'dsk': dsk, ## Número de disco + 'par': par, ## Número de partición + 'ifs': ifs, ## Identificador del perfil software + 'cfg': cfg, ## Configuración de discos + } + return self.respuestaEjecucionComando (cmd, herror, ids) def process_RestaurarImagenBasica (self, path, get_params, post_params, server): logger.debug ('in process_RestaurarImagenBasica, path "{}" get_params "{}" post_params "{}" server "{}"'.format (path, get_params, post_params, server))