]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/dashboard/controllers/crush_rule.py
bump version to 15.2.4-pve1
[ceph.git] / ceph / src / pybind / mgr / dashboard / controllers / crush_rule.py
CommitLineData
9f95a23c
TL
1# -*- coding: utf-8 -*-
2from __future__ import absolute_import
3
4from cherrypy import NotFound
5
6from . import ApiController, RESTController, Endpoint, ReadPermission, UiApiController
7from ..security import Scope
8from ..services.ceph_service import CephService
9from .. import mgr
10
11
12@ApiController('/crush_rule', Scope.POOL)
13class CrushRule(RESTController):
14 def list(self):
15 return mgr.get('osd_map_crush')['rules']
16
17 def get(self, name):
18 rules = mgr.get('osd_map_crush')['rules']
19 for r in rules:
20 if r['rule_name'] == name:
21 return r
22 raise NotFound('No such crush rule')
23
24 def create(self, name, root, failure_domain, device_class=None):
25 rule = {
26 'name': name,
27 'root': root,
28 'type': failure_domain,
29 'class': device_class
30 }
31 CephService.send_command('mon', 'osd crush rule create-replicated', **rule)
32
33 def delete(self, name):
34 CephService.send_command('mon', 'osd crush rule rm', name=name)
35
36
37@UiApiController('/crush_rule', Scope.POOL)
38class CrushRuleUi(CrushRule):
39 @Endpoint()
40 @ReadPermission
41 def info(self):
42 '''Used for crush rule creation modal'''
43 return {
44 'names': [r['rule_name'] for r in mgr.get('osd_map_crush')['rules']],
45 'nodes': mgr.get('osd_map_tree')['nodes']
46 }