Skip to content

Commit

Permalink
lambda - fix check mode on creation (ansible-collections#1108)
Browse files Browse the repository at this point in the history
lambda - fix check mode on creation

Depends-On: ansible-collections#1116
SUMMARY


When adding integration tests for check mode runs, creating a lambda function failed on check mode with the message "Unable to get function information after creating".


Added parameter kms_key_arn - testing in integration tests appears difficult as I think we'd need to create an IAM policy to allow for adding kms_key, which would render these tests as unsupported.


Added extra waiter for function_update in execute_lambda to resolve occasional integration test failure.


Fixes ansible-collections#1111
ISSUE TYPE

Feature Pull Request
Bugfix Pull Request

COMPONENT NAME
lambda

Reviewed-by: Alina Buzachis <None>
Reviewed-by: Markus Bergholz <[email protected]>
  • Loading branch information
jatorcasso authored May 6, 2022
1 parent e6a1006 commit ecb8923
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 5 deletions.
6 changes: 4 additions & 2 deletions execute_lambda.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,8 +260,10 @@ def main():

def wait_for_lambda(client, module, name):
try:
waiter = client.get_waiter('function_active')
waiter.wait(FunctionName=name)
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 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:
Expand Down
21 changes: 18 additions & 3 deletions lambda.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@
description:
- Tag dict to apply to the function.
type: dict
kms_key_arn:
description:
- The KMS key ARN used to encrypt the function's environment variables.
type: str
version_added: 3.3.0
author:
- 'Steyn Huizinga (@steynovich)'
extends_documentation_fragment:
Expand Down Expand Up @@ -451,6 +456,7 @@ def main():
vpc_security_group_ids=dict(type='list', elements='str'),
environment_variables=dict(type='dict'),
dead_letter_arn=dict(),
kms_key_arn=dict(type='str', no_log=False),
tracing_mode=dict(choices=['Active', 'PassThrough']),
tags=dict(type='dict'),
)
Expand Down Expand Up @@ -488,6 +494,7 @@ def main():
dead_letter_arn = module.params.get('dead_letter_arn')
tracing_mode = module.params.get('tracing_mode')
tags = module.params.get('tags')
kms_key_arn = module.params.get('kms_key_arn')

check_mode = module.check_mode
changed = False
Expand Down Expand Up @@ -543,6 +550,8 @@ def main():
func_kwargs.update({'DeadLetterConfig': {'TargetArn': dead_letter_arn}})
if tracing_mode and (current_config.get('TracingConfig', {}).get('Mode', 'PassThrough') != tracing_mode):
func_kwargs.update({'TracingConfig': {'Mode': tracing_mode}})
if kms_key_arn:
func_kwargs.update({'KMSKeyArn': kms_key_arn})

# If VPC configuration is desired
if vpc_subnet_ids:
Expand Down Expand Up @@ -674,17 +683,23 @@ def main():
if tracing_mode:
func_kwargs.update({'TracingConfig': {'Mode': tracing_mode}})

if kms_key_arn:
func_kwargs.update({'KMSKeyArn': kms_key_arn})

# If VPC configuration is given
if vpc_subnet_ids:
func_kwargs.update({'VpcConfig': {'SubnetIds': vpc_subnet_ids,
'SecurityGroupIds': vpc_security_group_ids}})

# Function would have been created if not check mode
if check_mode:
module.exit_json(changed=True)

# Finally try to create function
current_version = None
try:
if not check_mode:
response = client.create_function(aws_retry=True, **func_kwargs)
current_version = response['Version']
response = client.create_function(aws_retry=True, **func_kwargs)
current_version = response['Version']
changed = True
except (BotoCoreError, ClientError) as e:
module.fail_json_aws(e, msg="Trying to create function")
Expand Down

0 comments on commit ecb8923

Please sign in to comment.