]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/controllers/orchestrator.py
085870a0f4aac7bbbda82e87dc3d71e6c530bf18
[ceph.git] / ceph / src / pybind / mgr / dashboard / controllers / orchestrator.py
1 # -*- coding: utf-8 -*-
2 from __future__ import absolute_import
3
4 from functools import wraps
5
6 from ..exceptions import DashboardException
7 from ..services.orchestrator import OrchClient
8 from . import ApiController, ControllerDoc, Endpoint, EndpointDoc, ReadPermission, RESTController
9
10 STATUS_SCHEMA = {
11 "available": (bool, "Orchestrator status"),
12 "message": (str, "Error message")
13 }
14
15
16 def raise_if_no_orchestrator(features=None):
17 def inner(method):
18 @wraps(method)
19 def _inner(self, *args, **kwargs):
20 orch = OrchClient.instance()
21 if not orch.available():
22 raise DashboardException(code='orchestrator_status_unavailable', # pragma: no cover
23 msg='Orchestrator is unavailable',
24 component='orchestrator',
25 http_status_code=503)
26 if features is not None:
27 missing = orch.get_missing_features(features)
28 if missing:
29 msg = 'Orchestrator feature(s) are unavailable: {}'.format(', '.join(missing))
30 raise DashboardException(code='orchestrator_features_unavailable',
31 msg=msg,
32 component='orchestrator',
33 http_status_code=503)
34 return method(self, *args, **kwargs)
35 return _inner
36 return inner
37
38
39 @ApiController('/orchestrator')
40 @ControllerDoc("Orchestrator Management API", "Orchestrator")
41 class Orchestrator(RESTController):
42
43 @Endpoint()
44 @ReadPermission
45 @EndpointDoc("Display Orchestrator Status",
46 responses={200: STATUS_SCHEMA})
47 def status(self):
48 return OrchClient.instance().status()