From cb7bc0be6c3bd7d8b69bd2c6e4f8ba4c68b008c9 Mon Sep 17 00:00:00 2001 From: Mark Chappell Date: Thu, 14 Jul 2022 19:07:21 +0200 Subject: [PATCH] ec2_instance - expand use of AWSRetry --- changelogs/fragments/927-ec2_instance-retries.yml | 2 ++ plugins/modules/ec2_instance.py | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 changelogs/fragments/927-ec2_instance-retries.yml diff --git a/changelogs/fragments/927-ec2_instance-retries.yml b/changelogs/fragments/927-ec2_instance-retries.yml new file mode 100644 index 00000000000..36b1c67bf93 --- /dev/null +++ b/changelogs/fragments/927-ec2_instance-retries.yml @@ -0,0 +1,2 @@ +minor_changes: +- ec2_instance - expanded the use of the automatic retries on temporary failures (https://github.com/ansible-collections/amazon.aws/issues/927). diff --git a/plugins/modules/ec2_instance.py b/plugins/modules/ec2_instance.py index b9791ff9759..9d3efc7d177 100644 --- a/plugins/modules/ec2_instance.py +++ b/plugins/modules/ec2_instance.py @@ -1858,9 +1858,11 @@ def enforce_count(existing_matches, module, desired_module_state): module.exit_json(changed=True, msg='Would have terminated following instances if not in check mode {0}'.format(terminate_ids)) # terminate instances try: - result = client.terminate_instances(InstanceIds=terminate_ids) + result = client.terminate_instances(aws_retry=True, InstanceIds=terminate_ids) await_instances(terminate_ids, desired_module_state='terminated', force_wait=True) - except botocore.exceptions.ClientError as e: + except is_boto3_error_code('InvalidInstanceID.NotFound'): + pass + except botocore.exceptions.ClientError as e: # pylint: disable=duplicate-except module.fail_json(e, msg='Unable to terminate instances') module.exit_json( changed=True, @@ -1936,12 +1938,12 @@ def ensure_present(existing_matches, desired_module_state): def run_instances(**instance_spec): try: - return client.run_instances(**instance_spec) + return client.run_instances(aws_retry=True, **instance_spec) except is_boto3_error_message('Invalid IAM Instance Profile ARN'): # If the instance profile has just been created, it takes some time to be visible by ec2 # So we wait 10 second and retry the run_instances time.sleep(10) - return client.run_instances(**instance_spec) + return client.run_instances(aws_retry=True, **instance_spec) def build_filters():