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>

This commit was initially merged in https://github.com/ansible-collections/community.aws
See: ansible-collections@ab4bda2
  • Loading branch information
anjo-swe authored and goneri committed Sep 21, 2022
1 parent b9c2cbc commit d895f0f
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion plugins/modules/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 d895f0f

Please sign in to comment.