Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / pybind / mgr / dashboard / rbd_iscsi.py
1
2 import rados
3 import rbd
4 from remote_view_cache import RemoteViewCache
5
6 SERVICE_TYPE = 'tcmu-runner'
7
8 class DaemonsAndImages(RemoteViewCache):
9     def _get(self):
10         daemons = {}
11         images = {}
12         for server in self._module.list_servers():
13             for service in server['services']:
14                 if service['type'] == SERVICE_TYPE:
15                     metadata = self._module.get_metadata(SERVICE_TYPE,
16                                                          service['id'])
17                     status = self._module.get_daemon_status(SERVICE_TYPE,
18                                                             service['id'])
19
20                     daemon = daemons.get(server['hostname'], None)
21                     if daemon is None:
22                         daemon = {
23                             'server_hostname': server['hostname'],
24                             'version': metadata['ceph_version'],
25                             'optimized_paths': 0,
26                             'non_optimized_paths': 0
27                         }
28                         daemons[server['hostname']] = daemon
29
30                     image_id = service['id'].split(':')[-1]
31                     image = images.get(image_id)
32                     if image is None:
33                         image = {
34                             'id': image_id,
35                             'pool_name': metadata['pool_name'],
36                             'name': metadata['image_name'],
37                             'optimized_paths': [],
38                             'non_optimized_paths': []
39                         }
40                         images[image_id] = image
41                     if status.get('lock_owner', 'false') == 'true':
42                         daemon['optimized_paths'] += 1
43                         image['optimized_paths'].append(server['hostname'])
44                     else:
45                         daemon['non_optimized_paths'] += 1
46                         image['non_optimized_paths'].append(server['hostname'])
47
48         return {
49             'daemons': [daemons[k] for k in sorted(daemons, key=daemons.get)],
50             'images': [images[k] for k in sorted(images, key=images.get)]
51         }
52
53 class Controller:
54     def __init__(self, module_inst):
55         self.content_data = DaemonsAndImages(module_inst)