diff --git a/linux/debian/changelog b/linux/debian/changelog index 0ee968c..5efe64c 100644 --- a/linux/debian/changelog +++ b/linux/debian/changelog @@ -1,3 +1,9 @@ +ogagent (1.4.2-1) UNRELEASED; urgency=medium + + * Have ogAdmClient/status return information about network and disks + + -- OpenGnsys developers Tue, 15 Oct 2024 10:35:16 +0200 + ogagent (1.4.1-1) stable; urgency=medium * Bugfix: move data structure to the right class diff --git a/src/OGAgent.spec b/src/OGAgent.spec index 2dbcdc6..aaba3a8 100755 --- a/src/OGAgent.spec +++ b/src/OGAgent.spec @@ -13,7 +13,7 @@ ogausr_a = Analysis( # ('cfg', 'cfg'), ## add the entire directory ('img', 'img'), ## add the entire directory ], - hiddenimports=['win32timezone', 'socketserver', 'http.server', 'urllib'], + hiddenimports=['win32timezone', 'socketserver', 'http.server', 'urllib', 'opengnsys.modules.client.OpenGnSys', 'opengnsys.modules.server.CloningEngine', 'opengnsys.modules.server.ogAdmClient', 'opengnsys.modules.server.OpenGnSys'], hookspath=[], hooksconfig={}, runtime_hooks=[], @@ -26,7 +26,7 @@ ogasvc_a = Analysis( pathex=[], binaries=[], datas=[], - hiddenimports=['win32timezone', 'socketserver', 'http.server', 'urllib'], + hiddenimports=['win32timezone', 'socketserver', 'http.server', 'urllib', 'opengnsys.modules.client.OpenGnSys', 'opengnsys.modules.server.CloningEngine', 'opengnsys.modules.server.ogAdmClient', 'opengnsys.modules.server.OpenGnSys'], hookspath=[], hooksconfig={}, runtime_hooks=[], diff --git a/src/VERSION b/src/VERSION index 347f583..9df886c 100644 --- a/src/VERSION +++ b/src/VERSION @@ -1 +1 @@ -1.4.1 +1.4.2 diff --git a/src/opengnsys/modules/server/CloningEngine/__init__.py b/src/opengnsys/modules/server/CloningEngine/__init__.py index 41e310f..b95bd23 100644 --- a/src/opengnsys/modules/server/CloningEngine/__init__.py +++ b/src/opengnsys/modules/server/CloningEngine/__init__.py @@ -167,11 +167,11 @@ class CloningEngineWorker (ogLiveWorker): 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 + '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': self.cfg2obj(cfg), ## Configuración de discos } return self.respuestaEjecucionComando (cmd, herror, ids) @@ -213,7 +213,7 @@ class CloningEngineWorker (ogLiveWorker): cmd = { 'nfn': 'RESPUESTA_Configurar', - 'cfg': cfg, + 'cfg': self.cfg2obj (cfg), } self.muestraMenu() return self.respuestaEjecucionComando (cmd, herror, ids) diff --git a/src/opengnsys/modules/server/OpenGnSys/__init__.py b/src/opengnsys/modules/server/OpenGnSys/__init__.py index a6b2493..d152306 100644 --- a/src/opengnsys/modules/server/OpenGnSys/__init__.py +++ b/src/opengnsys/modules/server/OpenGnSys/__init__.py @@ -189,7 +189,7 @@ class OpenGnSysWorker(ServerWorker): if os.path.isfile(new_hosts_file): shutil.copyfile(new_hosts_file, hosts_file) - logger.info ('onActivation ok') + logger.debug ('onActivation ok') def onDeactivation(self): """ diff --git a/src/opengnsys/modules/server/ogAdmClient/__init__.py b/src/opengnsys/modules/server/ogAdmClient/__init__.py index 8e87d7a..bc34112 100644 --- a/src/opengnsys/modules/server/ogAdmClient/__init__.py +++ b/src/opengnsys/modules/server/ogAdmClient/__init__.py @@ -174,7 +174,7 @@ class ogAdmClientWorker (ogLiveWorker): 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 }) + res = self.enviaMensajeServidor ('InclusionCliente', { 'cfg': self.cfg2obj (cfg) }) logger.debug ('res ({})'.format (res)) ## RESPUESTA_InclusionCliente @@ -306,15 +306,26 @@ class ogAdmClientWorker (ogLiveWorker): logger.info ('onActivation ok') - @check_secret - def process_status (self, path, get_params, post_params, server): + def do_status (self, post_params): + cfg = self.LeeConfiguracion() thr_status = {} for k in self.thread_list: thr_status[k] = { 'running': self.thread_list[k]['running'], 'result': self.thread_list[k]['result'], } - return thr_status + return { + 'nfn': 'RESPUESTA_status', + 'mac': self.mac, + 'ip': self.IPlocal, + 'cfg': self.cfg2obj (cfg), + 'threads': thr_status, + } + + @check_secret + def process_status (self, path, get_params, post_params, server): + logger.debug ('in process_status, path "{}" get_params "{}" post_params "{}" server "{}"'.format (path, get_params, post_params, server)) + return self._long_running_job ('status', self.do_status, args=(post_params,)) @check_secret def process_popup (self, path, get_params, post_params, server): @@ -335,7 +346,7 @@ class ogAdmClientWorker (ogLiveWorker): cmd = { 'nfn': 'RESPUESTA_Actualizar', - 'cfg': cfg, + 'cfg': self.cfg2obj (cfg), } self.muestraMenu() return self.respuestaEjecucionComando (cmd, 0) @@ -491,7 +502,7 @@ class ogAdmClientWorker (ogLiveWorker): cmd = { 'nfn': 'RESPUESTA_EjecutarScript', - 'cfg': cfg, + 'cfg': self.cfg2obj (cfg), } self.muestraMenu() return self.respuestaEjecucionComando (cmd, herror, ids) diff --git a/src/opengnsys/service.py b/src/opengnsys/service.py index e7da465..d13f686 100644 --- a/src/opengnsys/service.py +++ b/src/opengnsys/service.py @@ -158,7 +158,7 @@ class CommonService(object): validMods.append(mod) except Exception as e: logger.exception() - logger.error("Activation of {} failed: {}".format(mod.name, exceptionToMessage(e))) + logger.debug("Activation of {} failed: {}".format(mod.name, exceptionToMessage(e))) self.modules[:] = validMods # copy instead of assignment diff --git a/src/opengnsys/workers/oglive_worker.py b/src/opengnsys/workers/oglive_worker.py index d221f1b..80c5c69 100644 --- a/src/opengnsys/workers/oglive_worker.py +++ b/src/opengnsys/workers/oglive_worker.py @@ -200,6 +200,15 @@ class ogLiveWorker(ServerWorker): logger.info ('local IP is "{}"'.format (self.IPlocal)) return True + def tomaMAClocal (self): + ## tomaIPlocal() calls interfaceAdm('getIpAddress') + ## getIpAddress runs 'ip addr show' and returns the IP address of every network interface except "lo" + ## (ie. breaks badly if there's more than one network interface) + ## let's make the same assumptions here + mac = subprocess.run (["ip -json link show |jq -r '.[] |select (.ifname != \"lo\") |.address'"], shell=True, capture_output=True, text=True) + self.mac = mac.stdout.strip() + return True + def enviaMensajeServidor (self, path, obj={}): obj['iph'] = self.IPlocal ## Ip del ordenador obj['ido'] = self.idordenador ## Identificador del ordenador @@ -264,6 +273,21 @@ class ogLiveWorker(ServerWorker): logger.debug ('parametroscfg ({})'.format (parametroscfg)) return parametroscfg + def cfg2obj (self, cfg): + obj = [] + ptrPar = cfg.split ('\n') + for line in ptrPar: + elem = {} + ptrCfg = line.split ('\t') + + for item in ptrCfg: + k, v = item.split ('=') + elem[k] = v + + obj.append (elem) + + return obj + def onActivation (self): if not os.path.exists ('/scripts/oginit'): ## no estamos en oglive, este modulo no debe cargarse @@ -272,6 +296,7 @@ class ogLiveWorker(ServerWorker): self.pathinterface = None self.IPlocal = None ## Ip del ordenador + self.mac = None ## MAC del ordenador self.idordenador = None ## Identificador del ordenador self.nombreordenador = None ## Nombre del ordenador self.cache = None @@ -294,6 +319,9 @@ class ogLiveWorker(ServerWorker): if not self.tomaIPlocal(): raise Exception ('Se han generado errores. No se puede continuar la ejecución de este módulo') + if not self.tomaMAClocal(): + raise Exception ('Se han generado errores. No se puede continuar la ejecución de este módulo') + threading.Thread (name='monitoring_thread', target=self.mon, daemon=True).start() def _long_running_job (self, name, f, args):