X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fpybind%2Fmgr%2Fdashboard%2Frbd_iscsi.py;fp=src%2Fceph%2Fsrc%2Fpybind%2Fmgr%2Fdashboard%2Frbd_iscsi.py;h=d0de918dab1130f11404b6dd209054dd69994b83;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/pybind/mgr/dashboard/rbd_iscsi.py b/src/ceph/src/pybind/mgr/dashboard/rbd_iscsi.py new file mode 100644 index 0000000..d0de918 --- /dev/null +++ b/src/ceph/src/pybind/mgr/dashboard/rbd_iscsi.py @@ -0,0 +1,55 @@ + +import rados +import rbd +from remote_view_cache import RemoteViewCache + +SERVICE_TYPE = 'tcmu-runner' + +class DaemonsAndImages(RemoteViewCache): + def _get(self): + daemons = {} + images = {} + for server in self._module.list_servers(): + for service in server['services']: + if service['type'] == SERVICE_TYPE: + metadata = self._module.get_metadata(SERVICE_TYPE, + service['id']) + status = self._module.get_daemon_status(SERVICE_TYPE, + service['id']) + + daemon = daemons.get(server['hostname'], None) + if daemon is None: + daemon = { + 'server_hostname': server['hostname'], + 'version': metadata['ceph_version'], + 'optimized_paths': 0, + 'non_optimized_paths': 0 + } + daemons[server['hostname']] = daemon + + image_id = service['id'].split(':')[-1] + image = images.get(image_id) + if image is None: + image = { + 'id': image_id, + 'pool_name': metadata['pool_name'], + 'name': metadata['image_name'], + 'optimized_paths': [], + 'non_optimized_paths': [] + } + images[image_id] = image + if status.get('lock_owner', 'false') == 'true': + daemon['optimized_paths'] += 1 + image['optimized_paths'].append(server['hostname']) + else: + daemon['non_optimized_paths'] += 1 + image['non_optimized_paths'].append(server['hostname']) + + return { + 'daemons': [daemons[k] for k in sorted(daemons, key=daemons.get)], + 'images': [images[k] for k in sorted(images, key=images.get)] + } + +class Controller: + def __init__(self, module_inst): + self.content_data = DaemonsAndImages(module_inst)