]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: Add `pool/_info` api endpoint to fill the create-pool dialog
authorSebastian Wagner <sebastian.wagner@suse.com>
Wed, 21 Mar 2018 13:52:14 +0000 (14:52 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Fri, 23 Mar 2018 15:40:18 +0000 (16:40 +0100)
Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/dashboard/controllers/pool.py

index 19f53b7731d2984e1eb8e1d93d9580f04210fd03..c1216333b8af3d0823e398f842927e05f7e0ebe3 100644 (file)
@@ -1,6 +1,9 @@
 # -*- coding: utf-8 -*-
 from __future__ import absolute_import
 
+import cherrypy
+
+from .. import mgr
 from ..services.ceph_service import CephService
 from ..tools import ApiController, RESTController, AuthRequired
 
@@ -71,3 +74,29 @@ class Pool(RESTController):
 
         for key, value in kwargs.items():
             CephService.send_command('mon', 'osd pool set', pool=pool, var=key, val=value)
+
+    @cherrypy.tools.json_out()
+    @cherrypy.expose
+    def _info(self):
+        """Used by the create-pool dialog"""
+        def rules(pool_type):
+            return [r["rule_name"]
+                    for r in mgr.get('osd_map_crush')['rules']
+                    if r['type'] == pool_type]
+
+        def all_bluestore():
+            return all(o['osd_objectstore'] == 'bluestore'
+                       for o in mgr.get('osd_metadata').values())
+
+        def compression_enum(conf_name):
+            return [o['enum_values'] for o in mgr.get('config_options')['options']
+                    if o['name'] == conf_name][0]
+
+        return {
+            "pool_names": [p['pool_name'] for p in self.list()],
+            "crush_rules_replicated": rules(1),
+            "crush_rules_erasure": rules(3),
+            "is_all_bluestore": all_bluestore(),
+            "compression_algorithms": compression_enum('bluestore_compression_algorithm'),
+            "compression_modes": compression_enum('bluestore_compression_mode'),
+        }