]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
node-proxy: fetch idrac details from ceph
authorGuillaume Abrioux <gabrioux@ibm.com>
Thu, 14 Sep 2023 15:53:34 +0000 (15:53 +0000)
committerGuillaume Abrioux <gabrioux@ibm.com>
Thu, 25 Jan 2024 14:43:30 +0000 (14:43 +0000)
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 <gabrioux@ibm.com>
src/cephadm/cephadm.py
src/cephadm/cephadmlib/node_proxy/server.py

index c0625a0f39bb1c2fc1044ef7535aaa01f6376135..ee2bca70ddd6a8b3ed2b34aafcfd99c6f6a0bb11 100755 (executable)
@@ -1475,12 +1475,21 @@ class CephadmAgent(DaemonForm):
 
     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:
index 714dafc31f5b63bc56f629b0acd8e804f7ecc111..b3c2306d88fcea3b529a9c11b6fac69720b240f9 100644 (file)
@@ -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...")