From d8d3c6b3c11e75971113824dab638b0b50c6a22c Mon Sep 17 00:00:00 2001 From: Guillaume Abrioux Date: Thu, 14 Sep 2023 15:53:34 +0000 Subject: [PATCH] node-proxy: fetch idrac details from ceph The idrac details are now fetched from ceph (monitor kv store) and passed by the cephadm binary at the agent startup. Signed-off-by: Guillaume Abrioux (cherry picked from commit c5e705abaa9df28862f88ba319e8dd9c6d710fac) --- src/cephadm/cephadm.py | 13 +++++++++-- src/cephadm/cephadmlib/node_proxy/server.py | 24 +++++++-------------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/cephadm/cephadm.py b/src/cephadm/cephadm.py index 44fc5be7adc..236d46ded21 100755 --- a/src/cephadm/cephadm.py +++ b/src/cephadm/cephadm.py @@ -4917,12 +4917,21 @@ WantedBy=ceph-{fsid}.target def run(self) -> None: self.pull_conf_settings() - - t_node_proxy = Thread(target=cephadmlib.node_proxy.server.main) ssl_ctx = ssl.create_default_context() ssl_ctx.check_hostname = True ssl_ctx.verify_mode = ssl.CERT_REQUIRED ssl_ctx.load_verify_locations(self.ca_path) + node_proxy_data = json.dumps({'keyring': self.keyring, + 'host': self.host}) + node_proxy_data = node_proxy_data.encode('ascii') + result = self.query_endpoint(data=node_proxy_data, + endpoint='/node-proxy/idrac', + ssl_ctx=ssl_ctx) + result_json = json.loads(result) + t_node_proxy = Thread(target=cephadmlib.node_proxy.server.main, + kwargs={'host': result_json['result']['addr'], + 'username': result_json['result']['username'], + 'password': result_json['result']['password']) t_node_proxy.start() try: diff --git a/src/cephadm/cephadmlib/node_proxy/server.py b/src/cephadm/cephadmlib/node_proxy/server.py index 714dafc31f5..b3c2306d88f 100644 --- a/src/cephadm/cephadmlib/node_proxy/server.py +++ b/src/cephadm/cephadmlib/node_proxy/server.py @@ -7,12 +7,6 @@ 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, @@ -30,11 +24,6 @@ DEFAULT_CONFIG = { } } -#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 @@ -197,7 +186,10 @@ class API: return 'use /system or /admin endpoints' -def main() -> None: +def main(host: str = '', + username: str = '', + password: str = '') -> None: + # TODO: add a check and fail if host/username/password/data aren't passed # parser = argparse.ArgumentParser( # prog='node-proxy', @@ -214,10 +206,10 @@ def main() -> None: config = Config('/etc/ceph/node-proxy.yml', default_config=DEFAULT_CONFIG) log = Logger(__name__, level=config.__dict__['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') + + host = host + username = username + password = password # create the redfish system and the obsever log.logger.info("Server initialization...") -- 2.39.5