--- /dev/null
+# -*- coding: utf-8 -*-
+from __future__ import absolute_import
+
+from . import Service
+
+
+class CephService(Service):
+ @classmethod
+ def get_service_map(cls, service_name):
+ service_map = {}
+ for server in cls.mgr.list_servers():
+ for service in server['services']:
+ if service['type'] == service_name:
+ if server['hostname'] not in service_map:
+ service_map[server['hostname']] = {
+ 'server': server,
+ 'services': []
+ }
+ inst_id = service['id']
+ metadata = cls.mgr.get_metadata(service_name, inst_id)
+ status = cls.mgr.get_daemon_status(service_name, inst_id)
+ service_map[server['hostname']]['services'].append({
+ 'id': inst_id,
+ 'type': service_name,
+ 'hostname': server['hostname'],
+ 'metadata': metadata,
+ 'status': status
+ })
+ return service_map
+
+ @classmethod
+ def get_service_list(cls, service_name):
+ service_map = cls.get_service_map(service_name)
+ return [svc for _, svcs in service_map.items() for svc in svcs['services']]
+
+ @classmethod
+ def get_service(cls, service_name, service_id):
+ for server in cls.mgr.list_servers():
+ for service in server['services']:
+ if service['type'] == service_name:
+ inst_id = service['id']
+ if inst_id == service_id:
+ metadata = cls.mgr.get_metadata(service_name, inst_id)
+ status = cls.mgr.get_daemon_status(service_name, inst_id)
+ return {
+ 'id': inst_id,
+ 'type': service_name,
+ 'hostname': server['hostname'],
+ 'metadata': metadata,
+ 'status': status
+ }
+ return None
+
+ @classmethod
+ def get_pool_list(cls, application=None):
+ osd_map = cls.mgr.get('osd_map')
+ if not application:
+ return osd_map['pools']
+ return [pool for pool in osd_map['pools']
+ if application in pool.get('application_metadata', {})]