error out on both scale and deploy.replicas being set

Signed-off-by: aiordache <anca.iordache@docker.com>
This commit is contained in:
aiordache 2020-07-10 17:28:02 +02:00
parent faedc4aa9e
commit 6cf72381f9

View File

@ -276,19 +276,31 @@ class Project(object):
def get_service_scale(self, service_dict): def get_service_scale(self, service_dict):
# service.scale for v2 and deploy.replicas for v3 # service.scale for v2 and deploy.replicas for v3
scale = service_dict.get('scale', 1) scale = service_dict.get('scale', None)
deploy_dict = service_dict.get('deploy', None) deploy_dict = service_dict.get('deploy', None)
if deploy_dict: if not deploy_dict:
if deploy_dict.get('mode', 'replicated') == 'replicated': return 1 if scale is None else scale
scale = deploy_dict.get('replicas', scale)
# deploy may contain placement constraints introduced in v3.8 if deploy_dict.get('mode', 'replicated') != 'replicated':
max_replicas = deploy_dict.get('placement', {}).get( return 1 if scale is None else scale
'max_replicas_per_node',
scale) replicas = deploy_dict.get('replicas', None)
scale = min(scale, max_replicas) if scale and replicas:
if max_replicas < scale: raise ConfigurationError(
log.warning("Scale is limited to {} ('max_replicas_per_node' field).".format( "Both service.scale and service.deploy.replicas are set."
max_replicas)) " Only one of them must be set."
)
if replicas:
scale = replicas
# deploy may contain placement constraints introduced in v3.8
max_replicas = deploy_dict.get('placement', {}).get(
'max_replicas_per_node',
scale)
scale = min(scale, max_replicas)
if max_replicas < scale:
log.warning("Scale is limited to {} ('max_replicas_per_node' field).".format(
max_replicas))
return scale return scale
def start(self, service_names=None, **options): def start(self, service_names=None, **options):