]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
using json file to get alertmanager/prometheus credentials
authorRedouane Kachach <rkachach@redhat.com>
Fri, 14 Jul 2023 11:06:50 +0000 (13:06 +0200)
committerAdam King <adking@redhat.com>
Tue, 25 Jul 2023 13:01:56 +0000 (09:01 -0400)
Signed-off-by: Redouane Kachach <rkachach@redhat.com>
src/pybind/mgr/orchestrator/module.py

index 1e2727d4087a405344dc701313eba70e728af7b0..f7de02c7f86c04fdbe9c9be16ec7626930abe4cd 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
@@ -47,6 +47,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,
@@ -883,25 +887,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: