From ca2261781ec5a55e9130f0c40a947e131c061712 Mon Sep 17 00:00:00 2001 From: Courtney Caldwell Date: Tue, 8 Sep 2020 11:06:33 -0400 Subject: [PATCH] mgr/dashboard/api: generate offline API docs Generate Sphinx documentation from OpenAPI YAML spec: - Fixed Docs controller doc generation - Now dashboard Python doesn't fails if dashboard/frontend/dist doesn't exist - OpenAPI added to @ceph/api CODEOWNERS - Renamed Ceph-Dashboard API to Ceph REST or RESTful API. - OpenAPI Docs: fixed decorators and docstrings. - Sphinx Docs: updated dashboard and dev ones. Co-authored-by: Ernesto Puerta Fixes: https://tracker.ceph.com/issues/45863 Signed-off-by: Courtney Caldwell Signed-off-by: Ernesto Puerta --- .github/CODEOWNERS | 1 + admin/doc-requirements.txt | 1 + doc/api/index.rst | 6 + doc/conf.py | 1 + doc/dev/developer_guide/dash-devel.rst | 29 +- doc/mgr/ceph_api/index.rst | 90 + doc/mgr/dashboard.rst | 4 +- doc/mgr/index.rst | 1 + src/pybind/mgr/dashboard/CMakeLists.txt | 2 +- src/pybind/mgr/dashboard/__init__.py | 5 + .../mgr/dashboard/controllers/__init__.py | 8 +- .../mgr/dashboard/controllers/cephfs.py | 13 +- src/pybind/mgr/dashboard/controllers/docs.py | 72 +- src/pybind/mgr/dashboard/controllers/home.py | 18 +- .../mgr/dashboard/controllers/orchestrator.py | 2 +- src/pybind/mgr/dashboard/controllers/rbd.py | 10 +- .../mgr/dashboard/controllers/settings.py | 6 +- .../mgr/dashboard/controllers/telemetry.py | 4 +- src/pybind/mgr/dashboard/controllers/user.py | 6 +- src/pybind/mgr/dashboard/openapi.yaml | 9097 +++++++++++++++++ .../mgr/dashboard/requirements-extra.txt | 1 + src/pybind/mgr/dashboard/requirements.txt | 1 - src/pybind/mgr/dashboard/tox.ini | 30 +- 23 files changed, 9345 insertions(+), 63 deletions(-) create mode 100644 doc/mgr/ceph_api/index.rst create mode 100644 src/pybind/mgr/dashboard/openapi.yaml create mode 100644 src/pybind/mgr/dashboard/requirements-extra.txt diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1049333d8218c..3ceb08090423e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -8,6 +8,7 @@ /doc/mgr/dashboard.rst @ceph/dashboard # Dashboard API team +/src/pybind/mgr/dashboard/openapi.yaml @ceph/api /src/pybind/mgr/dashboard/controllers @ceph/api /src/pybind/mgr/dashboard/frontend/src/app/shared/api @ceph/api /src/pybind/mgr/dashboard/run-backend-api-tests.sh @ceph/api diff --git a/admin/doc-requirements.txt b/admin/doc-requirements.txt index 85302022d40ea..8e149e70b856d 100644 --- a/admin/doc-requirements.txt +++ b/admin/doc-requirements.txt @@ -8,3 +8,4 @@ sphinx-autodoc-typehints sphinx-prompt Sphinx-Substitution-Extensions typed-ast +sphinxcontrib-openapi diff --git a/doc/api/index.rst b/doc/api/index.rst index 50f7b068b62eb..e359b87f86c79 100644 --- a/doc/api/index.rst +++ b/doc/api/index.rst @@ -2,6 +2,12 @@ API Documentation =================== +Ceph RESTful API +================ + +See `Ceph REST API`_. + +.. _Ceph REST API: ../mgr/ceph_api/ Ceph Storage Cluster APIs ========================= diff --git a/doc/conf.py b/doc/conf.py index 797000d1bc86a..42b9d20bf5478 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -60,6 +60,7 @@ extensions = [ 'breathe', 'edit_on_github', 'ceph_releases', + 'sphinxcontrib.openapi' ] ditaa = shutil.which("ditaa") diff --git a/doc/dev/developer_guide/dash-devel.rst b/doc/dev/developer_guide/dash-devel.rst index 70522d3c9eade..29a84f683d3d0 100644 --- a/doc/dev/developer_guide/dash-devel.rst +++ b/doc/dev/developer_guide/dash-devel.rst @@ -1996,9 +1996,30 @@ Usage example: REST API documentation ~~~~~~~~~~~~~~~~~~~~~~ -There is an automatically generated Swagger UI page for documentation of the REST -API endpoints.However, by default it is not very detailed. There are two -decorators that can be used to add more information: +Ceph-Dashboard provides two types of documentation for the **Ceph RESTful API**: + +* **Static documentation**: available at :ref:`mgr-ceph-api`. This comes from a versioned specification located at ``src/pybind/mgr/dashboard/openapi.yaml``. +* **Interactive documentation**: available from a running Ceph-Dashboard instance (top-right ``?`` icon > API Docs). + +If changes are made to the ``controllers/`` directory, it's very likely that +they will result in changes to the generated OpenAPI specification. For that +reason, a checker has been implemented to block unintended changes. This check +is automatically triggered by the Pull Request CI (``make check``) and can be +also manually invoked: ``tox -e openapi-check``. + +If that checker failed, it means that the current Pull Request is modifying the +Ceph API and therefore: + +#. The versioned OpenAPI specification should be updated explicitly: ``tox -e openapi-fix``. +#. The team @ceph/api will be requested for reviews (this is automated via Github CODEOWNERS), in order to asses the impact of changes. + +Additionally, Sphinx documentation can be generated from the OpenAPI +specification with ``tox -e openapi-doc``. + +The Ceph RESTful OpenAPI specification is dynamically generated from the +``Controllers`` in ``controllers/`` directory. However, by default it is not +very detailed, so there are two decorators that can and should be used to add +more information: * ``@EndpointDoc()`` for documentation of endpoints. It has four optional arguments (explained below): ``description``, ``group``, ``parameters`` and @@ -2312,5 +2333,3 @@ plugin could be rewritten like this: return self.mute return [MuteController] - - diff --git a/doc/mgr/ceph_api/index.rst b/doc/mgr/ceph_api/index.rst new file mode 100644 index 0000000000000..f4e6836b09edf --- /dev/null +++ b/doc/mgr/ceph_api/index.rst @@ -0,0 +1,90 @@ +.. _mgr-ceph-api: + +================ +Ceph RESTful API +================ + +Introduction +============ +The **Ceph RESTful API** (henceforth **Ceph API**) is provided by the +:ref:`mgr-dashboard` module. The Ceph API +service is available at the same URL as the regular Ceph Dashboard, under the +``/api`` base path (please refer to :ref:`dashboard-host-name-and-port`):: + + http://:/api + +or, if HTTPS is enabled (please refer to :ref:`dashboard-ssl-tls-support`):: + + https://:/api + +The Ceph API leverages the following standards: + +* `HTTP 1.1 `_ for API syntax and semantics, +* `JSON `_ for content encoding, +* `HTTP Content Negotiation `_ and `MIME `_ for versioning, +* `OAuth 2.0 `_ and `JWT `_ for authentication and authorization. + +.. warning:: + Some endpoints are still under active development, and should be carefully + used since new Ceph releases could bring backward incompatible changes. + + +Authentication and Authorization +================================ + +Requests to the Ceph API pass through two access control checkpoints: + +* **Authentication**: ensures that the request is performed on behalf of an existing and valid user account. +* **Authorization**: ensures that the previously authenticated user can in fact perform a specific action (create, read, update or delete) on the target endpoint. + +So, prior to start consuming the Ceph API, a valid JSON Web Token (JWT) has to +be obtained, and it may then be reused for subsequent requests. The +``/api/auth`` endpoint will provide the valid token: + +.. code-block:: sh + + $ curl -X POST "https://example.com:8443/api/auth" \ + -H "Accept: application/vnd.ceph.api.v1.0+json" \ + -H "Content-Type: application/json" \ + -d '{"username": , "password": }' + + { "token": "", ...} + +The token obtained must be passed together with every API request in the +``Authorization`` HTTP header:: + + curl -H "Authorization: Bearer " ... + +Authentication and authorization can be further configured from the +Ceph CLI, the Ceph-Dashboard UI and the Ceph API itself (please refer to +:ref:`dashboard-user-role-management`). + +Versioning +========== + +One of the main goals of the Ceph API is to keep a stable interface. For this +purpose, Ceph API is built upon the following principles: + +* **Mandatory**: in order to avoid implicit defaults, all endpoints require an explicit default version (starting with ``1.0``). +* **Per-endpoint**: as this API wraps many different Ceph components, this allows for a finer-grained change control. + * **Content/MIME Type**: the version expected from a specific endpoint is stated by the ``Accept: application/vnd.ceph.api.v.+json`` HTTP header. If the current Ceph API server is not able to address that specific major version, a `415 - Unsupported Media Type `_ response will be returned. +* **Semantic Versioning**: with a ``major.minor`` version: + * Major changes are backward incompatible: they might result in non-additive changes to the request and/or response formats of a specific endpoint. + * Minor changes are backward/forward compatible: they basically consists of additive changes to the request or response formats of a specific endpoint. + +An example: + +.. code-block:: bash + + $ curl -X GET "https://example.com:8443/api/osd" \ + -H "Accept: application/vnd.ceph.api.v1.0+json" \ + -H "Authorization: Bearer " + + +Specification +============= + +.. openapi:: ../../../src/pybind/mgr/dashboard/openapi.yaml + :group: + :examples: + :encoding: utf-8 diff --git a/doc/mgr/dashboard.rst b/doc/mgr/dashboard.rst index cff1e4060901c..cfa5454f0d634 100644 --- a/doc/mgr/dashboard.rst +++ b/doc/mgr/dashboard.rst @@ -149,7 +149,7 @@ Status subpage containing a list of all OSDs and related management actions. * **Managers**: Displays the total number of active and standby Ceph Manager daemons (ceph-mgr) running alongside monitor daemons. -* **Object Gateway**: Displays the total number of active object gateways and +* **Object Gateway**: Displays the total number of active object gateways and provides a link to the subpage displaying a list of all object gateway daemons. * **Metadata Servers**: Displays total number of active and standby metadata servers daemons for CephFS (ceph-mds). @@ -290,6 +290,8 @@ wanted or required. See :ref:`dashboard-proxy-configuration` for more details. $ ceph mgr module disable dashboard $ ceph mgr module enable dashboard +.. _dashboard-host-name-and-port: + Host Name and Port ^^^^^^^^^^^^^^^^^^ diff --git a/doc/mgr/index.rst b/doc/mgr/index.rst index 2c92e43c64478..0dad31e929fb5 100644 --- a/doc/mgr/index.rst +++ b/doc/mgr/index.rst @@ -29,6 +29,7 @@ sensible. Writing modules Writing orchestrator plugins Dashboard module + Ceph RESTful API Alerts module DiskPrediction module Local pool module diff --git a/src/pybind/mgr/dashboard/CMakeLists.txt b/src/pybind/mgr/dashboard/CMakeLists.txt index e94817d4fa138..ea454f5ec0e16 100644 --- a/src/pybind/mgr/dashboard/CMakeLists.txt +++ b/src/pybind/mgr/dashboard/CMakeLists.txt @@ -107,5 +107,5 @@ add_dependencies(tests mgr-dashboard-frontend-build) if(WITH_TESTS) include(AddCephTest) - add_tox_test(mgr-dashboard TOX_ENVS lint check) + add_tox_test(mgr-dashboard TOX_ENVS lint check openapi-check) endif() diff --git a/src/pybind/mgr/dashboard/__init__.py b/src/pybind/mgr/dashboard/__init__.py index 548d401238f58..b05da375c8af5 100644 --- a/src/pybind/mgr/dashboard/__init__.py +++ b/src/pybind/mgr/dashboard/__init__.py @@ -37,6 +37,11 @@ else: logging.root.handlers[0].setLevel(logging.DEBUG) os.environ['PATH'] = '{}:{}'.format(os.path.abspath('../../../../build/bin'), os.environ['PATH']) + import sys + + # Used to allow the running of a tox-based yml doc generator from the dashboard directory + if os.path.abspath(sys.path[0]) == os.getcwd(): + sys.path.pop(0) from tests import mock # type: ignore diff --git a/src/pybind/mgr/dashboard/controllers/__init__.py b/src/pybind/mgr/dashboard/controllers/__init__.py index 092e55c1a1007..6a45c2f9c9ccf 100644 --- a/src/pybind/mgr/dashboard/controllers/__init__.py +++ b/src/pybind/mgr/dashboard/controllers/__init__.py @@ -188,6 +188,11 @@ class UiApiController(Controller): security_scope=security_scope, secure=secure) + def __call__(self, cls): + cls = super(UiApiController, self).__call__(cls) + cls._api_endpoint = False + return cls + def Endpoint(method=None, path=None, path_params=None, query_params=None, # noqa: N802 json_response=True, proxy=False, xml=False): @@ -582,7 +587,8 @@ class BaseController(object): @property def is_api(self): - return hasattr(self.ctrl, '_api_endpoint') + # changed from hasattr to getattr: some ui-based api inherit _api_endpoint + return getattr(self.ctrl, '_api_endpoint', False) @property def is_secure(self): diff --git a/src/pybind/mgr/dashboard/controllers/cephfs.py b/src/pybind/mgr/dashboard/controllers/cephfs.py index 41708f93d2daa..272feda0b8206 100644 --- a/src/pybind/mgr/dashboard/controllers/cephfs.py +++ b/src/pybind/mgr/dashboard/controllers/cephfs.py @@ -359,7 +359,7 @@ class CephFS(RESTController): List directories of specified path. :param fs_id: The filesystem identifier. :param path: The path where to start listing the directory content. - Defaults to '/' if not set. + Defaults to '/' if not set. :type path: str | bytes :param depth: The number of steps to go down the directory tree. :type depth: int | str @@ -378,7 +378,7 @@ class CephFS(RESTController): """ Transforms input path parameter of ls_dir methods (api and ui-api). :param path: The path where to start listing the directory content. - Defaults to '/' if not set. + Defaults to '/' if not set. :type path: str | bytes :return: Normalized path or root path :return: str @@ -436,7 +436,7 @@ class CephFS(RESTController): :param fs_id: The filesystem identifier. :param path: The path of the directory/file. :return: Returns a dictionary containing 'max_bytes' - and 'max_files'. + and 'max_files'. :rtype: dict """ cfs = self._cephfs_instance(fs_id) @@ -449,9 +449,8 @@ class CephFS(RESTController): Create a snapshot. :param fs_id: The filesystem identifier. :param path: The path of the directory. - :param name: The name of the snapshot. If not specified, - a name using the current time in RFC3339 UTC format - will be generated. + :param name: The name of the snapshot. If not specified, a name using the + current time in RFC3339 UTC format will be generated. :return: The name of the snapshot. :rtype: str """ @@ -517,7 +516,7 @@ class CephFsUi(CephFS): :param fs_id: The filesystem identifier. :type fs_id: int | str :param path: The path where to start listing the directory content. - Defaults to '/' if not set. + Defaults to '/' if not set. :type path: str | bytes :param depth: The number of steps to go down the directory tree. :type depth: int | str diff --git a/src/pybind/mgr/dashboard/controllers/docs.py b/src/pybind/mgr/dashboard/controllers/docs.py index f5888c0c4c96d..9aaeaa0c1b680 100644 --- a/src/pybind/mgr/dashboard/controllers/docs.py +++ b/src/pybind/mgr/dashboard/controllers/docs.py @@ -9,8 +9,7 @@ from . import Controller, BaseController, Endpoint, ENDPOINT_MAP, \ allow_empty_body from .. import mgr -from ..tools import str_to_bool - +NO_DESCRIPTION_AVAILABLE = "*No description available*" logger = logging.getLogger('controllers.docs') @@ -44,7 +43,7 @@ class Docs(BaseController): if tag_name not in tag_map or not tag_map[tag_name]: tag_map[tag_name] = tag_descr - tags = [{'name': k, 'description': v if v else "*No description available*"} + tags = [{'name': k, 'description': v if v else NO_DESCRIPTION_AVAILABLE} for k, v in tag_map.items()] tags.sort(key=lambda e: e['name']) return tags @@ -231,18 +230,15 @@ class Docs(BaseController): _type = cls._type_to_str(param['type']) else: _type = cls._gen_type(param) - if 'description' in param: - descr = param['description'] - else: - descr = "*No description available*" res = { 'name': param['name'], 'in': location, 'schema': { 'type': _type }, - 'description': descr } + if param.get('description'): + res['description'] = param['description'] if param['required']: res['required'] = True elif param['default'] is None: @@ -273,7 +269,7 @@ class Docs(BaseController): method = endpoint.method func = endpoint.func - summary = "No description available" + summary = '' resp = {} p_info = [] if hasattr(func, 'doc_info'): @@ -293,11 +289,12 @@ class Docs(BaseController): methods[method.lower()] = { 'tags': [cls._get_tag(endpoint)], - 'summary': summary, 'description': func.__doc__, 'parameters': params, 'responses': cls._gen_responses(method, resp) } + if summary: + methods[method.lower()]['summary'] = summary if method.lower() in ['post', 'put']: if endpoint.body_params: @@ -322,40 +319,34 @@ class Docs(BaseController): return paths - def _gen_spec(self, all_endpoints=False, base_url=""): + @classmethod + def _gen_spec(cls, all_endpoints=False, base_url="", offline=False): if all_endpoints: base_url = "" - host = cherrypy.request.base - host = host[host.index(':')+3:] + host = cherrypy.request.base.split('://', 1)[1] if not offline else 'example.com' logger.debug("Host: %s", host) - paths = self._gen_paths(all_endpoints) + paths = cls._gen_paths(all_endpoints) if not base_url: base_url = "/" - scheme = 'https' - ssl = str_to_bool(mgr.get_localized_module_option('ssl', True)) - if not ssl: - scheme = 'http' + scheme = 'https' if offline or mgr.get_localized_module_option('ssl') else 'http' spec = { 'openapi': "3.0.0", 'info': { - 'description': "Please note that this API is not an official " - "Ceph REST API to be used by third-party " - "applications. It's primary purpose is to serve" - " the requirements of the Ceph Dashboard and is" - " subject to change at any time. Use at your " - "own risk.", + 'description': "This is the official Ceph REST API", 'version': "v1", - 'title': "Ceph-Dashboard REST API" + 'title': "Ceph REST API" }, 'host': host, 'basePath': base_url, - 'servers': [{'url': "{}{}".format(cherrypy.request.base, base_url)}], - 'tags': self._gen_tags(all_endpoints), + 'servers': [{'url': "{}{}".format( + cherrypy.request.base if not offline else '', + base_url)}], + 'tags': cls._gen_tags(all_endpoints), 'schemes': [scheme], 'paths': paths, 'components': { @@ -461,3 +452,30 @@ class Docs(BaseController): @allow_empty_body def _with_token(self, token, all_endpoints=False): return self._swagger_ui_page(all_endpoints, token) + + +if __name__ == "__main__": + import sys + import yaml + from . import generate_routes + + def fix_null_descr(obj): + """ + A hot fix for errors caused by null description values when generating + static documentation: better fix would be default values in source + to be 'None' strings: however, decorator changes didn't resolve + """ + return {k: fix_null_descr(v) for k, v in obj.items() if v is not None} \ + if isinstance(obj, dict) else obj + + generate_routes("/api") + try: + with open(sys.argv[1], 'w') as f: + # pylint: disable=protected-access + yaml.dump( + fix_null_descr(Docs._gen_spec(all_endpoints=False, base_url="/", offline=True)), + f) + except IndexError: + sys.exit("Output file name missing; correct syntax is: `cmd `") + except IsADirectoryError: + sys.exit("Specified output is a directory; correct syntax is: `cmd `") diff --git a/src/pybind/mgr/dashboard/controllers/home.py b/src/pybind/mgr/dashboard/controllers/home.py index 90f976329c587..6dcac57c8722b 100644 --- a/src/pybind/mgr/dashboard/controllers/home.py +++ b/src/pybind/mgr/dashboard/controllers/home.py @@ -9,7 +9,6 @@ try: from functools import lru_cache except ImportError: from ..plugins.lru_cache import lru_cache - import cherrypy from cherrypy.lib.static import serve_file @@ -22,11 +21,16 @@ logger = logging.getLogger("controllers.home") class LanguageMixin(object): def __init__(self): - self.LANGUAGES = { - f - for f in os.listdir(mgr.get_frontend_path()) - if os.path.isdir(os.path.join(mgr.get_frontend_path(), f)) - } + try: + self.LANGUAGES = { + f + for f in os.listdir(mgr.get_frontend_path()) + if os.path.isdir(os.path.join(mgr.get_frontend_path(), f)) + } + except FileNotFoundError: + logger.exception("Build directory missing") + self.LANGUAGES = {} + self.LANGUAGES_PATH_MAP = { f.lower(): { 'lang': f, @@ -41,7 +45,7 @@ class LanguageMixin(object): 'lang': self.LANGUAGES_PATH_MAP[lang]['lang'], 'path': self.LANGUAGES_PATH_MAP[lang]['path'] } - with open("{}/../package.json".format(mgr.get_frontend_path()), + with open(os.path.normpath("{}/../package.json".format(mgr.get_frontend_path())), "r") as f: config = json.load(f) self.DEFAULT_LANGUAGE = config['config']['locale'] diff --git a/src/pybind/mgr/dashboard/controllers/orchestrator.py b/src/pybind/mgr/dashboard/controllers/orchestrator.py index 8a6cf0f9a92b9..445fb7235a7ec 100644 --- a/src/pybind/mgr/dashboard/controllers/orchestrator.py +++ b/src/pybind/mgr/dashboard/controllers/orchestrator.py @@ -103,7 +103,7 @@ class Orchestrator(RESTController): Identify a device by switching on the device light for N seconds. :param hostname: The hostname of the device to process. :param device: The device identifier to process, e.g. ``/dev/dm-0`` or - ``ABC1234DEF567-1R1234_ABC8DE0Q``. + ``ABC1234DEF567-1R1234_ABC8DE0Q``. :param duration: The duration in seconds how long the LED should flash. """ orch = OrchClient.instance() diff --git a/src/pybind/mgr/dashboard/controllers/rbd.py b/src/pybind/mgr/dashboard/controllers/rbd.py index ac2188c80156d..97e1f81fab37b 100644 --- a/src/pybind/mgr/dashboard/controllers/rbd.py +++ b/src/pybind/mgr/dashboard/controllers/rbd.py @@ -344,7 +344,10 @@ class RbdSnapshot(RESTController): @ControllerDoc("RBD Trash Management API", "RbdTrash") class RbdTrash(RESTController): RESOURCE_ID = "image_id_spec" - rbd_inst = rbd.RBD() + + def __init__(self): + super().__init__() + self.rbd_inst = rbd.RBD() @ViewCache() def _trash_pool_list(self, pool_name): @@ -432,7 +435,10 @@ class RbdTrash(RESTController): @ApiController('/block/pool/{pool_name}/namespace', Scope.RBD_IMAGE) @ControllerDoc("RBD Namespace Management API", "RbdNamespace") class RbdNamespace(RESTController): - rbd_inst = rbd.RBD() + + def __init__(self): + super().__init__() + self.rbd_inst = rbd.RBD() def create(self, pool_name, namespace): with mgr.rados.open_ioctx(pool_name) as ioctx: diff --git a/src/pybind/mgr/dashboard/controllers/settings.py b/src/pybind/mgr/dashboard/controllers/settings.py index dc35eec9561ab..417a07c7bab57 100644 --- a/src/pybind/mgr/dashboard/controllers/settings.py +++ b/src/pybind/mgr/dashboard/controllers/settings.py @@ -54,7 +54,7 @@ class Settings(RESTController): """ Get the list of available options. :param names: A comma separated list of option names that should - be processed. Defaults to ``None``. + be processed. Defaults to ``None``. :type names: None|str :return: A list of available options. :rtype: list[dict] @@ -83,7 +83,7 @@ class Settings(RESTController): Get the given option. :param name: The name of the option. :return: Returns a dict containing the name, type, - default value and current value of the given option. + default value and current value of the given option. :rtype: dict """ return self._get(name) @@ -108,7 +108,7 @@ class StandardSettings(RESTController): """ Get various Dashboard related settings. :return: Returns a dictionary containing various Dashboard - settings. + settings. :rtype: dict """ return { # pragma: no cover - no complexity there diff --git a/src/pybind/mgr/dashboard/controllers/telemetry.py b/src/pybind/mgr/dashboard/controllers/telemetry.py index 0478ba6875524..34c0a30a142a9 100644 --- a/src/pybind/mgr/dashboard/controllers/telemetry.py +++ b/src/pybind/mgr/dashboard/controllers/telemetry.py @@ -223,8 +223,8 @@ class Telemetry(RESTController): :param enable: Enable or disable sending data :type enable: bool :param license_name: License string e.g. 'sharing-1-0' to - make sure the user is aware of and accepts the license - for sharing Telemetry data. + make sure the user is aware of and accepts the license + for sharing Telemetry data. :type license_name: string """ if enable: diff --git a/src/pybind/mgr/dashboard/controllers/user.py b/src/pybind/mgr/dashboard/controllers/user.py index e44748f2ab5a9..bba47a8c4d3c7 100644 --- a/src/pybind/mgr/dashboard/controllers/user.py +++ b/src/pybind/mgr/dashboard/controllers/user.py @@ -168,9 +168,9 @@ class UserPasswordPolicy(RESTController): :param password: The password to validate. :param username: The name of the user (optional). :param old_password: The old password (optional). - :return: An object with the properties valid, credits and valuation. - 'credits' contains the password complexity credits and - 'valuation' the textual summary of the validation. + :return: An object with properties valid, credits and valuation. + 'credits' contains the password complexity credits and + 'valuation' the textual summary of the validation. """ result = {'valid': False, 'credits': 0, 'valuation': None} try: diff --git a/src/pybind/mgr/dashboard/openapi.yaml b/src/pybind/mgr/dashboard/openapi.yaml new file mode 100644 index 0000000000000..bba9a054a30ee --- /dev/null +++ b/src/pybind/mgr/dashboard/openapi.yaml @@ -0,0 +1,9097 @@ +basePath: / +components: + securitySchemes: + jwt: + bearerFormat: JWT + scheme: bearer + type: http +host: example.com +info: + description: This is the official Ceph REST API + title: Ceph REST API + version: v1 +openapi: 3.0.0 +paths: + /api/auth: + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + password: + type: string + username: + type: string + required: + - username + - password + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + tags: + - Auth + /api/auth/check: + post: + parameters: + - description: Authentication Token + in: query + name: token + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + token: + description: Authentication Token + type: string + required: + - token + type: object + responses: + '201': + content: + application/json: + schema: + properties: + permissions: + description: List of permissions acquired + properties: + cephfs: + description: '' + items: + type: string + type: array + required: + - cephfs + type: object + pwdUpdateRequired: + description: Is password update required? + type: boolean + sso: + description: Uses single sign on? + type: boolean + username: + description: Username + type: string + required: + - username + - permissions + - sso + - pwdUpdateRequired + type: object + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + summary: Check token Authentication + tags: + - Auth + /api/auth/logout: + post: + parameters: [] + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + tags: + - Auth + /api/block/image: + get: + parameters: + - allowEmptyValue: true + description: Pool Name + in: query + name: pool_name + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + pool_name: + description: pool name + type: string + status: + description: Status of the image + type: integer + value: + description: '' + items: + type: string + type: array + required: + - status + - value + - pool_name + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Rbd Images + tags: + - Rbd + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + configuration: + type: string + data_pool: + type: string + features: + type: string + name: + type: string + namespace: + type: string + obj_size: + type: integer + pool_name: + type: string + size: + type: integer + stripe_count: + type: integer + stripe_unit: + type: string + required: + - name + - pool_name + - size + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Rbd + /api/block/image/default_features: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Rbd + /api/block/image/trash: + get: + description: List all entries from trash. + parameters: + - allowEmptyValue: true + description: Name of the pool + in: query + name: pool_name + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + pool_name: + description: pool name + type: string + status: + description: '' + type: integer + value: + description: '' + items: + type: string + type: array + required: + - status + - value + - pool_name + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Get RBD Trash Details by pool name + tags: + - RbdTrash + /api/block/image/trash/purge: + post: + description: Remove all expired images from trash. + parameters: + - allowEmptyValue: true + in: query + name: pool_name + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + pool_name: + type: string + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdTrash + /api/block/image/trash/{image_id_spec}: + delete: + description: "Delete an image from trash.\n If image deferment time has\ + \ not expired you can not removed it unless use force.\n But an actively\ + \ in-use by clones or has snapshots can not be removed.\n " + parameters: + - in: path + name: image_id_spec + required: true + schema: + type: string + - default: false + in: query + name: force + schema: + type: boolean + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdTrash + /api/block/image/trash/{image_id_spec}/restore: + post: + description: Restore an image from trash. + parameters: + - in: path + name: image_id_spec + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + new_image_name: + type: string + required: + - new_image_name + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdTrash + /api/block/image/{image_spec}: + delete: + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Rbd + get: + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Rbd + put: + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + configuration: + type: string + features: + type: string + name: + type: string + size: + type: integer + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Rbd + /api/block/image/{image_spec}/copy: + post: + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + configuration: + type: string + data_pool: + type: string + dest_image_name: + type: string + dest_namespace: + type: string + dest_pool_name: + type: string + features: + type: string + obj_size: + type: integer + snapshot_name: + type: string + stripe_count: + type: integer + stripe_unit: + type: string + required: + - dest_pool_name + - dest_namespace + - dest_image_name + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Rbd + /api/block/image/{image_spec}/flatten: + post: + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Rbd + /api/block/image/{image_spec}/move_trash: + post: + description: "Move an image to the trash.\n Images, even ones actively\ + \ in-use by clones,\n can be moved to the trash and deleted at a later\ + \ time.\n " + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + delay: + default: 0 + type: integer + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Rbd + /api/block/image/{image_spec}/snap: + post: + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + snapshot_name: + type: string + required: + - snapshot_name + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdSnapshot + /api/block/image/{image_spec}/snap/{snapshot_name}: + delete: + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + - in: path + name: snapshot_name + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdSnapshot + put: + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + - in: path + name: snapshot_name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + is_protected: + type: boolean + new_snap_name: + type: string + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdSnapshot + /api/block/image/{image_spec}/snap/{snapshot_name}/clone: + post: + description: "\n Clones a snapshot to an image\n " + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + - in: path + name: snapshot_name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + child_image_name: + type: string + child_namespace: + type: string + child_pool_name: + type: string + configuration: + type: string + data_pool: + type: string + features: + type: string + obj_size: + type: integer + stripe_count: + type: integer + stripe_unit: + type: string + required: + - child_pool_name + - child_image_name + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdSnapshot + /api/block/image/{image_spec}/snap/{snapshot_name}/rollback: + post: + parameters: + - in: path + name: image_spec + required: true + schema: + type: string + - in: path + name: snapshot_name + required: true + schema: + type: string + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdSnapshot + /api/block/mirroring/pool/{pool_name}: + get: + parameters: + - description: Pool Name + in: path + name: pool_name + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + mirror_mode: + description: Mirror Mode + type: string + required: + - mirror_mode + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Rbd Mirroring Summary + tags: + - RbdMirroringPoolMode + put: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + mirror_mode: + type: string + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdMirroringPoolMode + /api/block/mirroring/pool/{pool_name}/bootstrap/peer: + post: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + direction: + type: string + token: + type: string + required: + - direction + - token + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdMirroringPoolBootstrap + /api/block/mirroring/pool/{pool_name}/bootstrap/token: + post: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdMirroringPoolBootstrap + /api/block/mirroring/pool/{pool_name}/peer: + get: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdMirroringPoolPeer + post: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + client_id: + type: string + cluster_name: + type: string + key: + type: string + mon_host: + type: string + required: + - cluster_name + - client_id + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdMirroringPoolPeer + /api/block/mirroring/pool/{pool_name}/peer/{peer_uuid}: + delete: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + - in: path + name: peer_uuid + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdMirroringPoolPeer + get: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + - in: path + name: peer_uuid + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdMirroringPoolPeer + put: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + - in: path + name: peer_uuid + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + client_id: + type: string + cluster_name: + type: string + key: + type: string + mon_host: + type: string + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdMirroringPoolPeer + /api/block/mirroring/site_name: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + site_name: + description: Site Name + type: string + required: + - site_name + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Rbd Mirroring sitename + tags: + - RbdMirroring + put: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + site_name: + type: string + required: + - site_name + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdMirroring + /api/block/mirroring/summary: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + content_data: + description: '' + properties: + daemons: + description: '' + items: + type: string + type: array + image_error: + description: '' + items: + type: string + type: array + image_ready: + description: '' + items: + type: string + type: array + image_syncing: + description: '' + items: + type: string + type: array + pools: + description: Pools + items: + properties: + health: + description: pool health + type: string + health_color: + description: '' + type: string + mirror_mode: + description: status + type: string + name: + description: Pool name + type: string + peer_uuids: + description: '' + items: + type: string + type: array + required: + - name + - health_color + - health + - mirror_mode + - peer_uuids + type: object + type: array + required: + - daemons + - pools + - image_error + - image_syncing + - image_ready + type: object + site_name: + description: site name + type: string + status: + description: '' + type: integer + required: + - site_name + - status + - content_data + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Rbd Mirroring Summary + tags: + - RbdMirroringSummary + /api/block/pool/{pool_name}/namespace: + get: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdNamespace + post: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + namespace: + type: string + required: + - namespace + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdNamespace + /api/block/pool/{pool_name}/namespace/{namespace}: + delete: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + - in: path + name: namespace + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RbdNamespace + /api/cephfs: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + /api/cephfs/{fs_id}: + get: + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + /api/cephfs/{fs_id}/client/{client_id}: + delete: + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + - in: path + name: client_id + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + /api/cephfs/{fs_id}/clients: + get: + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + /api/cephfs/{fs_id}/get_root_directory: + get: + description: "\n The root directory that can't be fetched using ls_dir\ + \ (api).\n :param fs_id: The filesystem identifier.\n :return:\ + \ The root directory\n :rtype: dict\n " + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + /api/cephfs/{fs_id}/ls_dir: + get: + description: "\n List directories of specified path.\n :param\ + \ fs_id: The filesystem identifier.\n :param path: The path where to\ + \ start listing the directory content.\n Defaults to '/' if not set.\n\ + \ :type path: str | bytes\n :param depth: The number of steps\ + \ to go down the directory tree.\n :type depth: int | str\n \ + \ :return: The names of the directories below the specified path.\n \ + \ :rtype: list\n " + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + - allowEmptyValue: true + in: query + name: path + schema: + type: string + - default: 1 + in: query + name: depth + schema: + type: integer + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + /api/cephfs/{fs_id}/mds_counters: + get: + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + - allowEmptyValue: true + in: query + name: counters + schema: + type: integer + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + /api/cephfs/{fs_id}/quota: + get: + description: "\n Get the quotas of the specified path.\n :param\ + \ fs_id: The filesystem identifier.\n :param path: The path of the\ + \ directory/file.\n :return: Returns a dictionary containing 'max_bytes'\n\ + \ and 'max_files'.\n :rtype: dict\n " + parameters: + - description: File System Identifier + in: path + name: fs_id + required: true + schema: + type: string + - description: File System Path + in: query + name: path + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + max_bytes: + description: '' + type: integer + max_files: + description: '' + type: integer + required: + - max_bytes + - max_files + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Get Cephfs Quotas of the specified path + tags: + - Cephfs + put: + description: "\n Set the quotas of the specified path.\n :param\ + \ fs_id: The filesystem identifier.\n :param path: The path of the\ + \ directory/file.\n :param max_bytes: The byte limit.\n :param\ + \ max_files: The file limit.\n " + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + max_bytes: + type: string + max_files: + type: string + path: + type: string + required: + - path + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + /api/cephfs/{fs_id}/snapshot: + delete: + description: "\n Remove a snapshot.\n :param fs_id: The filesystem\ + \ identifier.\n :param path: The path of the directory.\n :param\ + \ name: The name of the snapshot.\n " + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + - in: query + name: path + required: true + schema: + type: string + - in: query + name: name + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + post: + description: "\n Create a snapshot.\n :param fs_id: The filesystem\ + \ identifier.\n :param path: The path of the directory.\n :param\ + \ name: The name of the snapshot. If not specified, a name using the\n \ + \ current time in RFC3339 UTC format will be generated.\n :return:\ + \ The name of the snapshot.\n :rtype: str\n " + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + name: + type: string + path: + type: string + required: + - path + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + /api/cephfs/{fs_id}/tree: + delete: + description: "\n Remove a directory.\n :param fs_id: The filesystem\ + \ identifier.\n :param path: The path of the directory.\n " + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + - in: query + name: path + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + post: + description: "\n Create a directory.\n :param fs_id: The filesystem\ + \ identifier.\n :param path: The path of the directory.\n " + parameters: + - in: path + name: fs_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + path: + type: string + required: + - path + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Cephfs + /api/cluster_conf: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - ClusterConfiguration + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - ClusterConfiguration + put: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + options: + type: string + required: + - options + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - ClusterConfiguration + /api/cluster_conf/filter: + get: + parameters: + - allowEmptyValue: true + description: Config option names + in: query + name: names + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + can_update_at_runtime: + description: Check if can update at runtime + type: boolean + daemon_default: + description: Daemon specific default value + type: string + default: + description: Default value for the config option + type: string + desc: + description: Description of the configuration + type: string + enum_values: + description: List of enums allowed + items: + type: string + type: array + flags: + description: List of flags associated + items: + type: string + type: array + level: + description: Config option level + type: string + long_desc: + description: Elaborated description + type: string + max: + description: Maximum value + type: string + min: + description: Minimum value + type: string + name: + description: Name of the config option + type: string + see_also: + description: Related config options + items: + type: string + type: array + services: + description: Services associated with the config option + items: + type: string + type: array + tags: + description: Tags associated with the cluster + items: + type: string + type: array + type: + description: Config option type + type: string + required: + - name + - type + - level + - desc + - long_desc + - default + - daemon_default + - tags + - services + - see_also + - enum_values + - min + - max + - can_update_at_runtime + - flags + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Get Cluster Configuration by name + tags: + - ClusterConfiguration + /api/cluster_conf/{name}: + delete: + parameters: + - in: path + name: name + required: true + schema: + type: string + - in: query + name: section + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - ClusterConfiguration + get: + parameters: + - in: path + name: name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - ClusterConfiguration + /api/crush_rule: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + max_size: + description: Maximum size of Rule + type: integer + min_size: + description: Minimum size of Rule + type: integer + rule_id: + description: Rule ID + type: integer + rule_name: + description: Rule Name + type: string + ruleset: + description: RuleSet related to the rule + type: integer + steps: + description: Steps included in the rule + items: + type: object + type: array + type: + description: Type of Rule + type: integer + required: + - rule_id + - rule_name + - ruleset + - type + - min_size + - max_size + - steps + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: List Crush Rule Configuration + tags: + - CrushRule + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + device_class: + type: string + failure_domain: + type: string + name: + type: string + root: + type: string + required: + - name + - root + - failure_domain + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - CrushRule + /api/crush_rule/{name}: + delete: + parameters: + - in: path + name: name + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - CrushRule + get: + parameters: + - in: path + name: name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - CrushRule + /api/erasure_code_profile: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + crush-failure-domain: + description: '' + type: string + k: + description: Number of data chunks + type: integer + m: + description: Number of coding chunks + type: integer + name: + description: Name of the profile + type: string + plugin: + description: Plugin Info + type: string + technique: + description: '' + type: string + required: + - crush-failure-domain + - k + - m + - plugin + - technique + - name + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: List Erasure Code Profile Information + tags: + - ErasureCodeProfile + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + name: + type: string + required: + - name + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - ErasureCodeProfile + /api/erasure_code_profile/{name}: + delete: + parameters: + - in: path + name: name + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - ErasureCodeProfile + get: + parameters: + - in: path + name: name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - ErasureCodeProfile + /api/feature_toggles: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + cephfs: + description: '' + type: boolean + iscsi: + description: '' + type: boolean + mirroring: + description: '' + type: boolean + nfs: + description: '' + type: boolean + rbd: + description: '' + type: boolean + rgw: + description: '' + type: boolean + required: + - rbd + - mirroring + - iscsi + - cephfs + - rgw + - nfs + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Get List Of Features + tags: + - FeatureTogglesEndpoint + /api/grafana/dashboards: + post: + parameters: [] + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Grafana + /api/grafana/url: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + instance: + description: grafana instance + type: string + required: + - instance + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: List Grafana URL Instance + tags: + - Grafana + /api/grafana/validation/{params}: + get: + parameters: + - in: path + name: params + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Grafana + /api/health/full: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Health + /api/health/minimal: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + client_perf: + description: '' + properties: + read_bytes_sec: + description: '' + type: integer + read_op_per_sec: + description: '' + type: integer + recovering_bytes_per_sec: + description: '' + type: integer + write_bytes_sec: + description: '' + type: integer + write_op_per_sec: + description: '' + type: integer + required: + - read_bytes_sec + - read_op_per_sec + - recovering_bytes_per_sec + - write_bytes_sec + - write_op_per_sec + type: object + df: + description: '' + properties: + stats: + description: '' + properties: + total_avail_bytes: + description: '' + type: integer + total_bytes: + description: '' + type: integer + total_used_raw_bytes: + description: '' + type: integer + required: + - total_avail_bytes + - total_bytes + - total_used_raw_bytes + type: object + required: + - stats + type: object + fs_map: + description: '' + properties: + filesystems: + description: '' + items: + properties: + mdsmap: + description: '' + properties: + balancer: + description: '' + type: string + compat: + description: '' + properties: + compat: + description: '' + type: string + incompat: + description: '' + type: string + ro_compat: + description: '' + type: string + required: + - compat + - ro_compat + - incompat + type: object + created: + description: '' + type: string + damaged: + description: '' + items: + type: integer + type: array + data_pools: + description: '' + items: + type: integer + type: array + enabled: + description: '' + type: boolean + epoch: + description: '' + type: integer + ever_allowed_features: + description: '' + type: integer + explicitly_allowed_features: + description: '' + type: integer + failed: + description: '' + items: + type: integer + type: array + flags: + description: '' + type: integer + fs_name: + description: '' + type: string + in: + description: '' + items: + type: integer + type: array + info: + description: '' + type: string + last_failure: + description: '' + type: integer + last_failure_osd_epoch: + description: '' + type: integer + max_file_size: + description: '' + type: integer + max_mds: + description: '' + type: integer + metadata_pool: + description: '' + type: integer + modified: + description: '' + type: string + required_client_features: + description: '' + type: string + root: + description: '' + type: integer + session_autoclose: + description: '' + type: integer + session_timeout: + description: '' + type: integer + standby_count_wanted: + description: '' + type: integer + stopped: + description: '' + items: + type: integer + type: array + tableserver: + description: '' + type: integer + up: + description: '' + type: string + required: + - session_autoclose + - balancer + - up + - last_failure_osd_epoch + - in + - last_failure + - max_file_size + - explicitly_allowed_features + - damaged + - tableserver + - failed + - metadata_pool + - epoch + - stopped + - max_mds + - compat + - required_client_features + - data_pools + - info + - fs_name + - created + - standby_count_wanted + - enabled + - modified + - session_timeout + - flags + - ever_allowed_features + - root + type: object + standbys: + description: '' + type: string + required: + - mdsmap + - standbys + type: object + type: array + required: + - filesystems + type: object + health: + description: '' + properties: + checks: + description: '' + type: string + mutes: + description: '' + type: string + status: + description: '' + type: string + required: + - checks + - mutes + - status + type: object + hosts: + description: '' + type: integer + iscsi_daemons: + description: '' + properties: + down: + description: '' + type: integer + up: + description: '' + type: integer + required: + - up + - down + type: object + mgr_map: + description: '' + properties: + active_name: + description: '' + type: string + standbys: + description: '' + type: string + required: + - active_name + - standbys + type: object + mon_status: + description: '' + properties: + monmap: + description: '' + properties: + mons: + description: '' + type: string + required: + - mons + type: object + quorum: + description: '' + items: + type: integer + type: array + required: + - monmap + - quorum + type: object + osd_map: + description: '' + properties: + osds: + description: '' + items: + properties: + in: + description: '' + type: integer + up: + description: '' + type: integer + required: + - in + - up + type: object + type: array + required: + - osds + type: object + pg_info: + description: '' + properties: + object_stats: + description: '' + properties: + num_object_copies: + description: '' + type: integer + num_objects: + description: '' + type: integer + num_objects_degraded: + description: '' + type: integer + num_objects_misplaced: + description: '' + type: integer + num_objects_unfound: + description: '' + type: integer + required: + - num_objects + - num_object_copies + - num_objects_degraded + - num_objects_misplaced + - num_objects_unfound + type: object + pgs_per_osd: + description: '' + type: integer + statuses: + description: '' + type: string + required: + - object_stats + - pgs_per_osd + - statuses + type: object + pools: + description: '' + type: string + rgw: + description: '' + type: integer + scrub_status: + description: '' + type: string + required: + - client_perf + - df + - fs_map + - health + - hosts + - iscsi_daemons + - mgr_map + - mon_status + - osd_map + - pg_info + - pools + - rgw + - scrub_status + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Get Cluster's minimal health report + tags: + - Health + /api/host: + get: + parameters: + - allowEmptyValue: true + description: Host Sources + in: query + name: sources + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + addr: + description: Host address + type: string + ceph_version: + description: Ceph version + type: string + hostname: + description: Hostname + type: string + labels: + description: Labels related to the host + items: + type: string + type: array + service_type: + description: '' + type: string + services: + description: Services related to the host + items: + properties: + id: + description: Service Id + type: string + type: + description: type of service + type: string + required: + - type + - id + type: object + type: array + sources: + description: Host Sources + properties: + ceph: + description: '' + type: boolean + orchestrator: + description: '' + type: boolean + required: + - ceph + - orchestrator + type: object + status: + description: '' + type: string + required: + - hostname + - services + - ceph_version + - addr + - labels + - service_type + - sources + - status + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: List Host Specifications + tags: + - Host + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + hostname: + type: string + required: + - hostname + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Host + /api/host/{hostname}: + delete: + parameters: + - in: path + name: hostname + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Host + get: + description: "\n Get the specified host.\n :raises: cherrypy.HTTPError:\ + \ If host not found.\n " + parameters: + - in: path + name: hostname + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Host + put: + description: "\n Update the specified host.\n Note, this is only\ + \ supported when Ceph Orchestrator is enabled.\n :param hostname: The\ + \ name of the host to be processed.\n :param labels: List of labels.\n\ + \ " + parameters: + - in: path + name: hostname + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + labels: + type: string + required: + - labels + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Host + /api/host/{hostname}/daemons: + get: + parameters: + - in: path + name: hostname + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Host + /api/host/{hostname}/devices: + get: + parameters: + - in: path + name: hostname + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Host + /api/host/{hostname}/smart: + get: + parameters: + - in: path + name: hostname + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Host + /api/iscsi/discoveryauth: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + mutual_password: + description: '' + type: string + mutual_user: + description: '' + type: string + password: + description: password + type: string + user: + description: username + type: string + required: + - user + - password + - mutual_user + - mutual_password + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Get Iscsi discoveryauth Details + tags: + - Iscsi + put: + parameters: + - description: Username + in: query + name: user + required: true + schema: + type: string + - description: Password + in: query + name: password + required: true + schema: + type: string + - description: Mutual UserName + in: query + name: mutual_user + required: true + schema: + type: string + - description: Mutual Password + in: query + name: mutual_password + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + mutual_password: + description: Mutual Password + type: string + mutual_user: + description: Mutual UserName + type: string + password: + description: Password + type: string + user: + description: Username + type: string + required: + - user + - password + - mutual_user + - mutual_password + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Set Iscsi discoveryauth + tags: + - Iscsi + /api/iscsi/target: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - IscsiTarget + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + acl_enabled: + type: string + auth: + type: string + clients: + type: string + disks: + type: string + groups: + type: string + portals: + type: string + target_controls: + type: string + target_iqn: + type: string + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - IscsiTarget + /api/iscsi/target/{target_iqn}: + delete: + parameters: + - in: path + name: target_iqn + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - IscsiTarget + get: + parameters: + - in: path + name: target_iqn + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - IscsiTarget + put: + parameters: + - in: path + name: target_iqn + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + acl_enabled: + type: string + auth: + type: string + clients: + type: string + disks: + type: string + groups: + type: string + new_target_iqn: + type: string + portals: + type: string + target_controls: + type: string + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - IscsiTarget + /api/logs/all: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + audit_log: + description: Audit log + items: + properties: + addrs: + description: '' + properties: + addrvec: + description: '' + items: + properties: + addr: + description: IP Address + type: string + nonce: + description: '' + type: integer + type: + description: '' + type: string + required: + - type + - addr + - nonce + type: object + type: array + required: + - addrvec + type: object + channel: + description: '' + type: string + message: + description: '' + type: string + name: + description: '' + type: string + priority: + description: '' + type: string + rank: + description: '' + type: string + seq: + description: '' + type: integer + stamp: + description: '' + type: string + required: + - name + - rank + - addrs + - stamp + - seq + - channel + - priority + - message + type: object + type: array + clog: + description: '' + items: + type: string + type: array + required: + - clog + - audit_log + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Logs Configuration + tags: + - Logs + /api/mgr/module: + get: + description: "\n Get the list of managed modules.\n :return: A\ + \ list of objects with the fields 'enabled', 'name' and 'options'.\n \ + \ :rtype: list\n " + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + always_on: + description: Is it an always on module? + type: boolean + enabled: + description: Is Module Enabled + type: boolean + name: + description: Module Name + type: string + options: + description: Module Options + properties: + Option_name: + description: Options + properties: + default_value: + description: Default value for the option + type: integer + desc: + description: Description of the option + type: string + enum_allowed: + description: '' + items: + type: string + type: array + flags: + description: List of flags associated + type: integer + level: + description: Option level + type: string + long_desc: + description: Elaborated description + type: string + max: + description: Maximum value + type: string + min: + description: Minimum value + type: string + name: + description: Name of the option + type: string + see_also: + description: Related options + items: + type: string + type: array + tags: + description: Tags associated with the option + items: + type: string + type: array + type: + description: Type of the option + type: string + required: + - name + - type + - level + - flags + - default_value + - min + - max + - enum_allowed + - desc + - long_desc + - tags + - see_also + type: object + required: + - Option_name + type: object + required: + - name + - enabled + - always_on + - options + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: List Mgr modules + tags: + - MgrModule + /api/mgr/module/{module_name}: + get: + description: "\n Retrieve the values of the persistent configuration\ + \ settings.\n :param module_name: The name of the Ceph Mgr module.\n\ + \ :type module_name: str\n :return: The values of the module\ + \ options.\n :rtype: dict\n " + parameters: + - in: path + name: module_name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - MgrModule + put: + description: "\n Set the values of the persistent configuration settings.\n\ + \ :param module_name: The name of the Ceph Mgr module.\n :type\ + \ module_name: str\n :param config: The values of the module options\ + \ to be stored.\n :type config: dict\n " + parameters: + - in: path + name: module_name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + config: + type: string + required: + - config + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - MgrModule + /api/mgr/module/{module_name}/disable: + post: + description: "\n Disable the specified Ceph Mgr module.\n :param\ + \ module_name: The name of the Ceph Mgr module.\n :type module_name:\ + \ str\n " + parameters: + - in: path + name: module_name + required: true + schema: + type: string + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - MgrModule + /api/mgr/module/{module_name}/enable: + post: + description: "\n Enable the specified Ceph Mgr module.\n :param\ + \ module_name: The name of the Ceph Mgr module.\n :type module_name:\ + \ str\n " + parameters: + - in: path + name: module_name + required: true + schema: + type: string + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - MgrModule + /api/mgr/module/{module_name}/options: + get: + description: "\n Get the module options of the specified Ceph Mgr module.\n\ + \ :param module_name: The name of the Ceph Mgr module.\n :type\ + \ module_name: str\n :return: The module options as list of dicts.\n\ + \ :rtype: list\n " + parameters: + - in: path + name: module_name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - MgrModule + /api/monitor: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + in_quorum: + description: '' + items: + properties: + addr: + description: '' + type: string + name: + description: '' + type: string + priority: + description: '' + type: integer + public_addr: + description: '' + type: string + public_addrs: + description: '' + properties: + addrvec: + description: '' + items: + properties: + addr: + description: '' + type: string + nonce: + description: '' + type: integer + type: + description: '' + type: string + required: + - type + - addr + - nonce + type: object + type: array + required: + - addrvec + type: object + rank: + description: '' + type: integer + stats: + description: '' + properties: + num_sessions: + description: '' + items: + type: integer + type: array + required: + - num_sessions + type: object + weight: + description: '' + type: integer + required: + - rank + - name + - public_addrs + - addr + - public_addr + - priority + - weight + - stats + type: object + type: array + mon_status: + description: '' + properties: + election_epoch: + description: '' + type: integer + extra_probe_peers: + description: '' + items: + type: string + type: array + feature_map: + description: '' + properties: + client: + description: '' + items: + properties: + features: + description: '' + type: string + num: + description: '' + type: integer + release: + description: '' + type: string + required: + - features + - release + - num + type: object + type: array + mds: + description: '' + items: + properties: + features: + description: '' + type: string + num: + description: '' + type: integer + release: + description: '' + type: string + required: + - features + - release + - num + type: object + type: array + mgr: + description: '' + items: + properties: + features: + description: '' + type: string + num: + description: '' + type: integer + release: + description: '' + type: string + required: + - features + - release + - num + type: object + type: array + mon: + description: '' + items: + properties: + features: + description: '' + type: string + num: + description: '' + type: integer + release: + description: '' + type: string + required: + - features + - release + - num + type: object + type: array + required: + - mon + - mds + - client + - mgr + type: object + features: + description: '' + properties: + quorum_con: + description: '' + type: string + quorum_mon: + description: '' + items: + type: string + type: array + required_con: + description: '' + type: string + required_mon: + description: '' + items: + type: integer + type: array + required: + - required_con + - required_mon + - quorum_con + - quorum_mon + type: object + monmap: + description: '' + properties: + created: + description: '' + type: string + epoch: + description: '' + type: integer + features: + description: '' + properties: + optional: + description: '' + items: + type: string + type: array + persistent: + description: '' + items: + type: string + type: array + required: + - persistent + - optional + type: object + fsid: + description: '' + type: string + min_mon_release: + description: '' + type: integer + min_mon_release_name: + description: '' + type: string + modified: + description: '' + type: string + mons: + description: '' + items: + properties: + addr: + description: '' + type: string + name: + description: '' + type: string + priority: + description: '' + type: integer + public_addr: + description: '' + type: string + public_addrs: + description: '' + properties: + addrvec: + description: '' + items: + properties: + addr: + description: '' + type: string + nonce: + description: '' + type: integer + type: + description: '' + type: string + required: + - type + - addr + - nonce + type: object + type: array + required: + - addrvec + type: object + rank: + description: '' + type: integer + stats: + description: '' + properties: + num_sessions: + description: '' + items: + type: integer + type: array + required: + - num_sessions + type: object + weight: + description: '' + type: integer + required: + - rank + - name + - public_addrs + - addr + - public_addr + - priority + - weight + - stats + type: object + type: array + required: + - epoch + - fsid + - modified + - created + - min_mon_release + - min_mon_release_name + - features + - mons + type: object + name: + description: '' + type: string + outside_quorum: + description: '' + items: + type: string + type: array + quorum: + description: '' + items: + type: integer + type: array + quorum_age: + description: '' + type: integer + rank: + description: '' + type: integer + state: + description: '' + type: string + sync_provider: + description: '' + items: + type: string + type: array + required: + - name + - rank + - state + - election_epoch + - quorum + - quorum_age + - features + - outside_quorum + - extra_probe_peers + - sync_provider + - monmap + - feature_map + type: object + out_quorum: + description: '' + items: + type: integer + type: array + required: + - mon_status + - in_quorum + - out_quorum + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Get Monitor Details + tags: + - Monitor + /api/nfs-ganesha/daemon: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + cluster_id: + description: Cluster identifier + type: string + daemon_id: + description: Daemon identifier + type: string + desc: + description: Error description (if status==-1) + type: string + status: + description: Status of daemon (1=RUNNING, 0=STOPPED, -1=ERROR + type: integer + required: + - daemon_id + - cluster_id + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: List NFS-Ganesha daemons information + tags: + - NFS-Ganesha + /api/nfs-ganesha/export: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + access_type: + description: Export access type + type: string + clients: + description: List of client configurations + items: + properties: + access_type: + description: Client access type + type: string + addresses: + description: list of IP addresses + items: + type: string + type: array + squash: + description: Client squash policy + type: string + required: + - addresses + - access_type + - squash + type: object + type: array + cluster_id: + description: Cluster identifier + type: string + daemons: + description: List of NFS Ganesha daemons identifiers + items: + type: string + type: array + export_id: + description: Export ID + type: integer + fsal: + description: FSAL configuration + properties: + filesystem: + description: CephFS filesystem ID + type: string + name: + description: name of FSAL + type: string + rgw_user_id: + description: RGW user id + type: string + sec_label_xattr: + description: Name of xattr for security label + type: string + user_id: + description: CephX user id + type: string + required: + - name + type: object + path: + description: Export path + type: string + protocols: + description: List of protocol types + items: + type: integer + type: array + pseudo: + description: Pseudo FS path + type: string + security_label: + description: Security label + type: string + squash: + description: Export squash policy + type: string + tag: + description: NFSv3 export tag + type: string + transports: + description: List of transport types + items: + type: string + type: array + required: + - export_id + - path + - cluster_id + - daemons + - pseudo + - tag + - access_type + - squash + - security_label + - protocols + - transports + - fsal + - clients + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: List all NFS-Ganesha exports + tags: + - NFS-Ganesha + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + access_type: + description: Export access type + type: string + clients: + description: List of client configurations + items: + properties: + access_type: + description: Client access type + type: string + addresses: + description: list of IP addresses + items: + type: string + type: array + squash: + description: Client squash policy + type: string + required: + - addresses + - access_type + - squash + type: object + type: array + cluster_id: + description: Cluster identifier + type: string + daemons: + description: List of NFS Ganesha daemons identifiers + items: + type: string + type: array + fsal: + description: FSAL configuration + properties: + filesystem: + description: CephFS filesystem ID + type: string + name: + description: name of FSAL + type: string + rgw_user_id: + description: RGW user id + type: string + sec_label_xattr: + description: Name of xattr for security label + type: string + user_id: + description: CephX user id + type: string + required: + - name + type: object + path: + description: Export path + type: string + protocols: + description: List of protocol types + items: + type: integer + type: array + pseudo: + description: Pseudo FS path + type: string + reload_daemons: + default: true + description: Trigger reload of NFS-Ganesha daemons configuration + type: boolean + security_label: + description: Security label + type: string + squash: + description: Export squash policy + type: string + tag: + description: NFSv3 export tag + type: string + transports: + description: List of transport types + items: + type: string + type: array + required: + - path + - cluster_id + - daemons + - pseudo + - tag + - access_type + - squash + - security_label + - protocols + - transports + - fsal + - clients + type: object + responses: + '201': + content: + application/json: + schema: + properties: + access_type: + description: Export access type + type: string + clients: + description: List of client configurations + items: + properties: + access_type: + description: Client access type + type: string + addresses: + description: list of IP addresses + items: + type: string + type: array + squash: + description: Client squash policy + type: string + required: + - addresses + - access_type + - squash + type: object + type: array + cluster_id: + description: Cluster identifier + type: string + daemons: + description: List of NFS Ganesha daemons identifiers + items: + type: string + type: array + export_id: + description: Export ID + type: integer + fsal: + description: FSAL configuration + properties: + filesystem: + description: CephFS filesystem ID + type: string + name: + description: name of FSAL + type: string + rgw_user_id: + description: RGW user id + type: string + sec_label_xattr: + description: Name of xattr for security label + type: string + user_id: + description: CephX user id + type: string + required: + - name + type: object + path: + description: Export path + type: string + protocols: + description: List of protocol types + items: + type: integer + type: array + pseudo: + description: Pseudo FS path + type: string + security_label: + description: Security label + type: string + squash: + description: Export squash policy + type: string + tag: + description: NFSv3 export tag + type: string + transports: + description: List of transport types + items: + type: string + type: array + required: + - export_id + - path + - cluster_id + - daemons + - pseudo + - tag + - access_type + - squash + - security_label + - protocols + - transports + - fsal + - clients + type: object + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Creates a new NFS-Ganesha export + tags: + - NFS-Ganesha + /api/nfs-ganesha/export/{cluster_id}/{export_id}: + delete: + parameters: + - description: Cluster identifier + in: path + name: cluster_id + required: true + schema: + type: string + - description: Export ID + in: path + name: export_id + required: true + schema: + type: integer + - default: true + description: Trigger reload of NFS-Ganesha daemons configuration + in: query + name: reload_daemons + schema: + type: boolean + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Deletes an NFS-Ganesha export + tags: + - NFS-Ganesha + get: + parameters: + - description: Cluster identifier + in: path + name: cluster_id + required: true + schema: + type: string + - description: Export ID + in: path + name: export_id + required: true + schema: + type: integer + responses: + '200': + content: + application/json: + schema: + properties: + access_type: + description: Export access type + type: string + clients: + description: List of client configurations + items: + properties: + access_type: + description: Client access type + type: string + addresses: + description: list of IP addresses + items: + type: string + type: array + squash: + description: Client squash policy + type: string + required: + - addresses + - access_type + - squash + type: object + type: array + cluster_id: + description: Cluster identifier + type: string + daemons: + description: List of NFS Ganesha daemons identifiers + items: + type: string + type: array + export_id: + description: Export ID + type: integer + fsal: + description: FSAL configuration + properties: + filesystem: + description: CephFS filesystem ID + type: string + name: + description: name of FSAL + type: string + rgw_user_id: + description: RGW user id + type: string + sec_label_xattr: + description: Name of xattr for security label + type: string + user_id: + description: CephX user id + type: string + required: + - name + type: object + path: + description: Export path + type: string + protocols: + description: List of protocol types + items: + type: integer + type: array + pseudo: + description: Pseudo FS path + type: string + security_label: + description: Security label + type: string + squash: + description: Export squash policy + type: string + tag: + description: NFSv3 export tag + type: string + transports: + description: List of transport types + items: + type: string + type: array + required: + - export_id + - path + - cluster_id + - daemons + - pseudo + - tag + - access_type + - squash + - security_label + - protocols + - transports + - fsal + - clients + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Get an NFS-Ganesha export + tags: + - NFS-Ganesha + put: + parameters: + - description: Cluster identifier + in: path + name: cluster_id + required: true + schema: + type: string + - description: Export ID + in: path + name: export_id + required: true + schema: + type: integer + requestBody: + content: + application/json: + schema: + properties: + access_type: + description: Export access type + type: string + clients: + description: List of client configurations + items: + properties: + access_type: + description: Client access type + type: string + addresses: + description: list of IP addresses + items: + type: string + type: array + squash: + description: Client squash policy + type: string + required: + - addresses + - access_type + - squash + type: object + type: array + daemons: + description: List of NFS Ganesha daemons identifiers + items: + type: string + type: array + fsal: + description: FSAL configuration + properties: + filesystem: + description: CephFS filesystem ID + type: string + name: + description: name of FSAL + type: string + rgw_user_id: + description: RGW user id + type: string + sec_label_xattr: + description: Name of xattr for security label + type: string + user_id: + description: CephX user id + type: string + required: + - name + type: object + path: + description: Export path + type: string + protocols: + description: List of protocol types + items: + type: integer + type: array + pseudo: + description: Pseudo FS path + type: string + reload_daemons: + default: true + description: Trigger reload of NFS-Ganesha daemons configuration + type: boolean + security_label: + description: Security label + type: string + squash: + description: Export squash policy + type: string + tag: + description: NFSv3 export tag + type: string + transports: + description: List of transport types + items: + type: string + type: array + required: + - path + - daemons + - pseudo + - tag + - access_type + - squash + - security_label + - protocols + - transports + - fsal + - clients + type: object + responses: + '200': + content: + application/json: + schema: + properties: + access_type: + description: Export access type + type: string + clients: + description: List of client configurations + items: + properties: + access_type: + description: Client access type + type: string + addresses: + description: list of IP addresses + items: + type: string + type: array + squash: + description: Client squash policy + type: string + required: + - addresses + - access_type + - squash + type: object + type: array + cluster_id: + description: Cluster identifier + type: string + daemons: + description: List of NFS Ganesha daemons identifiers + items: + type: string + type: array + export_id: + description: Export ID + type: integer + fsal: + description: FSAL configuration + properties: + filesystem: + description: CephFS filesystem ID + type: string + name: + description: name of FSAL + type: string + rgw_user_id: + description: RGW user id + type: string + sec_label_xattr: + description: Name of xattr for security label + type: string + user_id: + description: CephX user id + type: string + required: + - name + type: object + path: + description: Export path + type: string + protocols: + description: List of protocol types + items: + type: integer + type: array + pseudo: + description: Pseudo FS path + type: string + security_label: + description: Security label + type: string + squash: + description: Export squash policy + type: string + tag: + description: NFSv3 export tag + type: string + transports: + description: List of transport types + items: + type: string + type: array + required: + - export_id + - path + - cluster_id + - daemons + - pseudo + - tag + - access_type + - squash + - security_label + - protocols + - transports + - fsal + - clients + type: object + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Updates an NFS-Ganesha export + tags: + - NFS-Ganesha + /api/nfs-ganesha/status: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + available: + description: Is API available? + type: boolean + message: + description: Error message + type: string + required: + - available + - message + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Status of NFS-Ganesha management feature + tags: + - NFS-Ganesha + /api/orchestrator/identify_device: + post: + description: "\n Identify a device by switching on the device light for\ + \ N seconds.\n :param hostname: The hostname of the device to process.\n\ + \ :param device: The device identifier to process, e.g. ``/dev/dm-0``\ + \ or\n ``ABC1234DEF567-1R1234_ABC8DE0Q``.\n :param duration:\ + \ The duration in seconds how long the LED should flash.\n " + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + device: + type: string + duration: + type: string + hostname: + type: string + required: + - hostname + - device + - duration + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Orchestrator + /api/orchestrator/inventory: + get: + parameters: + - allowEmptyValue: true + in: query + name: hostname + schema: + type: string + - allowEmptyValue: true + in: query + name: refresh + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OrchestratorInventory + /api/orchestrator/status: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + available: + description: Orchestrator status + type: boolean + description: + description: Description + type: string + required: + - available + - description + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Orchestrator Status + tags: + - Orchestrator + /api/osd: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + data: + type: string + method: + type: string + tracking_id: + type: string + required: + - method + - data + - tracking_id + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/osd/flags: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + list_of_flags: + description: '' + items: + type: string + type: array + required: + - list_of_flags + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display OSD Flags + tags: + - OSD + put: + description: "\n The `recovery_deletes`, `sortbitwise` and `pglog_hardlimit`\ + \ flags cannot be unset.\n `purged_snapshots` cannot even be set. It\ + \ is therefore required to at\n least include those four flags for\ + \ a successful operation.\n " + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + flags: + type: string + required: + - flags + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/osd/safe_to_delete: + get: + description: "\n :type ids: int|[int]\n " + parameters: + - in: query + name: svc_ids + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/osd/safe_to_destroy: + get: + description: "\n :type ids: int|[int]\n " + parameters: + - description: OSD Service Identifier + in: query + name: ids + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + active: + description: '' + items: + type: integer + type: array + is_safe_to_destroy: + description: Is OSD safe to destroy? + type: boolean + missing_stats: + description: '' + items: + type: string + type: array + safe_to_destroy: + description: Is OSD safe to destroy? + items: + type: string + type: array + stored_pgs: + description: Stored Pool groups in Osd + items: + type: string + type: array + required: + - safe_to_destroy + - active + - missing_stats + - stored_pgs + - is_safe_to_destroy + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Check If OSD is Safe to Destroy + tags: + - OSD + /api/osd/{svc_id}: + delete: + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + - allowEmptyValue: true + in: query + name: preserve_id + schema: + type: string + - allowEmptyValue: true + in: query + name: force + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + get: + description: "\n Returns collected data about an OSD.\n\n :return:\ + \ Returns the requested data.\n " + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + put: + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + device_class: + type: string + required: + - device_class + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/osd/{svc_id}/destroy: + post: + description: "\n Mark osd as being destroyed. Keeps the ID intact (allowing\ + \ reuse), but\n removes cephx keys, config-key data and lockbox keys,\ + \ rendering data\n permanently unreadable.\n\n The osd must\ + \ be marked down before being destroyed.\n " + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/osd/{svc_id}/devices: + get: + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/osd/{svc_id}/histogram: + get: + description: "\n :return: Returns the histogram data.\n " + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/osd/{svc_id}/mark: + put: + description: "\n Note: osd must be marked `down` before marking lost.\n\ + \ " + parameters: + - description: SVC ID + in: path + name: svc_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + action: + type: string + required: + - action + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Mark OSD flags (out, in, down, lost, ...) + tags: + - OSD + /api/osd/{svc_id}/purge: + post: + description: "\n Note: osd must be marked `down` before removal.\n \ + \ " + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/osd/{svc_id}/reweight: + post: + description: "\n Reweights the OSD temporarily.\n\n Note that\ + \ \u2018ceph osd reweight\u2019 is not a persistent setting. When an OSD\n\ + \ gets marked out, the osd weight will be set to 0. When it gets marked\n\ + \ in again, the weight will be changed to 1.\n\n Because of\ + \ this \u2018ceph osd reweight\u2019 is a temporary solution. You should\n\ + \ only use it to keep your cluster running while you\u2019re ordering\ + \ more\n hardware.\n\n - Craig Lewis (http://lists.ceph.com/pipermail/ceph-users-ceph.com/2014-June/040967.html)\n\ + \ " + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + weight: + type: string + required: + - weight + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/osd/{svc_id}/scrub: + post: + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + - default: false + in: query + name: deep + schema: + type: boolean + requestBody: + content: + application/json: + schema: + properties: + deep: + default: false + type: boolean + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/osd/{svc_id}/smart: + get: + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OSD + /api/perf_counters: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + mon.a: + description: Service ID + properties: + .cache_bytes: + description: '' + properties: + description: + description: '' + type: string + nick: + description: '' + type: string + priority: + description: '' + type: integer + type: + description: '' + type: integer + units: + description: '' + type: integer + value: + description: '' + type: integer + required: + - description + - nick + - type + - priority + - units + - value + type: object + required: + - .cache_bytes + type: object + required: + - mon.a + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Perf Counters + tags: + - PerfCounters + /api/perf_counters/mds/{service_id}: + get: + parameters: + - in: path + name: service_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - MdsPerfCounter + /api/perf_counters/mgr/{service_id}: + get: + parameters: + - in: path + name: service_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - MgrPerfCounter + /api/perf_counters/mon/{service_id}: + get: + parameters: + - in: path + name: service_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - MonPerfCounter + /api/perf_counters/osd/{service_id}: + get: + parameters: + - in: path + name: service_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - OsdPerfCounter + /api/perf_counters/rbd-mirror/{service_id}: + get: + parameters: + - in: path + name: service_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwMirrorPerfCounter + /api/perf_counters/rgw/{service_id}: + get: + parameters: + - in: path + name: service_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwPerfCounter + /api/perf_counters/tcmu-runner/{service_id}: + get: + parameters: + - in: path + name: service_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - TcmuRunnerPerfCounter + /api/pool: + get: + parameters: + - allowEmptyValue: true + description: Pool Attributes + in: query + name: attrs + schema: + type: string + - default: false + description: Pool Stats + in: query + name: stats + schema: + type: boolean + responses: + '200': + content: + application/json: + schema: + properties: + application_metadata: + description: '' + items: + type: string + type: array + auid: + description: '' + type: integer + cache_min_evict_age: + description: '' + type: integer + cache_min_flush_age: + description: '' + type: integer + cache_mode: + description: '' + type: string + cache_target_dirty_high_ratio_micro: + description: '' + type: integer + cache_target_dirty_ratio_micro: + description: '' + type: integer + cache_target_full_ratio_micro: + description: '' + type: integer + create_time: + description: '' + type: string + crush_rule: + description: '' + type: string + erasure_code_profile: + description: '' + type: string + expected_num_objects: + description: '' + type: integer + fast_read: + description: '' + type: boolean + flags: + description: '' + type: integer + flags_names: + description: flags name + type: string + grade_table: + description: '' + items: + type: string + type: array + hit_set_count: + description: '' + type: integer + hit_set_grade_decay_rate: + description: '' + type: integer + hit_set_params: + description: '' + properties: + type: + description: '' + type: string + required: + - type + type: object + hit_set_period: + description: '' + type: integer + hit_set_search_last_n: + description: '' + type: integer + last_change: + description: '' + type: string + last_force_op_resend: + description: '' + type: string + last_force_op_resend_preluminous: + description: '' + type: string + last_force_op_resend_prenautilus: + description: '' + type: string + last_pg_merge_meta: + description: '' + properties: + last_epoch_clean: + description: '' + type: integer + last_epoch_started: + description: '' + type: integer + ready_epoch: + description: '' + type: integer + source_pgid: + description: '' + type: string + source_version: + description: '' + type: string + target_version: + description: '' + type: string + required: + - ready_epoch + - last_epoch_started + - last_epoch_clean + - source_pgid + - source_version + - target_version + type: object + min_read_recency_for_promote: + description: '' + type: integer + min_size: + description: '' + type: integer + min_write_recency_for_promote: + description: '' + type: integer + object_hash: + description: '' + type: integer + options: + description: '' + properties: + pg_num_min: + description: '' + type: integer + required: + - pg_num_min + type: object + pg_autoscale_mode: + description: '' + type: string + pg_num: + description: '' + type: integer + pg_num_pending: + description: '' + type: integer + pg_num_target: + description: '' + type: integer + pg_placement_num: + description: '' + type: integer + pg_placement_num_target: + description: '' + type: integer + pool: + description: pool id + type: integer + pool_name: + description: pool name + type: string + pool_snaps: + description: '' + items: + type: string + type: array + quota_max_bytes: + description: '' + type: integer + quota_max_objects: + description: '' + type: integer + read_tier: + description: '' + type: integer + removed_snaps: + description: '' + items: + type: string + type: array + size: + description: pool size + type: integer + snap_epoch: + description: '' + type: integer + snap_mode: + description: '' + type: string + snap_seq: + description: '' + type: integer + stripe_width: + description: '' + type: integer + target_max_bytes: + description: '' + type: integer + target_max_objects: + description: '' + type: integer + tier_of: + description: '' + type: integer + tiers: + description: '' + items: + type: string + type: array + type: + description: type of pool + type: string + use_gmt_hitset: + description: '' + type: boolean + write_tier: + description: '' + type: integer + required: + - pool + - pool_name + - flags + - flags_names + - type + - size + - min_size + - crush_rule + - object_hash + - pg_autoscale_mode + - pg_num + - pg_placement_num + - pg_placement_num_target + - pg_num_target + - pg_num_pending + - last_pg_merge_meta + - auid + - snap_mode + - snap_seq + - snap_epoch + - pool_snaps + - quota_max_bytes + - quota_max_objects + - tiers + - tier_of + - read_tier + - write_tier + - cache_mode + - target_max_bytes + - target_max_objects + - cache_target_dirty_ratio_micro + - cache_target_dirty_high_ratio_micro + - cache_target_full_ratio_micro + - cache_min_flush_age + - cache_min_evict_age + - erasure_code_profile + - hit_set_params + - hit_set_period + - hit_set_count + - use_gmt_hitset + - min_read_recency_for_promote + - min_write_recency_for_promote + - hit_set_grade_decay_rate + - hit_set_search_last_n + - grade_table + - stripe_width + - expected_num_objects + - fast_read + - options + - application_metadata + - create_time + - last_change + - last_force_op_resend + - last_force_op_resend_prenautilus + - last_force_op_resend_preluminous + - removed_snaps + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Pool List + tags: + - Pool + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + application_metadata: + type: string + configuration: + type: string + erasure_code_profile: + type: string + flags: + type: string + pg_num: + type: integer + pool: + type: string + pool_type: + type: string + rule_name: + type: string + required: + - pool + - pg_num + - pool_type + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Pool + /api/pool/{pool_name}: + delete: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Pool + get: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + - allowEmptyValue: true + in: query + name: attrs + schema: + type: string + - default: false + in: query + name: stats + schema: + type: boolean + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Pool + put: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + application_metadata: + type: string + configuration: + type: string + flags: + type: string + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Pool + /api/pool/{pool_name}/configuration: + get: + parameters: + - in: path + name: pool_name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Pool + /api/prometheus: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Prometheus + /api/prometheus/notifications: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - PrometheusNotifications + /api/prometheus/rules: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Prometheus + /api/prometheus/silence: + post: + parameters: [] + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Prometheus + /api/prometheus/silence/{s_id}: + delete: + parameters: + - in: path + name: s_id + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Prometheus + /api/prometheus/silences: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Prometheus + /api/rgw/bucket: + get: + parameters: + - default: false + in: query + name: stats + schema: + type: boolean + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwBucket + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + bucket: + type: string + lock_enabled: + default: 'false' + type: string + lock_mode: + type: string + lock_retention_period_days: + type: string + lock_retention_period_years: + type: string + placement_target: + type: string + uid: + type: string + zonegroup: + type: string + required: + - bucket + - uid + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwBucket + /api/rgw/bucket/{bucket}: + delete: + parameters: + - in: path + name: bucket + required: true + schema: + type: string + - default: 'true' + in: query + name: purge_objects + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwBucket + get: + parameters: + - in: path + name: bucket + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwBucket + put: + parameters: + - in: path + name: bucket + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + bucket_id: + type: string + lock_mode: + type: string + lock_retention_period_days: + type: string + lock_retention_period_years: + type: string + mfa_delete: + type: string + mfa_token_pin: + type: string + mfa_token_serial: + type: string + uid: + type: string + versioning_state: + type: string + required: + - bucket_id + - uid + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwBucket + /api/rgw/daemon: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + id: + description: Daemon ID + type: string + server_hostname: + description: '' + type: string + version: + description: Ceph Version + type: string + required: + - id + - version + - server_hostname + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display RGW Daemons + tags: + - RgwDaemon + /api/rgw/daemon/{svc_id}: + get: + parameters: + - in: path + name: svc_id + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwDaemon + /api/rgw/site: + get: + parameters: + - allowEmptyValue: true + in: query + name: query + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwSite + /api/rgw/status: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + available: + description: Is RGW available? + type: boolean + message: + description: Descriptions + type: string + required: + - available + - message + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display RGW Status + tags: + - Rgw + /api/rgw/user: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + list_of_users: + description: list of rgw users + items: + type: string + type: array + required: + - list_of_users + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display RGW Users + tags: + - RgwUser + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + access_key: + type: string + display_name: + type: string + email: + type: string + generate_key: + type: string + max_buckets: + type: string + secret_key: + type: string + suspended: + type: string + uid: + type: string + required: + - uid + - display_name + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + /api/rgw/user/get_emails: + get: + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + /api/rgw/user/{uid}: + delete: + parameters: + - in: path + name: uid + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + get: + parameters: + - in: path + name: uid + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + put: + parameters: + - in: path + name: uid + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + display_name: + type: string + email: + type: string + max_buckets: + type: string + suspended: + type: string + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + /api/rgw/user/{uid}/capability: + delete: + parameters: + - in: path + name: uid + required: true + schema: + type: string + - in: query + name: type + required: true + schema: + type: string + - in: query + name: perm + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + post: + parameters: + - in: path + name: uid + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + perm: + type: string + type: + type: string + required: + - type + - perm + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + /api/rgw/user/{uid}/key: + delete: + parameters: + - in: path + name: uid + required: true + schema: + type: string + - default: s3 + in: query + name: key_type + schema: + type: string + - allowEmptyValue: true + in: query + name: subuser + schema: + type: string + - allowEmptyValue: true + in: query + name: access_key + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + post: + parameters: + - in: path + name: uid + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + access_key: + type: string + generate_key: + default: 'true' + type: string + key_type: + default: s3 + type: string + secret_key: + type: string + subuser: + type: string + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + /api/rgw/user/{uid}/quota: + get: + parameters: + - in: path + name: uid + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + put: + parameters: + - in: path + name: uid + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + enabled: + type: string + max_objects: + type: string + max_size_kb: + type: integer + quota_type: + type: string + required: + - quota_type + - enabled + - max_size_kb + - max_objects + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + /api/rgw/user/{uid}/subuser: + post: + parameters: + - in: path + name: uid + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + access: + type: string + access_key: + type: string + generate_secret: + default: 'true' + type: string + key_type: + default: s3 + type: string + secret_key: + type: string + subuser: + type: string + required: + - subuser + - access + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + /api/rgw/user/{uid}/subuser/{subuser}: + delete: + description: "\n :param purge_keys: Set to False to do not purge the\ + \ keys.\n Note, this only works for s3 subusers.\n\ + \ " + parameters: + - in: path + name: uid + required: true + schema: + type: string + - in: path + name: subuser + required: true + schema: + type: string + - default: 'true' + in: query + name: purge_keys + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - RgwUser + /api/role: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + description: + description: Role Descriptions + type: string + name: + description: Role Name + type: string + scopes_permissions: + description: '' + properties: + cephfs: + description: '' + items: + type: string + type: array + required: + - cephfs + type: object + system: + description: '' + type: boolean + required: + - name + - description + - scopes_permissions + - system + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Role list + tags: + - Role + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + description: + type: string + name: + type: string + scopes_permissions: + type: string + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Role + /api/role/{name}: + delete: + parameters: + - in: path + name: name + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Role + get: + parameters: + - in: path + name: name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Role + put: + parameters: + - in: path + name: name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + description: + type: string + scopes_permissions: + type: string + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Role + /api/role/{name}/clone: + post: + parameters: + - in: path + name: name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + new_name: + type: string + required: + - new_name + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Role + /api/service: + get: + parameters: + - allowEmptyValue: true + in: query + name: service_name + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Service + post: + description: "\n :param service_spec: The service specification as JSON.\n\ + \ :param service_name: The service name, e.g. 'alertmanager'.\n \ + \ :return: None\n " + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + service_name: + type: string + service_spec: + type: string + required: + - service_spec + - service_name + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Service + /api/service/known_types: + get: + description: "\n Get a list of known service types, e.g. 'alertmanager',\n\ + \ 'node-exporter', 'osd' or 'rgw'.\n " + parameters: [] + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Service + /api/service/{service_name}: + delete: + description: "\n :param service_name: The service name, e.g. 'mds' or\ + \ 'crash.foo'.\n :return: None\n " + parameters: + - in: path + name: service_name + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Service + get: + parameters: + - in: path + name: service_name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Service + /api/service/{service_name}/daemons: + get: + parameters: + - in: path + name: service_name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Service + /api/settings: + get: + description: "\n Get the list of available options.\n :param names:\ + \ A comma separated list of option names that should\n be processed.\ + \ Defaults to ``None``.\n :type names: None|str\n :return: A\ + \ list of available options.\n :rtype: list[dict]\n " + parameters: + - allowEmptyValue: true + description: Name of Settings + in: query + name: names + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + default: + description: Default Settings + type: boolean + name: + description: Settings Name + type: string + type: + description: Type of Settings + type: string + value: + description: Settings Value + type: boolean + required: + - name + - default + - type + - value + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Settings Information + tags: + - Settings + put: + parameters: [] + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Settings + /api/settings/{name}: + delete: + parameters: + - in: path + name: name + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Settings + get: + description: "\n Get the given option.\n :param name: The name\ + \ of the option.\n :return: Returns a dict containing the name, type,\n\ + \ default value and current value of the given option.\n :rtype:\ + \ dict\n " + parameters: + - in: path + name: name + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Settings + put: + parameters: + - in: path + name: name + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + value: + type: string + required: + - value + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Settings + /api/summary: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + executing_tasks: + description: '' + items: + type: string + type: array + finished_tasks: + description: '' + items: + properties: + begin_time: + description: '' + type: string + duration: + description: '' + type: integer + end_time: + description: '' + type: string + exception: + description: '' + type: string + metadata: + description: '' + properties: + pool: + description: '' + type: integer + required: + - pool + type: object + name: + description: '' + type: string + progress: + description: '' + type: integer + ret_value: + description: '' + type: string + success: + description: '' + type: boolean + required: + - name + - metadata + - begin_time + - end_time + - duration + - progress + - success + - ret_value + - exception + type: object + type: array + have_mon_connection: + description: '' + type: string + health_status: + description: '' + type: string + mgr_host: + description: '' + type: string + mgr_id: + description: '' + type: string + rbd_mirroring: + description: '' + properties: + errors: + description: '' + type: integer + warnings: + description: '' + type: integer + required: + - warnings + - errors + type: object + version: + description: '' + type: string + required: + - health_status + - mgr_id + - mgr_host + - have_mon_connection + - executing_tasks + - finished_tasks + - version + - rbd_mirroring + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Summary + tags: + - Summary + /api/task: + get: + parameters: + - allowEmptyValue: true + description: Task Name + in: query + name: name + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + executing_tasks: + description: ongoing executing tasks + type: string + finished_tasks: + description: '' + items: + properties: + begin_time: + description: Task begin time + type: string + duration: + description: '' + type: integer + end_time: + description: Task end time + type: string + exception: + description: '' + type: boolean + metadata: + description: '' + properties: + pool: + description: '' + type: integer + required: + - pool + type: object + name: + description: finished tasks name + type: string + progress: + description: Progress of tasks + type: integer + ret_value: + description: '' + type: boolean + success: + description: '' + type: boolean + required: + - name + - metadata + - begin_time + - end_time + - duration + - progress + - success + - ret_value + - exception + type: object + type: array + required: + - executing_tasks + - finished_tasks + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Display Tasks + tags: + - Task + /api/telemetry: + put: + description: "\n Enables or disables sending data collected by the Telemetry\n\ + \ module.\n :param enable: Enable or disable sending data\n\ + \ :type enable: bool\n :param license_name: License string e.g.\ + \ 'sharing-1-0' to\n make sure the user is aware of and accepts the\ + \ license\n for sharing Telemetry data.\n :type license_name:\ + \ string\n " + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + enable: + default: true + type: boolean + license_name: + type: string + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - Telemetry + /api/telemetry/report: + get: + description: "\n Get Ceph and device report data\n :return: Ceph\ + \ and device report data\n :rtype: dict\n " + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + device_report: + description: '' + type: string + report: + description: '' + properties: + balancer: + description: '' + properties: + active: + description: '' + type: boolean + mode: + description: '' + type: string + required: + - active + - mode + type: object + channels: + description: '' + items: + type: string + type: array + channels_available: + description: '' + items: + type: string + type: array + config: + description: '' + properties: + active_changed: + description: '' + items: + type: string + type: array + cluster_changed: + description: '' + items: + type: string + type: array + required: + - cluster_changed + - active_changed + type: object + crashes: + description: '' + items: + type: integer + type: array + created: + description: '' + type: string + crush: + description: '' + properties: + bucket_algs: + description: '' + properties: + straw2: + description: '' + type: integer + required: + - straw2 + type: object + bucket_sizes: + description: '' + properties: + '1': + description: '' + type: integer + '3': + description: '' + type: integer + required: + - '1' + - '3' + type: object + bucket_types: + description: '' + properties: + '1': + description: '' + type: integer + '11': + description: '' + type: integer + required: + - '1' + - '11' + type: object + compat_weight_set: + description: '' + type: boolean + device_classes: + description: '' + items: + type: integer + type: array + num_buckets: + description: '' + type: integer + num_devices: + description: '' + type: integer + num_rules: + description: '' + type: integer + num_types: + description: '' + type: integer + num_weight_sets: + description: '' + type: integer + tunables: + description: '' + properties: + allowed_bucket_algs: + description: '' + type: integer + choose_local_fallback_tries: + description: '' + type: integer + choose_local_tries: + description: '' + type: integer + choose_total_tries: + description: '' + type: integer + chooseleaf_descend_once: + description: '' + type: integer + chooseleaf_stable: + description: '' + type: integer + chooseleaf_vary_r: + description: '' + type: integer + has_v2_rules: + description: '' + type: integer + has_v3_rules: + description: '' + type: integer + has_v4_buckets: + description: '' + type: integer + has_v5_rules: + description: '' + type: integer + legacy_tunables: + description: '' + type: integer + minimum_required_version: + description: '' + type: string + optimal_tunables: + description: '' + type: integer + profile: + description: '' + type: string + require_feature_tunables: + description: '' + type: integer + require_feature_tunables2: + description: '' + type: integer + require_feature_tunables3: + description: '' + type: integer + require_feature_tunables5: + description: '' + type: integer + straw_calc_version: + description: '' + type: integer + required: + - choose_local_tries + - choose_local_fallback_tries + - choose_total_tries + - chooseleaf_descend_once + - chooseleaf_vary_r + - chooseleaf_stable + - straw_calc_version + - allowed_bucket_algs + - profile + - optimal_tunables + - legacy_tunables + - minimum_required_version + - require_feature_tunables + - require_feature_tunables2 + - has_v2_rules + - require_feature_tunables3 + - has_v3_rules + - has_v4_buckets + - require_feature_tunables5 + - has_v5_rules + type: object + required: + - num_devices + - num_types + - num_buckets + - num_rules + - device_classes + - tunables + - compat_weight_set + - num_weight_sets + - bucket_algs + - bucket_sizes + - bucket_types + type: object + fs: + description: '' + properties: + count: + description: '' + type: integer + feature_flags: + description: '' + properties: + enable_multiple: + description: '' + type: boolean + ever_enabled_multiple: + description: '' + type: boolean + required: + - enable_multiple + - ever_enabled_multiple + type: object + filesystems: + description: '' + items: + type: integer + type: array + num_standby_mds: + description: '' + type: integer + total_num_mds: + description: '' + type: integer + required: + - count + - feature_flags + - num_standby_mds + - filesystems + - total_num_mds + type: object + hosts: + description: '' + properties: + num: + description: '' + type: integer + num_with_mds: + description: '' + type: integer + num_with_mgr: + description: '' + type: integer + num_with_mon: + description: '' + type: integer + num_with_osd: + description: '' + type: integer + required: + - num + - num_with_mon + - num_with_mds + - num_with_osd + - num_with_mgr + type: object + leaderboard: + description: '' + type: boolean + license: + description: '' + type: string + metadata: + description: '' + properties: + mon: + description: '' + properties: + arch: + description: '' + properties: + x86_64: + description: '' + type: integer + required: + - x86_64 + type: object + ceph_version: + description: '' + properties: + ceph version 16.0.0-3151-gf202994fcf: + description: '' + type: integer + required: + - ceph version 16.0.0-3151-gf202994fcf + type: object + cpu: + description: '' + properties: + Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz: + description: '' + type: integer + required: + - Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz + type: object + distro: + description: '' + properties: + centos: + description: '' + type: integer + required: + - centos + type: object + distro_description: + description: '' + properties: + CentOS Linux 8 (Core): + description: '' + type: integer + required: + - CentOS Linux 8 (Core) + type: object + kernel_description: + description: '' + properties: + '#1 SMP Wed Jul 1 19:53:01 UTC 2020': + description: '' + type: integer + required: + - '#1 SMP Wed Jul 1 19:53:01 UTC 2020' + type: object + kernel_version: + description: '' + properties: + 5.7.7-200.fc32.x86_64: + description: '' + type: integer + required: + - 5.7.7-200.fc32.x86_64 + type: object + os: + description: '' + properties: + Linux: + description: '' + type: integer + required: + - Linux + type: object + required: + - arch + - ceph_version + - os + - cpu + - kernel_description + - kernel_version + - distro_description + - distro + type: object + osd: + description: '' + properties: + arch: + description: '' + properties: + x86_64: + description: '' + type: integer + required: + - x86_64 + type: object + ceph_version: + description: '' + properties: + ceph version 16.0.0-3151-gf202994fcf: + description: '' + type: integer + required: + - ceph version 16.0.0-3151-gf202994fcf + type: object + cpu: + description: '' + properties: + Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz: + description: '' + type: integer + required: + - Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz + type: object + distro: + description: '' + properties: + centos: + description: '' + type: integer + required: + - centos + type: object + distro_description: + description: '' + properties: + CentOS Linux 8 (Core): + description: '' + type: integer + required: + - CentOS Linux 8 (Core) + type: object + kernel_description: + description: '' + properties: + '#1 SMP Wed Jul 1 19:53:01 UTC 2020': + description: '' + type: integer + required: + - '#1 SMP Wed Jul 1 19:53:01 UTC 2020' + type: object + kernel_version: + description: '' + properties: + 5.7.7-200.fc32.x86_64: + description: '' + type: integer + required: + - 5.7.7-200.fc32.x86_64 + type: object + os: + description: '' + properties: + Linux: + description: '' + type: integer + required: + - Linux + type: object + osd_objectstore: + description: '' + properties: + bluestore: + description: '' + type: integer + required: + - bluestore + type: object + rotational: + description: '' + properties: + '1': + description: '' + type: integer + required: + - '1' + type: object + required: + - osd_objectstore + - rotational + - arch + - ceph_version + - os + - cpu + - kernel_description + - kernel_version + - distro_description + - distro + type: object + required: + - osd + - mon + type: object + mon: + description: '' + properties: + count: + description: '' + type: integer + features: + description: '' + properties: + optional: + description: '' + items: + type: integer + type: array + persistent: + description: '' + items: + type: string + type: array + required: + - persistent + - optional + type: object + ipv4_addr_mons: + description: '' + type: integer + ipv6_addr_mons: + description: '' + type: integer + min_mon_release: + description: '' + type: integer + v1_addr_mons: + description: '' + type: integer + v2_addr_mons: + description: '' + type: integer + required: + - count + - features + - min_mon_release + - v1_addr_mons + - v2_addr_mons + - ipv4_addr_mons + - ipv6_addr_mons + type: object + osd: + description: '' + properties: + cluster_network: + description: '' + type: boolean + count: + description: '' + type: integer + require_min_compat_client: + description: '' + type: string + require_osd_release: + description: '' + type: string + required: + - count + - require_osd_release + - require_min_compat_client + - cluster_network + type: object + pools: + description: '' + items: + properties: + cache_mode: + description: '' + type: string + erasure_code_profile: + description: '' + type: string + min_size: + description: '' + type: integer + pg_autoscale_mode: + description: '' + type: string + pg_num: + description: '' + type: integer + pgp_num: + description: '' + type: integer + pool: + description: '' + type: integer + size: + description: '' + type: integer + target_max_bytes: + description: '' + type: integer + target_max_objects: + description: '' + type: integer + type: + description: '' + type: string + required: + - pool + - type + - pg_num + - pgp_num + - size + - min_size + - pg_autoscale_mode + - target_max_bytes + - target_max_objects + - erasure_code_profile + - cache_mode + type: object + type: array + rbd: + description: '' + properties: + mirroring_by_pool: + description: '' + items: + type: boolean + type: array + num_images_by_pool: + description: '' + items: + type: integer + type: array + num_pools: + description: '' + type: integer + required: + - num_pools + - num_images_by_pool + - mirroring_by_pool + type: object + report_id: + description: '' + type: string + report_timestamp: + description: '' + type: string + report_version: + description: '' + type: integer + rgw: + description: '' + properties: + count: + description: '' + type: integer + frontends: + description: '' + items: + type: string + type: array + zonegroups: + description: '' + type: integer + zones: + description: '' + type: integer + required: + - count + - zones + - zonegroups + - frontends + type: object + services: + description: '' + properties: + rgw: + description: '' + type: integer + required: + - rgw + type: object + usage: + description: '' + properties: + pg_num: + description: '' + type: integer + pools: + description: '' + type: integer + total_avail_bytes: + description: '' + type: integer + total_bytes: + description: '' + type: integer + total_used_bytes: + description: '' + type: integer + required: + - pools + - pg_num + - total_used_bytes + - total_bytes + - total_avail_bytes + type: object + required: + - leaderboard + - report_version + - report_timestamp + - report_id + - channels + - channels_available + - license + - created + - mon + - config + - rbd + - pools + - osd + - crush + - fs + - metadata + - hosts + - usage + - services + - rgw + - balancer + - crashes + type: object + required: + - report + - device_report + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Get Detailed Telemetry report + tags: + - Telemetry + /api/user: + get: + parameters: [] + responses: + '200': + content: + application/json: + schema: + properties: + email: + description: User email address + type: string + enabled: + description: Is the user enabled? + type: boolean + lastUpdate: + description: Details last updated + type: integer + name: + description: User Name + type: string + pwdExpirationDate: + description: Password Expiration date + type: string + pwdUpdateRequired: + description: Is Password Update Required? + type: boolean + roles: + description: User Roles + items: + type: string + type: array + username: + description: Username of the user + type: string + required: + - username + - roles + - name + - email + - lastUpdate + - enabled + - pwdExpirationDate + - pwdUpdateRequired + type: object + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + summary: Get List Of Users + tags: + - User + post: + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + email: + type: string + enabled: + default: true + type: boolean + name: + type: string + password: + type: string + pwdExpirationDate: + type: string + pwdUpdateRequired: + default: true + type: boolean + roles: + type: string + username: + type: string + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - User + /api/user/validate_password: + post: + description: "\n Check if the password meets the password policy.\n \ + \ :param password: The password to validate.\n :param username:\ + \ The name of the user (optional).\n :param old_password: The old password\ + \ (optional).\n :return: An object with properties valid, credits and\ + \ valuation.\n 'credits' contains the password complexity credits and\n\ + \ 'valuation' the textual summary of the validation.\n " + parameters: [] + requestBody: + content: + application/json: + schema: + properties: + old_password: + type: string + password: + type: string + username: + type: string + required: + - password + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - UserPasswordPolicy + /api/user/{username}: + delete: + parameters: + - in: path + name: username + required: true + schema: + type: string + responses: + '202': + description: Operation is still executing. Please check the task queue. + '204': + description: Resource deleted. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - User + get: + parameters: + - in: path + name: username + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - User + put: + parameters: + - in: path + name: username + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + email: + type: string + enabled: + type: string + name: + type: string + password: + type: string + pwdExpirationDate: + type: string + pwdUpdateRequired: + default: false + type: boolean + roles: + type: string + type: object + responses: + '200': + description: Resource updated. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - User + /api/user/{username}/change_password: + post: + parameters: + - in: path + name: username + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + new_password: + type: string + old_password: + type: string + required: + - old_password + - new_password + type: object + responses: + '201': + description: Resource created. + '202': + description: Operation is still executing. Please check the task queue. + '400': + description: Operation exception. Please check the response body for details. + '401': + description: Unauthenticated access. Please login first. + '403': + description: Unauthorized access. Please check your permissions. + '500': + description: Unexpected error. Please check the response body for the stack + trace. + security: + - jwt: [] + tags: + - UserChangePassword +schemes: +- https +servers: +- url: / +tags: +- description: Initiate a session with Ceph + name: Auth +- description: Cephfs Management API + name: Cephfs +- description: Manage Cluster Configurations + name: ClusterConfiguration +- description: Crush Rule Management API + name: CrushRule +- description: Erasure Code Profile Management API + name: ErasureCodeProfile +- description: Manage Features API + name: FeatureTogglesEndpoint +- description: Grafana Management API + name: Grafana +- description: Display Detailed Cluster health Status + name: Health +- description: Get Host Details + name: Host +- description: Iscsi Management API + name: Iscsi +- description: Get Iscsi Target Details + name: IscsiTarget +- description: Logs Management API + name: Logs +- description: Mds Perf Counters Management API + name: MdsPerfCounter +- description: Get details of MGR Module + name: MgrModule +- description: Mgr Perf Counters Management API + name: MgrPerfCounter +- description: Mon Perf Counters Management API + name: MonPerfCounter +- description: Get Monitor Details + name: Monitor +- description: NFS-Ganesha Management API + name: NFS-Ganesha +- description: OSD management API + name: OSD +- description: Orchestrator Management API + name: Orchestrator +- description: Get Orchestrator Inventory Details + name: OrchestratorInventory +- description: OSD Perf Counters Management API + name: OsdPerfCounter +- description: Perf Counters Management API + name: PerfCounters +- description: Get pool details by pool name + name: Pool +- description: Prometheus Management API + name: Prometheus +- description: Prometheus Notifications Management API + name: PrometheusNotifications +- description: RBD Management API + name: Rbd +- description: RBD Mirroring Management API + name: RbdMirroring +- description: RBD Mirroring Pool Bootstrap Management API + name: RbdMirroringPoolBootstrap +- description: RBD Mirroring Pool Mode Management API + name: RbdMirroringPoolMode +- description: RBD Mirroring Pool Peer Management API + name: RbdMirroringPoolPeer +- description: RBD Mirroring Summary Management API + name: RbdMirroringSummary +- description: RBD Namespace Management API + name: RbdNamespace +- description: RBD Snapshot Management API + name: RbdSnapshot +- description: RBD Trash Management API + name: RbdTrash +- description: RGW Management API + name: Rgw +- description: RGW Bucket Management API + name: RgwBucket +- description: RGW Daemon Management API + name: RgwDaemon +- description: Rgw Mirroring Perf Counters Management API + name: RgwMirrorPerfCounter +- description: Rgw Perf Counters Management API + name: RgwPerfCounter +- description: RGW Site Management API + name: RgwSite +- description: RGW User Management API + name: RgwUser +- description: Role Management API + name: Role +- description: Service Management API + name: Service +- description: Settings Management API + name: Settings +- description: Get Ceph Summary Details + name: Summary +- description: Task Management API + name: Task +- description: Tcmu Runner Perf Counters Management API + name: TcmuRunnerPerfCounter +- description: Display Telemetry Report + name: Telemetry +- description: Display User Details + name: User +- description: Change User Password + name: UserChangePassword +- description: Get User Password Policy Details + name: UserPasswordPolicy diff --git a/src/pybind/mgr/dashboard/requirements-extra.txt b/src/pybind/mgr/dashboard/requirements-extra.txt new file mode 100644 index 0000000000000..56c37b59ae569 --- /dev/null +++ b/src/pybind/mgr/dashboard/requirements-extra.txt @@ -0,0 +1 @@ +python3-saml \ No newline at end of file diff --git a/src/pybind/mgr/dashboard/requirements.txt b/src/pybind/mgr/dashboard/requirements.txt index eb0da8026734f..282a07573cdf5 100644 --- a/src/pybind/mgr/dashboard/requirements.txt +++ b/src/pybind/mgr/dashboard/requirements.txt @@ -4,7 +4,6 @@ enum34; python_version<'3.4' more-itertools PyJWT pyopenssl -python3-saml requests Routes -e ../../../python-common diff --git a/src/pybind/mgr/dashboard/tox.ini b/src/pybind/mgr/dashboard/tox.ini index b147e3d8cafe5..e45907be7a21b 100644 --- a/src/pybind/mgr/dashboard/tox.ini +++ b/src/pybind/mgr/dashboard/tox.ini @@ -5,6 +5,8 @@ envlist = fix, check, run, + apidocs, + openapi-{check,fix, doc} skipsdist = true minversion = 2.9.1 @@ -32,6 +34,7 @@ deps = deps = {[base]deps} {[base-test]deps} + -rrequirements-extra.txt setenv = CFLAGS = -DXMLSEC_NO_SIZE_T PYTHONUNBUFFERED=1 @@ -47,8 +50,7 @@ deps = {[base]deps} {[base-test]deps} {[base-lint]deps} -# TODO: replace with allowlist_external tox=>16.1 (https://github.com/tox-dev/tox/pull/1601) -whitelist_externals = * +allowlist_externals = * commands = {posargs} [flake8] @@ -140,3 +142,27 @@ commands = [testenv:check] commands = python ci/check_grafana_uids.py frontend/src/app ../../../../monitoring/grafana/dashboards + +[testenv:openapi-{check,fix}] +basepython = python3 +allowlist_externals = diff +description = + check: Ensure that auto-generated OpenAPI Specification matches the current version + fix: Update auto-generated OpenAPI Specification with the latest changes +deps = + {[base]deps} + {[base-test]deps} +setenv = + UNITTEST = true + PYTHONPATH=$PYTHONPATH:.. + OPENAPI_FILE=openapi.yaml + check: OPENAPI_FILE_TMP={envtmpdir}/{env:OPENAPI_FILE} +commands = + python3 -m dashboard.controllers.docs {env:OPENAPI_FILE_TMP:{env:OPENAPI_FILE}} + check: diff {env:OPENAPI_FILE} {env:OPENAPI_FILE_TMP} + +[testenv:openapi-doc] +description = Generate Sphinx documentation from OpenAPI specification +deps = -r../../../../admin/doc-requirements.txt +changedir = ../../../../doc +commands = sphinx-build -W -b html -c . -D suppress_warnings=ref.* -d {envtmpdir}/doctrees mgr/ceph_api {envtmpdir}/html -- 2.39.5