--- /dev/null
+
+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)