refs #786 implement process_ConsolaRemota()

pull/10/head
Natalia Serrano 2024-10-01 14:15:10 +02:00
parent 62a2514569
commit e28094ec1b
6 changed files with 60 additions and 18 deletions

View File

@ -1,3 +1,9 @@
ogagent (1.3.8-1) stable; urgency=medium
* Add more functionality to the ogAdmClient module
-- OpenGnsys developers <info@opengnsys.es> Tue, 01 Oct 2024 13:41:48 +0200
ogagent (1.3.7-1) stable; urgency=medium
* CloningEngine: RESTfully keep a list of long-running jobs

View File

@ -167,6 +167,11 @@ def disponibilidad_comandos():
return jsonify({})
@app.route('/opengnsys/rest/ogAdmClient/recibeArchivo', methods=['POST'])
def oac_recibe_archivo():
logging.info(f'{request.get_json()}')
return jsonify({'anything':'anything'}) ## if we return {}, then we trigger "if not {}" which happens to be true
@app.route('/opengnsys/rest/ogAdmClient/<cucu>', methods=['GET', 'POST'])
def oac_cucu(cucu):
#j = request.get_json(force=True)
@ -181,7 +186,7 @@ def oac_cucu(cucu):
## agente oglive: modulo CloningEngine
@app.route('/opengnsys/rest/CloningEngine/recibeArchivo', methods=['POST'])
def recibe_archivo():
def ce_recibe_archivo():
logging.info(f'{request.get_json()}')
return jsonify({'anything':'anything'}) ## if we return {}, then we trigger "if not {}" which happens to be true

View File

@ -1 +1 @@
1.3.7
1.3.8

View File

@ -50,21 +50,6 @@ class CloningEngineWorker (ogLiveWorker):
def onDeactivation (self):
logger.debug ('onDeactivation')
## en C, esto envia una trama de respuesta al servidor. Devuelve un boolean
## en python, simplemente termina de construir la respuesta y la devuelve; no envía nada por la red. El caller la usa en return() para enviar implícitamente la respuesta
def respuestaEjecucionComando (self, cmd, herror, ids):
if ids: ## Existe seguimiento
cmd['ids'] = ids ## Añade identificador de la sesión
if 0 == herror: ## el comando terminó con resultado satisfactorio
cmd['res'] = 1
cmd['der'] = ''
else: ## el comando tuvo algún error
cmd['res'] = 2
cmd['der'] = self.tbErroresScripts[herror] ## XXX
return cmd
def InventariandoSoftware (self, dsk, par, sw, nfn):
sft_src = f'/tmp/CSft-{self.IPlocal}-{par}'
try:

View File

@ -36,6 +36,8 @@ import base64
#import threading
#import time
import subprocess
from pathlib import Path
from urllib.parse import unquote
#from opengnsys import operations
from opengnsys.log import logger
@ -421,7 +423,36 @@ class ogAdmClientWorker (ogLiveWorker):
return {} ## ogAdmClient.c:920
def process_ConsolaRemota (self, path, get_params, post_params, server):
logger.warning ('in process_ConsolaRemota')
logger.debug ('in process_ConsolaRemota, path "{}" get_params "{}" post_params "{}" server "{}"'.format (path, get_params, post_params, server))
for k in ['nfn', 'scp']:
if k not in post_params:
logger.error (f'required parameter ({k}) not in POST params')
return {}
nfn = unquote (post_params['nfn'])
scp = unquote (post_params['scp'])
filescript = f'/tmp/_script_{self.IPlocal}'
ecosrc = f'/tmp/_econsola_{self.IPlocal}'
ecodst = f'/tmp/_Seconsola_{self.IPlocal}' ## Nombre que tendra el archivo en el Servidor
with open (filescript, 'w') as fd:
fd.write (scp)
try:
self.interfaceAdmin (nfn, [filescript, ecosrc])
ecosrc_contents = Path (ecosrc).read_bytes()
except:
logger.error ('Error al ejecutar el comando')
return {}
logger.debug ('sending recibeArchivo to server')
res = self.enviaMensajeServidor ('recibeArchivo', { 'nfl': ecodst, 'contents': base64.b64encode (ecosrc_contents).decode ('utf-8') })
logger.debug (res)
if not res:
logger.error ('Ha ocurrido algún problema al enviar un archivo por la red')
return {}
def process_Arrancar (self, path, get_params, post_params, server):
logger.warning ('in process_Arrancar')

View File

@ -114,6 +114,21 @@ class ogLiveWorker(ServerWorker):
return res
## en C, esto envia una trama de respuesta al servidor. Devuelve un boolean
## en python, simplemente termina de construir la respuesta y la devuelve; no envía nada por la red. El caller la usa en return() para enviar implícitamente la respuesta
def respuestaEjecucionComando (self, cmd, herror, ids=None):
if ids: ## Existe seguimiento
cmd['ids'] = ids ## Añade identificador de la sesión
if 0 == herror: ## el comando terminó con resultado satisfactorio
cmd['res'] = 1
cmd['der'] = ''
else: ## el comando tuvo algún error
cmd['res'] = 2
cmd['der'] = self.tbErroresScripts[herror] ## XXX
return cmd
def cargaPaginaWeb (self, url=None):
if (not url): url = self.urlMenu
os.system ('pkill -9 browser')