summaryrefslogtreecommitdiff
path: root/docker/models/services.py
diff options
context:
space:
mode:
Diffstat (limited to 'docker/models/services.py')
-rw-r--r--docker/models/services.py22
1 files changed, 14 insertions, 8 deletions
diff --git a/docker/models/services.py b/docker/models/services.py
index 612f345..7fbd165 100644
--- a/docker/models/services.py
+++ b/docker/models/services.py
@@ -1,6 +1,6 @@
import copy
from docker.errors import create_unexpected_kwargs_error, InvalidArgument
-from docker.types import TaskTemplate, ContainerSpec, ServiceMode
+from docker.types import TaskTemplate, ContainerSpec, Placement, ServiceMode
from .resource import Model, Collection
@@ -153,6 +153,9 @@ class ServiceCollection(Collection):
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
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``.
@@ -302,6 +305,12 @@ CREATE_SERVICE_KWARGS = [
'endpoint_spec',
]
+PLACEMENT_KWARGS = [
+ 'constraints',
+ 'preferences',
+ 'platforms',
+]
+
def _get_create_service_kwargs(func_name, kwargs):
# Copy over things which can be copied directly
@@ -322,13 +331,10 @@ def _get_create_service_kwargs(func_name, kwargs):
container_spec_kwargs['labels'] = kwargs.pop('container_labels')
placement = {}
-
- if 'constraints' in kwargs:
- placement['Constraints'] = kwargs.pop('constraints')
-
- if 'preferences' in kwargs:
- placement['Preferences'] = kwargs.pop('preferences')
-
+ for key in copy.copy(kwargs):
+ if key in PLACEMENT_KWARGS:
+ placement[key] = kwargs.pop(key)
+ placement = Placement(**placement)
task_template_kwargs['placement'] = placement
if 'log_driver' in kwargs: