mirror of https://github.com/docker/docker-py.git
Merge pull request #2197 from docker/2185-placement-prefs
Improve handling of placement preferences and associated docs
This commit is contained in:
commit
d77d4256d7
|
@ -153,10 +153,12 @@ class ServiceCollection(Collection):
|
|||
image (str): The image name to use for the containers.
|
||||
command (list of str or str): Command to run.
|
||||
args (list of str): Arguments to the command.
|
||||
constraints (list of str): Placement constraints.
|
||||
preferences (list of str): Placement preferences.
|
||||
platforms (list of tuple): A list of platforms constraints
|
||||
expressed as ``(arch, os)`` tuples
|
||||
constraints (list of str): :py:class:`~docker.types.Placement`
|
||||
constraints.
|
||||
preferences (list of tuple): :py:class:`~docker.types.Placement`
|
||||
preferences.
|
||||
platforms (list of tuple): A list of platform constraints
|
||||
expressed as ``(arch, os)`` tuples.
|
||||
container_labels (dict): Labels to apply to the container.
|
||||
endpoint_spec (EndpointSpec): Properties that can be configured to
|
||||
access and load balance a service. Default: ``None``.
|
||||
|
|
|
@ -5,7 +5,8 @@ from .healthcheck import Healthcheck
|
|||
from .networks import EndpointConfig, IPAMConfig, IPAMPool, NetworkingConfig
|
||||
from .services import (
|
||||
ConfigReference, ContainerSpec, DNSConfig, DriverConfig, EndpointSpec,
|
||||
Mount, Placement, Privileges, Resources, RestartPolicy, RollbackConfig,
|
||||
SecretReference, ServiceMode, TaskTemplate, UpdateConfig
|
||||
Mount, Placement, PlacementPreference, Privileges, Resources,
|
||||
RestartPolicy, RollbackConfig, SecretReference, ServiceMode, TaskTemplate,
|
||||
UpdateConfig
|
||||
)
|
||||
from .swarm import SwarmSpec, SwarmExternalCA
|
||||
|
|
|
@ -648,18 +648,24 @@ class Placement(dict):
|
|||
Placement constraints to be used as part of a :py:class:`TaskTemplate`
|
||||
|
||||
Args:
|
||||
constraints (:py:class:`list`): A list of constraints
|
||||
preferences (:py:class:`list`): Preferences provide a way to make
|
||||
the scheduler aware of factors such as topology. They are
|
||||
provided in order from highest to lowest precedence.
|
||||
platforms (:py:class:`list`): A list of platforms expressed as
|
||||
``(arch, os)`` tuples
|
||||
constraints (:py:class:`list` of str): A list of constraints
|
||||
preferences (:py:class:`list` of tuple): Preferences provide a way
|
||||
to make the scheduler aware of factors such as topology. They
|
||||
are provided in order from highest to lowest precedence and
|
||||
are expressed as ``(strategy, descriptor)`` tuples. See
|
||||
:py:class:`PlacementPreference` for details.
|
||||
platforms (:py:class:`list` of tuple): A list of platforms
|
||||
expressed as ``(arch, os)`` tuples
|
||||
"""
|
||||
def __init__(self, constraints=None, preferences=None, platforms=None):
|
||||
if constraints is not None:
|
||||
self['Constraints'] = constraints
|
||||
if preferences is not None:
|
||||
self['Preferences'] = preferences
|
||||
self['Preferences'] = []
|
||||
for pref in preferences:
|
||||
if isinstance(pref, tuple):
|
||||
pref = PlacementPreference(*pref)
|
||||
self['Preferences'].append(pref)
|
||||
if platforms:
|
||||
self['Platforms'] = []
|
||||
for plat in platforms:
|
||||
|
@ -668,6 +674,27 @@ class Placement(dict):
|
|||
})
|
||||
|
||||
|
||||
class PlacementPreference(dict):
|
||||
"""
|
||||
Placement preference to be used as an element in the list of
|
||||
preferences for :py:class:`Placement` objects.
|
||||
|
||||
Args:
|
||||
strategy (string): The placement strategy to implement. Currently,
|
||||
the only supported strategy is ``spread``.
|
||||
descriptor (string): A label descriptor. For the spread strategy,
|
||||
the scheduler will try to spread tasks evenly over groups of
|
||||
nodes identified by this label.
|
||||
"""
|
||||
def __init__(self, strategy, descriptor):
|
||||
if strategy != 'spread':
|
||||
raise errors.InvalidArgument(
|
||||
'PlacementPreference strategy value is invalid ({}):'
|
||||
' must be "spread".'.format(strategy)
|
||||
)
|
||||
self['SpreadOver'] = descriptor
|
||||
|
||||
|
||||
class DNSConfig(dict):
|
||||
"""
|
||||
Specification for DNS related configurations in resolver configuration
|
||||
|
|
|
@ -143,6 +143,7 @@ Configuration types
|
|||
.. autoclass:: LogConfig
|
||||
.. autoclass:: Mount
|
||||
.. autoclass:: Placement
|
||||
.. autoclass:: PlacementPreference
|
||||
.. autoclass:: Privileges
|
||||
.. autoclass:: Resources
|
||||
.. autoclass:: RestartPolicy
|
||||
|
|
|
@ -69,10 +69,12 @@ author = u'Docker Inc'
|
|||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = u'2.0'
|
||||
with open('../docker/version.py', 'r') as vfile:
|
||||
exec(vfile.read())
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = u'2.0'
|
||||
release = version
|
||||
# The short X.Y version.
|
||||
version = '{}.{}'.format(version_info[0], version_info[1])
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
|
Loading…
Reference in New Issue