Indicate whether a service or a job should be deployed as a replicated or global service, and associated parameters Args: mode (string): Can be either ``replicated``, ``global``, ``replicated-job`` or ``global-job`` replicas (int): Numb
| 593 | |
| 594 | |
| 595 | class ServiceMode(dict): |
| 596 | """ |
| 597 | Indicate whether a service or a job should be deployed as a replicated |
| 598 | or global service, and associated parameters |
| 599 | |
| 600 | Args: |
| 601 | mode (string): Can be either ``replicated``, ``global``, |
| 602 | ``replicated-job`` or ``global-job`` |
| 603 | replicas (int): Number of replicas. For replicated services only. |
| 604 | concurrency (int): Number of concurrent jobs. For replicated job |
| 605 | services only. |
| 606 | """ |
| 607 | |
| 608 | def __init__(self, mode, replicas=None, concurrency=None): |
| 609 | replicated_modes = ('replicated', 'replicated-job') |
| 610 | supported_modes = replicated_modes + ('global', 'global-job') |
| 611 | |
| 612 | if mode not in supported_modes: |
| 613 | raise errors.InvalidArgument( |
| 614 | 'mode must be either "replicated", "global", "replicated-job"' |
| 615 | ' or "global-job"' |
| 616 | ) |
| 617 | |
| 618 | if mode not in replicated_modes: |
| 619 | if replicas is not None: |
| 620 | raise errors.InvalidArgument( |
| 621 | 'replicas can only be used for "replicated" or' |
| 622 | ' "replicated-job" mode' |
| 623 | ) |
| 624 | |
| 625 | if concurrency is not None: |
| 626 | raise errors.InvalidArgument( |
| 627 | 'concurrency can only be used for "replicated-job" mode' |
| 628 | ) |
| 629 | |
| 630 | service_mode = self._convert_mode(mode) |
| 631 | self.mode = service_mode |
| 632 | self[service_mode] = {} |
| 633 | |
| 634 | if replicas is not None: |
| 635 | if mode == 'replicated': |
| 636 | self[service_mode]['Replicas'] = replicas |
| 637 | |
| 638 | if mode == 'replicated-job': |
| 639 | self[service_mode]['MaxConcurrent'] = concurrency or 1 |
| 640 | self[service_mode]['TotalCompletions'] = replicas |
| 641 | |
| 642 | @staticmethod |
| 643 | def _convert_mode(original_mode): |
| 644 | if original_mode == 'global-job': |
| 645 | return 'GlobalJob' |
| 646 | |
| 647 | if original_mode == 'replicated-job': |
| 648 | return 'ReplicatedJob' |
| 649 | |
| 650 | return original_mode |
| 651 | |
| 652 | @property |
no outgoing calls