})
def test_pool_info(self):
- self._get("/api/pool/_info")
+ self._get("/ui-api/pool/info")
self.assertSchemaBody(JObj({
'pool_names': JList(six.string_types),
'compression_algorithms': JList(six.string_types),
'crush_rules_erasure': JList(JObj({}, allow_unknown=True)),
'pg_autoscale_default_mode': six.string_types,
'pg_autoscale_modes': JList(six.string_types),
+ 'erasure_code_profiles': JList(JObj({}, allow_unknown=True)),
+ 'used_rules': JObj({}, allow_unknown=True),
}))
import time
import cherrypy
-from . import ApiController, RESTController, Endpoint, ReadPermission, Task
+from . import ApiController, RESTController, Endpoint, ReadPermission, Task, UiApiController
from .. import mgr
from ..security import Scope
from ..services.ceph_service import CephService
def configuration(self, pool_name):
return RbdConfiguration(pool_name).list()
+
+@UiApiController('/pool', Scope.POOL)
+class PoolUi(Pool):
@Endpoint()
@ReadPermission
- def _info(self, pool_name=''):
- # type: (str) -> dict
+ def info(self):
"""Used by the create-pool dialog"""
+ osd_map_crush = mgr.get('osd_map_crush')
+ options = mgr.get('config_options')['options']
def rules(pool_type):
return [r
- for r in mgr.get('osd_map_crush')['rules']
+ for r in osd_map_crush['rules']
if r['type'] == pool_type]
def all_bluestore():
def get_config_option_enum(conf_name):
return [[v for v in o['enum_values'] if len(v) > 0]
- for o in mgr.get('config_options')['options']
+ for o in options
if o['name'] == conf_name][0]
+ used_rules = {}
+ pool_names = []
+ for p in self._pool_list():
+ name = p['pool_name']
+ rule = p['crush_rule']
+ pool_names.append(name)
+ if rule in used_rules:
+ used_rules[rule].append(name)
+ else:
+ used_rules[rule] = [name]
+
mgr_config = mgr.get('config')
- result = {
- "pool_names": [p['pool_name'] for p in self._pool_list()],
+ return {
+ "pool_names": pool_names,
"crush_rules_replicated": rules(1),
"crush_rules_erasure": rules(3),
"is_all_bluestore": all_bluestore(),
"compression_modes": get_config_option_enum('bluestore_compression_mode'),
"pg_autoscale_default_mode": mgr_config['osd_pool_default_pg_autoscale_mode'],
"pg_autoscale_modes": get_config_option_enum('osd_pool_default_pg_autoscale_mode'),
+ "erasure_code_profiles": CephService.get_erasure_code_profiles(),
+ "used_rules": used_rules
}
-
- if pool_name:
- result['pool_options'] = RbdConfiguration(pool_name).list()
-
- return result