ceph orch service {stop,start,reload} <type> <name>
ceph orch daemon {start,stop,reload} <type> <daemon-id>
+
+
+.. _orchestrator-cli-placement-spec:
+
+Placement Specification
+=======================
+
+In order to allow the orchestrator to deploy a *service*, it needs to
+know how many and where it should deploy *daemons*. The orchestrator
+defines a placement specification:
+
+* To deploy three *daemons*, simply specify the count: ``3``
+* To deploy *daemons* on specific hosts, specify the host names: ``host1 host2 host3``
+* To deploy *daemons* on a subset of hosts, also specify the count: ``2 host1 host2 host3``
Configuring the Orchestrator CLI
.. autoclass:: ProgressReference
:members:
-
-Placement
----------
-
-In general, stateless services do not require any specific placement
-rules, as they can run anywhere that sufficient system resources
-are available. However, some orchestrators may not include the
-functionality to choose a location in this way, so we can optionally
-specify a location when creating a stateless service.
-
-OSD services generally require a specific placement choice, as this
-will determine which storage devices are used.
-
Error Handling
--------------
.. py:currentmodule:: orchestrator
+Placement
+---------
+
+A :ref:`orchestrator-cli-placement-spec` defines the placement of
+daemons of a specifc service.
+
+In general, stateless services do not require any specific placement
+rules as they can run anywhere that sufficient system resources
+are available. However, some orchestrators may not include the
+functionality to choose a location in this way. Optionally, you can
+specify a location when creating a stateless service.
+
+
+.. autoclass:: PlacementSpec
+ :members:
+
Services
--------
def validate(self):
if self.hosts and self.label:
# TODO: a less generic Exception
- raise Exception('Host and label are mutually exclusive')
+ raise OrchestratorValidationError('Host and label are mutually exclusive')
if self.count is not None and self.count <= 0:
- raise Exception("num/count must be > 1")
+ raise OrchestratorValidationError("num/count must be > 1")
@classmethod
def from_strings(cls, strings):