From: Guillaume Abrioux Date: Fri, 16 Jun 2023 11:06:03 +0000 (+0200) Subject: node-proxy: rename server-v2.py X-Git-Tag: v18.2.4~314^2~85 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d266ca9bdd688eb91244cd81f01db831a24502de;p=ceph.git node-proxy: rename server-v2.py As the previous version has been removed, let's rename this file. Signed-off-by: Guillaume Abrioux (cherry picked from commit 37f33ec87e830989dadd17dbfc0dfde1f58877c1) --- diff --git a/src/cephadm/node-proxy/server-v2.py b/src/cephadm/node-proxy/server-v2.py deleted file mode 100644 index 4eef854bea55..000000000000 --- a/src/cephadm/node-proxy/server-v2.py +++ /dev/null @@ -1,224 +0,0 @@ -import cherrypy -from redfish_dell import RedfishDell -from reporter import Reporter -from util import Config, Logger -from typing import Dict -from basesystem import BaseSystem -import sys -import argparse - -# for devel purposes -import os -DEVEL_ENV_VARS = ['REDFISH_HOST', - 'REDFISH_USERNAME', - 'REDFISH_PASSWORD'] - -DEFAULT_CONFIG = { - 'reporter': { - 'check_interval': 5, - 'push_data_max_retries': 30, - }, - 'system': { - 'refresh_interval': 5 - }, - 'server': { - 'port': 8080, - }, - 'logging': { - 'level': 20, - } -} - -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) - - -class Memory: - exposed = True - - def __init__(self, backend: BaseSystem) -> None: - self.backend = backend - - @cherrypy.tools.json_out() - def GET(self) -> Dict[str, Dict[str, Dict]]: - return {'memory': self.backend.get_memory()} - - -class Network: - exposed = True - - def __init__(self, backend: BaseSystem) -> None: - self.backend = backend - - @cherrypy.tools.json_out() - def GET(self) -> Dict[str, Dict[str, Dict]]: - return {'network': self.backend.get_network()} - - -class Processors: - exposed = True - - def __init__(self, backend: BaseSystem) -> None: - self.backend = backend - - @cherrypy.tools.json_out() - def GET(self) -> Dict[str, Dict[str, Dict]]: - return {'processors': self.backend.get_processors()} - - -class Storage: - exposed = True - - def __init__(self, backend: BaseSystem) -> None: - self.backend = backend - - @cherrypy.tools.json_out() - def GET(self) -> Dict[str, Dict[str, Dict]]: - return {'storage': self.backend.get_storage()} - - -class Status: - exposed = True - - def __init__(self, backend: BaseSystem) -> None: - self.backend = backend - - @cherrypy.tools.json_out() - def GET(self) -> Dict[str, Dict[str, Dict]]: - return {'status': self.backend.get_status()} - - -class System: - exposed = True - - def __init__(self, backend: BaseSystem) -> None: - self.memory = Memory(backend) - self.network = Network(backend) - self.processors = Processors(backend) - self.storage = Storage(backend) - self.status = Status(backend) - # actions = Actions() - # control = Control() - - -class Shutdown: - exposed = True - - def __init__(self, backend: BaseSystem, reporter: Reporter) -> None: - self.backend = backend - self.reporter = reporter - - def POST(self) -> str: - _stop(self.backend, self.reporter) - cherrypy.engine.exit() - return 'Server shutdown...' - - -def _stop(backend: BaseSystem, reporter: Reporter) -> None: - backend.stop_update_loop() - backend.client.logout() - reporter.stop() - - -class Start: - exposed = True - - def __init__(self, backend: BaseSystem, reporter: Reporter) -> None: - self.backend = backend - self.reporter = reporter - - def POST(self) -> str: - self.backend.start_client() - self.backend.start_update_loop() - self.reporter.run() - return 'node-proxy daemon started' - - -class Stop: - exposed = True - - def __init__(self, backend: BaseSystem, reporter: Reporter) -> None: - self.backend = backend - self.reporter = reporter - - def POST(self) -> str: - _stop(self.backend, self.reporter) - return 'node-proxy daemon stopped' - - -class ConfigReload: - exposed = True - - def __init__(self, config: Config) -> None: - self.config = config - - def POST(self) -> str: - self.config.reload() - return 'node-proxy config reloaded' - - -class API: - exposed = True - - def __init__(self, - backend: BaseSystem, - reporter: Reporter, - config: Config) -> None: - - self.system = System(backend) - self.shutdown = Shutdown(backend, reporter) - self.start = Start(backend, reporter) - self.stop = Stop(backend, reporter) - self.config_reload = ConfigReload(config) - - def GET(self) -> str: - return 'use /system' - - -def main() -> None: - - parser = argparse.ArgumentParser( - prog='node-proxy', - ) - parser.add_argument( - '--config', - dest='config', - type=str, - required=False, - default='/etc/ceph/node-proxy.yml' - ) - - args = parser.parse_args() - config = Config(args.config, default_config=DEFAULT_CONFIG) - - log = Logger(__name__, level=config.logging['level']) - # 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.logger.info("Server initialization...") - system = RedfishDell(host=host, - username=username, - password=password, - system_endpoint='/Systems/System.Embedded.1', - config=config) - reporter_agent = Reporter(system, "http://127.0.0.1:8000") - cherrypy.config.update({ - 'node_proxy': config, - 'server.socket_port': config.__dict__['server']['port'] - }) - c = {'/': { - 'request.methods_with_bodies': ('POST', 'PUT', 'PATCH'), - 'request.dispatch': cherrypy.dispatch.MethodDispatcher() - }} - system.start_update_loop() - reporter_agent.run() - cherrypy.quickstart(API(system, reporter_agent, config), config=c) - - -if __name__ == '__main__': - main() diff --git a/src/cephadm/node-proxy/server.py b/src/cephadm/node-proxy/server.py new file mode 100644 index 000000000000..4eef854bea55 --- /dev/null +++ b/src/cephadm/node-proxy/server.py @@ -0,0 +1,224 @@ +import cherrypy +from redfish_dell import RedfishDell +from reporter import Reporter +from util import Config, Logger +from typing import Dict +from basesystem import BaseSystem +import sys +import argparse + +# for devel purposes +import os +DEVEL_ENV_VARS = ['REDFISH_HOST', + 'REDFISH_USERNAME', + 'REDFISH_PASSWORD'] + +DEFAULT_CONFIG = { + 'reporter': { + 'check_interval': 5, + 'push_data_max_retries': 30, + }, + 'system': { + 'refresh_interval': 5 + }, + 'server': { + 'port': 8080, + }, + 'logging': { + 'level': 20, + } +} + +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) + + +class Memory: + exposed = True + + def __init__(self, backend: BaseSystem) -> None: + self.backend = backend + + @cherrypy.tools.json_out() + def GET(self) -> Dict[str, Dict[str, Dict]]: + return {'memory': self.backend.get_memory()} + + +class Network: + exposed = True + + def __init__(self, backend: BaseSystem) -> None: + self.backend = backend + + @cherrypy.tools.json_out() + def GET(self) -> Dict[str, Dict[str, Dict]]: + return {'network': self.backend.get_network()} + + +class Processors: + exposed = True + + def __init__(self, backend: BaseSystem) -> None: + self.backend = backend + + @cherrypy.tools.json_out() + def GET(self) -> Dict[str, Dict[str, Dict]]: + return {'processors': self.backend.get_processors()} + + +class Storage: + exposed = True + + def __init__(self, backend: BaseSystem) -> None: + self.backend = backend + + @cherrypy.tools.json_out() + def GET(self) -> Dict[str, Dict[str, Dict]]: + return {'storage': self.backend.get_storage()} + + +class Status: + exposed = True + + def __init__(self, backend: BaseSystem) -> None: + self.backend = backend + + @cherrypy.tools.json_out() + def GET(self) -> Dict[str, Dict[str, Dict]]: + return {'status': self.backend.get_status()} + + +class System: + exposed = True + + def __init__(self, backend: BaseSystem) -> None: + self.memory = Memory(backend) + self.network = Network(backend) + self.processors = Processors(backend) + self.storage = Storage(backend) + self.status = Status(backend) + # actions = Actions() + # control = Control() + + +class Shutdown: + exposed = True + + def __init__(self, backend: BaseSystem, reporter: Reporter) -> None: + self.backend = backend + self.reporter = reporter + + def POST(self) -> str: + _stop(self.backend, self.reporter) + cherrypy.engine.exit() + return 'Server shutdown...' + + +def _stop(backend: BaseSystem, reporter: Reporter) -> None: + backend.stop_update_loop() + backend.client.logout() + reporter.stop() + + +class Start: + exposed = True + + def __init__(self, backend: BaseSystem, reporter: Reporter) -> None: + self.backend = backend + self.reporter = reporter + + def POST(self) -> str: + self.backend.start_client() + self.backend.start_update_loop() + self.reporter.run() + return 'node-proxy daemon started' + + +class Stop: + exposed = True + + def __init__(self, backend: BaseSystem, reporter: Reporter) -> None: + self.backend = backend + self.reporter = reporter + + def POST(self) -> str: + _stop(self.backend, self.reporter) + return 'node-proxy daemon stopped' + + +class ConfigReload: + exposed = True + + def __init__(self, config: Config) -> None: + self.config = config + + def POST(self) -> str: + self.config.reload() + return 'node-proxy config reloaded' + + +class API: + exposed = True + + def __init__(self, + backend: BaseSystem, + reporter: Reporter, + config: Config) -> None: + + self.system = System(backend) + self.shutdown = Shutdown(backend, reporter) + self.start = Start(backend, reporter) + self.stop = Stop(backend, reporter) + self.config_reload = ConfigReload(config) + + def GET(self) -> str: + return 'use /system' + + +def main() -> None: + + parser = argparse.ArgumentParser( + prog='node-proxy', + ) + parser.add_argument( + '--config', + dest='config', + type=str, + required=False, + default='/etc/ceph/node-proxy.yml' + ) + + args = parser.parse_args() + config = Config(args.config, default_config=DEFAULT_CONFIG) + + log = Logger(__name__, level=config.logging['level']) + # 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.logger.info("Server initialization...") + system = RedfishDell(host=host, + username=username, + password=password, + system_endpoint='/Systems/System.Embedded.1', + config=config) + reporter_agent = Reporter(system, "http://127.0.0.1:8000") + cherrypy.config.update({ + 'node_proxy': config, + 'server.socket_port': config.__dict__['server']['port'] + }) + c = {'/': { + 'request.methods_with_bodies': ('POST', 'PUT', 'PATCH'), + 'request.dispatch': cherrypy.dispatch.MethodDispatcher() + }} + system.start_update_loop() + reporter_agent.run() + cherrypy.quickstart(API(system, reporter_agent, config), config=c) + + +if __name__ == '__main__': + main()