]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
using json file to get alertmanager/prometheus credentials 53119/head
authorRedouane Kachach <rkachach@redhat.com>
Fri, 14 Jul 2023 11:06:50 +0000 (13:06 +0200)
committerAdam King <adking@redhat.com>
Wed, 23 Aug 2023 21:42:15 +0000 (17:42 -0400)
Signed-off-by: Redouane Kachach <rkachach@redhat.com>
(cherry picked from commit 519da2499a799a321900e995df0575ccf39a9c61)

src/pybind/mgr/orchestrator/module.py

index fb68c2ee1655c3975931258e40592ef2fa2245ab..fed54da791d1574810ffd6b8d616a41265af48b4 100644 (file)
@@ -1,7 +1,7 @@
 import enum
 import errno
 import json
-from typing import List, Set, Optional, Iterator, cast, Dict, Any, Union, Sequence, Mapping
+from typing import List, Set, Optional, Iterator, cast, Dict, Any, Union, Sequence, Mapping, Tuple
 import re
 import datetime
 import math
@@ -46,6 +46,10 @@ def nice_bytes(v: Optional[int]) -> str:
     return format_bytes(v, 5)
 
 
+class ArgumentError(Exception):
+    pass
+
+
 class HostDetails:
     def __init__(self,
                  host: Optional[HostSpec] = None,
@@ -874,25 +878,49 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule,
 
             return HandleCommandResult(stdout=table.get_string())
 
+    def _get_credentials(self, username: Optional[str] = None, password: Optional[str] = None, inbuf: Optional[str] = None) -> Tuple[str, str]:
+
+        _username = username
+        _password = password
+        if inbuf:
+            try:
+                credentials = json.loads(inbuf)
+                _username = credentials['username'].strip()
+                _password = credentials['password'].strip()
+            except (KeyError, json.JSONDecodeError):
+                raise ArgumentError("""
+                json provided for credentials did not include all necessary fields. Please setup json file as:
+
+                {
+                   "username": "USERNAME",
+                   "password": "PASSWORD"
+                }
+                """)
+
+        if not _username or not _password:
+            raise ArgumentError("Invalid arguments. Please provide arguments <username> <password> or -i <credentials_json_file>")
+
+        return _username, _password
+
     @_cli_write_command('orch prometheus set-credentials')
-    def _set_prometheus_access_info(self, user: str, password: Optional[str] = None, inbuf: Optional[str] = None) -> HandleCommandResult:
-        _password = password or inbuf
-        if not (user and _password):
-            return HandleCommandResult(-errno.EINVAL, "", ("Invalid arguments. Please provide arguments <user> <password> "
-                                                           "or -i <password_text_file>"))
-        completion = self.set_prometheus_access_info(user, _password)
-        result = raise_if_exception(completion)
-        return HandleCommandResult(stdout=json.dumps(result))
+    def _set_prometheus_access_info(self, username: Optional[str] = None, password: Optional[str] = None, inbuf: Optional[str] = None) -> HandleCommandResult:
+        try:
+            username, password = self._get_credentials(username, password, inbuf)
+            completion = self.set_prometheus_access_info(username, password)
+            result = raise_if_exception(completion)
+            return HandleCommandResult(stdout=json.dumps(result))
+        except ArgumentError as e:
+            return HandleCommandResult(-errno.EINVAL, "", (str(e)))
 
     @_cli_write_command('orch alertmanager set-credentials')
-    def _set_alertmanager_access_info(self, user: str, password: Optional[str] = None, inbuf: Optional[str] = None) -> HandleCommandResult:
-        _password = password or inbuf
-        if not (user and _password):
-            return HandleCommandResult(-errno.EINVAL, "", ("Invalid arguments. Please provide arguments <user> <password> "
-                                                           "or -i <password_text_file>"))
-        completion = self.set_alertmanager_access_info(user, _password)
-        result = raise_if_exception(completion)
-        return HandleCommandResult(stdout=json.dumps(result))
+    def _set_alertmanager_access_info(self, username: Optional[str] = None, password: Optional[str] = None, inbuf: Optional[str] = None) -> HandleCommandResult:
+        try:
+            username, password = self._get_credentials(username, password, inbuf)
+            completion = self.set_alertmanager_access_info(username, password)
+            result = raise_if_exception(completion)
+            return HandleCommandResult(stdout=json.dumps(result))
+        except ArgumentError as e:
+            return HandleCommandResult(-errno.EINVAL, "", (str(e)))
 
     @_cli_write_command('orch prometheus get-credentials')
     def _get_prometheus_access_info(self) -> HandleCommandResult: