diff --git a/changelogs/fragments/1215-ecs-service-deployment-circuit-breaker-support.yml b/changelogs/fragments/1215-ecs-service-deployment-circuit-breaker-support.yml new file mode 100644 index 00000000000..b3476cf960c --- /dev/null +++ b/changelogs/fragments/1215-ecs-service-deployment-circuit-breaker-support.yml @@ -0,0 +1,2 @@ +minor_changes: +- ecs_service - ``deployment_circuit_breaker`` has been added as a supported feature (https://github.com/ansible-collections/community.aws/pull/1215). \ No newline at end of file diff --git a/plugins/modules/ecs_service.py b/plugins/modules/ecs_service.py index 5c19280daaa..ea90e9bb1ae 100644 --- a/plugins/modules/ecs_service.py +++ b/plugins/modules/ecs_service.py @@ -101,6 +101,16 @@ minimum_healthy_percent: type: int description: A lower limit on the number of tasks in a service that must remain in the RUNNING state during a deployment. + deployment_circuit_breaker: + type: dict + description: The deployment circuit breaker determines whether a service deployment will fail if the service can't reach a steady state. + suboptions: + enable: + type: bool + description: If enabled, a service deployment will transition to a failed state and stop launching new tasks. + rollback: + type: bool + description: If enabled, ECS will roll back your service to the last completed deployment after a failure. placement_constraints: description: - The placement constraints for the tasks in the service. @@ -328,6 +338,19 @@ description: minimumHealthyPercent param returned: always type: int + deploymentCircuitBreaker: + description: dictionary of deploymentCircuitBreaker + returned: always + type: complex + contains: + enable: + description: The state of the circuit breaker feature. + returned: always + type: bool + rollback: + description: The state of the rollback feature of the circuit breaker. + returned: always + type: bool events: description: list of service events returned: always @@ -444,6 +467,19 @@ description: minimumHealthyPercent param returned: always type: int + deploymentCircuitBreaker: + description: dictionary of deploymentCircuitBreaker + returned: always + type: complex + contains: + enable: + description: The state of the circuit breaker feature. + returned: always + type: bool + rollback: + description: The state of the rollback feature of the circuit breaker. + returned: always + type: bool events: description: list of service events returned: always @@ -485,7 +521,8 @@ DEPLOYMENT_CONFIGURATION_TYPE_MAP = { 'maximum_percent': 'int', - 'minimum_healthy_percent': 'int' + 'minimum_healthy_percent': 'int', + 'deployment_circuit_breaker': 'dict', } from ansible_collections.amazon.aws.plugins.module_utils.core import AnsibleAWSModule diff --git a/tests/integration/targets/ecs_cluster/defaults/main.yml b/tests/integration/targets/ecs_cluster/defaults/main.yml index b909b2977af..368ab927187 100644 --- a/tests/integration/targets/ecs_cluster/defaults/main.yml +++ b/tests/integration/targets/ecs_cluster/defaults/main.yml @@ -24,6 +24,9 @@ ecs_task_containers: ecs_service_deployment_configuration: minimum_healthy_percent: 0 maximum_percent: 100 + deployment_circuit_breaker: + enable: true + rollback: true ecs_service_placement_strategy: - type: binpack field: memory diff --git a/tests/integration/targets/ecs_cluster/tasks/main.yml b/tests/integration/targets/ecs_cluster/tasks/main.yml index 7f49374b532..a1b4771eb56 100644 --- a/tests/integration/targets/ecs_cluster/tasks/main.yml +++ b/tests/integration/targets/ecs_cluster/tasks/main.yml @@ -225,16 +225,21 @@ role: "ecsServiceRole" register: ecs_service - - name: check that placement constraint has been applied + - name: check that ECS service creation changed assert: that: - ecs_service.changed - - "ecs_service.service.placementConstraints[0].type == 'distinctInstance'" - - name: check that ECS service creation changed + - name: check that placement constraint has been applied assert: that: - - ecs_service.changed + - "ecs_service.service.placementConstraints[0].type == 'distinctInstance'" + + - name: check that ECS service was created with deployment_circuit_breaker + assert: + that: + - ecs_service.service.deploymentConfiguration.deploymentCircuitBreaker.enable + - ecs_service.service.deploymentConfiguration.deploymentCircuitBreaker.rollback - name: create same ECS service definition (should not change) ecs_service: