From 519da2499a799a321900e995df0575ccf39a9c61 Mon Sep 17 00:00:00 2001 From: Redouane Kachach Date: Fri, 14 Jul 2023 13:06:50 +0200 Subject: [PATCH] using json file to get alertmanager/prometheus credentials Signed-off-by: Redouane Kachach --- src/pybind/mgr/orchestrator/module.py | 62 +++++++++++++++++++-------- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/src/pybind/mgr/orchestrator/module.py b/src/pybind/mgr/orchestrator/module.py index 1e2727d4087..f7de02c7f86 100644 --- a/src/pybind/mgr/orchestrator/module.py +++ b/src/pybind/mgr/orchestrator/module.py @@ -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 or -i ") + + 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 " - "or -i ")) - 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 " - "or -i ")) - 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: -- 2.39.5