From cfb389003b85f2fa0710f5dda55dad1573bc8225 Mon Sep 17 00:00:00 2001 From: Guillaume Abrioux Date: Mon, 22 May 2023 14:19:09 +0200 Subject: [PATCH] node-proxy: migrate to cherrypy cherrypy is already widely used in Ceph. Let's not add new dependencies and use cherrypy instead of python-flask Signed-off-by: Guillaume Abrioux (cherry picked from commit 213320d33863b2e76bb81e8de33bb78d0970dd28) --- src/cephadm/node-proxy/redfish_system.py | 1 - src/cephadm/node-proxy/server-v2.py | 136 +++++++++++++++++++++++ 2 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 src/cephadm/node-proxy/server-v2.py diff --git a/src/cephadm/node-proxy/redfish_system.py b/src/cephadm/node-proxy/redfish_system.py index 8b8e96f7a34a3..94c6682774395 100644 --- a/src/cephadm/node-proxy/redfish_system.py +++ b/src/cephadm/node-proxy/redfish_system.py @@ -2,7 +2,6 @@ from system import System from redfish_client import RedFishClient from threading import Thread from time import sleep -from flask import request from util import logger log = logger(__name__) diff --git a/src/cephadm/node-proxy/server-v2.py b/src/cephadm/node-proxy/server-v2.py new file mode 100644 index 0000000000000..3f2e3df471e0d --- /dev/null +++ b/src/cephadm/node-proxy/server-v2.py @@ -0,0 +1,136 @@ +import cherrypy +from redfish_dell import RedfishDell +from reporter import Reporter +from util import logger +import sys + +# for devel purposes +import os +DEVEL_ENV_VARS = ['REDFISH_HOST', + 'REDFISH_USERNAME', + 'REDFISH_PASSWORD'] +for env_var in DEVEL_ENV_VARS: + if os.environ.get(env_var) is None: + print(f"{env_var} environment variable must be set.") + sys.exit(1) + +log = logger(__name__) + +# must be passed as arguments +host = os.environ.get('REDFISH_HOST') +username = os.environ.get('REDFISH_USERNAME') +password = os.environ.get('REDFISH_PASSWORD') + +# create the redfish system and the obsever +log.info("Server initialization...") +system = RedfishDell(host=host, username=username, password=password, system_endpoint='/Systems/System.Embedded.1') +reporter_agent = Reporter(system, "http://127.0.0.1:8000") + + +class Memory: + exposed = True + + @cherrypy.tools.json_out() + def GET(self): + return {'memory': system.get_memory()} + + +class Network: + exposed = True + + @cherrypy.tools.json_out() + def GET(self): + return {'network': system.get_network()} + + +class Processors: + exposed = True + + @cherrypy.tools.json_out() + def GET(self): + return {'processors': system.get_processors()} + + +class Storage: + exposed = True + + @cherrypy.tools.json_out() + def GET(self): + return {'storage': system.get_storage()} + + +class Status: + exposed = True + + @cherrypy.tools.json_out() + def GET(self): + return {'status': system.get_status()} + + +class System: + exposed = True + memory = Memory() + network = Network() + processors = Processors() + storage = Storage() + status = Status() + # actions = Actions() + # control = Control() + + +class Shutdown: + exposed = True + + def POST(self): + _stop() + cherrypy.engine.exit() + return 'Server shutdown...' + + +def _stop(): + system.stop_update_loop() + system.client.logout() + reporter_agent.stop() + + +class Start: + exposed = True + + def POST(self): + system.start_client() + system.start_update_loop() + reporter_agent.run() + return 'node-proxy daemon started' + + +class Stop: + exposed = True + + def POST(self): + _stop() + return 'node-proxy daemon stopped' + + +class API: + exposed = True + + system = System() + shutdown = Shutdown() + start = Start() + stop = Stop() + + def GET(self): + return 'use /system' + + +if __name__ == '__main__': + cherrypy.config.update({ + 'server.socket_port': 8080 + }) + config = {'/': { + 'request.methods_with_bodies': ('POST', 'PUT', 'PATCH'), + 'request.dispatch': cherrypy.dispatch.MethodDispatcher() + }} + system.start_update_loop() + reporter_agent.run() + cherrypy.quickstart(API(), config=config) -- 2.39.5