Skip to content

Commit

Permalink
Lambda - Wait before updating (ansible-collections#857)
Browse files Browse the repository at this point in the history
Lambda - Wait before updating

SUMMARY

Updated lambda module to wait for State = Active & LastUpdateStatus = Successful based on https://aws.amazon.com/blogs/compute/coming-soon-expansion-of-aws-lambda-states-to-all-functions/

Fixes ansible-collections#830
ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME

module: lambda
ADDITIONAL INFORMATION

Reviewed-by: Markus Bergholz <[email protected]>
Reviewed-by: Alina Buzachis <None>
  • Loading branch information
anjo-swe authored and abikouo committed Sep 18, 2023
1 parent 97044d4 commit 05ea1f5
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
13 changes: 13 additions & 0 deletions execute_lambda.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,9 @@ def main():
elif name:
invoke_params['FunctionName'] = name

if not module.check_mode:
wait_for_lambda(client, module, name)

try:
response = client.invoke(**invoke_params)
except is_boto3_error_code('ResourceNotFoundException') as nfe:
Expand Down Expand Up @@ -255,5 +258,15 @@ def main():
module.exit_json(changed=True, result=results)


def wait_for_lambda(client, module, name):
try:
waiter = client.get_waiter('function_active')
waiter.wait(FunctionName=name)
except botocore.exceptions.WaiterError as e:
module.fail_json_aws(e, msg='Timeout while waiting on lambda to be Active')
except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
module.fail_json_aws(e, msg='Failed while waiting on lambda to be Active')


if __name__ == '__main__':
main()
20 changes: 19 additions & 1 deletion lambda.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@
import re

try:
from botocore.exceptions import ClientError, BotoCoreError
from botocore.exceptions import ClientError, BotoCoreError, WaiterError
except ImportError:
pass # protected by AnsibleAWSModule

Expand Down Expand Up @@ -320,6 +320,18 @@ def set_tag(client, module, tags, function):
return changed


def wait_for_lambda(client, module, name):
try:
client_active_waiter = client.get_waiter('function_active')
client_updated_waiter = client.get_waiter('function_updated')
client_active_waiter.wait(FunctionName=name)
client_updated_waiter.wait(FunctionName=name)
except WaiterError as e:
module.fail_json_aws(e, msg='Timeout while waiting on lambda to finish updating')
except (ClientError, BotoCoreError) as e:
module.fail_json_aws(e, msg='Failed while waiting on lambda to finish updating')


def main():
argument_spec = dict(
name=dict(required=True),
Expand Down Expand Up @@ -453,6 +465,9 @@ def main():

# Upload new configuration if configuration has changed
if len(func_kwargs) > 1:
if not check_mode:
wait_for_lambda(client, module, name)

try:
if not check_mode:
response = client.update_function_configuration(aws_retry=True, **func_kwargs)
Expand Down Expand Up @@ -494,6 +509,9 @@ def main():

# Upload new code if needed (e.g. code checksum has changed)
if len(code_kwargs) > 2:
if not check_mode:
wait_for_lambda(client, module, name)

try:
if not check_mode:
response = client.update_function_code(aws_retry=True, **code_kwargs)
Expand Down

0 comments on commit 05ea1f5

Please sign in to comment.