From a510cbbcd45185878c8be656407b8a71da9fb22b Mon Sep 17 00:00:00 2001 From: Justin McCormick Date: Sat, 4 Jun 2022 15:24:25 -0500 Subject: [PATCH] ecs_service - document circuit breaker feature (#1215) ecs_service - document circuit breaker feature SUMMARY Fixes #921 This feature works with the existing code, so this was mainly adding documentation, examples, and an integration test. ISSUE TYPE Feature Pull Request COMPONENT NAME ecs_service ADDITIONAL INFORMATION The deployment circuit breaker is part of the deployment configuration dictionary, which is already snake<=>camel cased. Thus the existing code was handling 99% of the feature, we just added some type validation, documentation, examples, and an integration test. - community.aws.ecs_service: state: present name: test-service cluster: test-cluster task_definition: test-task-definition desired_count: 3 deployment_configuration: deployment_circuit_breaker: enable: True rollback: True Reviewed-by: Mark Chappell --- ...ice-deployment-circuit-breaker-support.yml | 2 + plugins/modules/ecs_service.py | 51 ++++++++++++++++++- .../targets/ecs_cluster/defaults/main.yml | 3 ++ .../targets/ecs_cluster/tasks/main.yml | 7 +++ 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/1215-ecs-service-deployment-circuit-breaker-support.yml 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 f7bd5779e18..b2f681af2ba 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. @@ -272,6 +282,18 @@ - type: binpack field: memory +# With deployment circuit breaker (added in version 4.0) +- community.aws.ecs_service: + state: present + name: test-service + cluster: test-cluster + task_definition: test-task-definition + desired_count: 3 + deployment_configuration: + deployment_circuit_breaker: + enable: True + rollback: True + # With capacity_provider_strategy (added in version 4.0) - community.aws.ecs_service: state: present @@ -378,6 +400,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 @@ -494,6 +529,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 @@ -535,7 +583,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..2d016d142dc 100644 --- a/tests/integration/targets/ecs_cluster/tasks/main.yml +++ b/tests/integration/targets/ecs_cluster/tasks/main.yml @@ -236,6 +236,13 @@ that: - ecs_service.changed + - name: check that ECS service was created with deployment_circuit_breaker + assert: + that: + - ecs_service.service.deploymentCircuitBreaker + - ecs_service.service.deploymentCircuitBreaker.enable + - ecs_service.service.deploymentCircuitBreaker.rollback + - name: create same ECS service definition (should not change) ecs_service: state: present