for different orchestrators is to enable common UI code, such as
the dashboard, to work with various different backends.
+
+.. graphviz::
+
+ digraph G {
+ subgraph cluster_1 {
+ volumes [label="mgr/volumes"]
+ rook [label="mgr/rook"]
+ dashboard [label="mgr/dashboard"]
+ orchestrator_cli [label="mgr/orchestrator_cli"]
+ orchestrator [label="Orchestrator Interface"]
+ ansible [label="mgr/ansible"]
+ ssh [label="mgr/ssh"]
+ deepsea [label="mgr/deepsea"]
+
+ label = "ceph-mgr";
+ }
+
+ volumes -> orchestrator
+ dashboard -> orchestrator
+ orchestrator_cli -> orchestrator
+ orchestrator -> rook -> rook_io
+ orchestrator -> ansible -> ceph_ansible
+ orchestrator -> deepsea -> suse_deepsea
+ orchestrator -> ssh
+
+
+ rook_io [label="Rook"]
+ ceph_ansible [label="ceph-ansible"]
+ suse_deepsea [label="DeepSea"]
+
+ rankdir="TB";
+ }
+
Behind all the abstraction, the purpose of orchestrator modules is simple:
enable Ceph to do things like discover available hardware, create and
destroy OSDs, and run MDS and RGW services.
Ceph clusters). Each drive is assumed to be visible only on
a single node.
+Host management
+---------------
+
+.. automethod:: Orchestrator.add_host
+.. automethod:: Orchestrator.remote_host
+.. automethod:: Orchestrator.get_hosts
+
Inventory and status
--------------------
.. automethod:: Orchestrator.describe_service
.. autoclass:: ServiceDescription
+Service Actions
+---------------
+
+.. automethod:: Orchestrator.service_action
+
OSD management
--------------
:members:
:exclude-members: from_json
+Stateless Services
+------------------
+
+.. automethod:: Orchestrator.add_stateless_service
+.. automethod:: Orchestrator.update_stateless_service
+.. automethod:: Orchestrator.remove_stateless_service
+
Upgrades
--------
``Orchestrator`` implementations should inherit from this
class to implement their own handles to operations in progress, and
return an instance of their subclass from calls into methods.
-
- Read operations are
"""
def __init__(self):
Perform an action (start/stop/reload) on a service.
Either service_name or service_id must be specified:
- - If using service_name, perform the action on that entire logical
+
+ * If using service_name, perform the action on that entire logical
service (i.e. all daemons providing that named service).
- - If using service_id, perform the action on a single specific daemon
+ * If using service_id, perform the action on a single specific daemon
instance.
:param action: one of "start", "stop", "reload"