Skip to content

Commit 8f2d450

Browse files
authored
Fix lambda wait issue and add more integration tests (#15)
* Add missing waits after changing Lambda state * Add integration test for lambda module * Add integration test for lambda_alias module
1 parent b533ed7 commit 8f2d450

File tree

11 files changed

+244
-1
lines changed

11 files changed

+244
-1
lines changed

plugins/modules/lambda.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,9 @@ def create_function(self):
321321
del args['Environment']
322322

323323
api = self.al.create_function(**args)
324+
325+
self.wait_on_create()
326+
324327
result = self.make_result(api)
325328
else:
326329
result = self.make_result(args)
@@ -402,6 +405,13 @@ def update_function_configuration(self, args, changed):
402405

403406
return args
404407

408+
def wait_on_create(self):
409+
status = 'Pending'
410+
411+
while status == 'Pending':
412+
time.sleep(1)
413+
status = self.get_function(None)['State']
414+
405415
def wait_on_function(self):
406416
status = 'InProgress'
407417

@@ -415,7 +425,11 @@ def update_function_code(self, changed):
415425
args['Publish'] = self.params['publish']
416426

417427
if changed and not self.check_mode:
418-
return self.al.update_function_code(**args)
428+
result = self.al.update_function_code(**args)
429+
430+
self.wait_on_function()
431+
432+
return result
419433

420434
return args
421435

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
cloud/aws
2+
gather_facts/no
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
function_name: "{{ resource_prefix }}-event"
2+
function_arn: "arn:aws:lambda:{{ aws_region }}:{{ aws_account_id }}:function:{{ function_name }}:test"
3+
iam_role_name: "{{ ('' if resource_prefix.startswith('ansible-test-') else 'ansible-test-') + resource_prefix }}"
4+
iam_role_arn: "arn:aws:iam::{{ aws_account_id }}:role/{{ iam_role_name }}"
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
- block:
2+
- import_tasks: setup.yml
3+
- import_tasks: tests.yml
4+
module_defaults:
5+
group/mattclay.aws.common:
6+
access_key: "{{ aws_access_key }}"
7+
secret_key: "{{ aws_secret_key }}"
8+
aws_region: "{{ aws_region }}"
9+
security_token: "{{ security_token }}"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
- name: Create a role
2+
community.aws.iam_role:
3+
name: "{{ iam_role_name }}"
4+
assume_role_policy_document:
5+
Version: '2012-10-17'
6+
Statement:
7+
- Action: sts:AssumeRole
8+
Effect: Allow
9+
Principal:
10+
Service: lambda.amazonaws.com
11+
managed_policies:
12+
- arn:aws:iam::aws:policy/service-role/AWSLambdaSQSQueueExecutionRole
13+
14+
- name: Wait for role to be usable
15+
pause:
16+
seconds: 10
17+
18+
- name: Gather account facts
19+
aws_account_facts:
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
- name: Create a Lambda function (check)
2+
lambda:
3+
name: "{{ function_name }}"
4+
code: "# no actual code"
5+
runtime: python3.8
6+
timeout: 60
7+
handler: lambda_function.lambda_handler
8+
memory_size: 128
9+
role: "{{ iam_role_arn }}"
10+
publish: yes
11+
qualifier: "test"
12+
check_mode: yes
13+
register: create_check
14+
15+
- name: Create a Lambda function (changed)
16+
lambda:
17+
name: "{{ function_name }}"
18+
code: "# no actual code"
19+
runtime: python3.8
20+
timeout: 60
21+
handler: lambda_function.lambda_handler
22+
memory_size: 128
23+
role: "{{ iam_role_arn }}"
24+
publish: yes
25+
qualifier: "test"
26+
register: create_changed
27+
28+
- name: Create a Lambda function (unchanged)
29+
lambda:
30+
name: "{{ function_name }}"
31+
code: "# no actual code"
32+
runtime: python3.8
33+
timeout: 60
34+
handler: lambda_function.lambda_handler
35+
memory_size: 128
36+
role: "{{ iam_role_arn }}"
37+
publish: no # publishing would force an update and thus report changed
38+
qualifier: "test"
39+
register: create_unchanged
40+
41+
- name: Update a Lambda function (check)
42+
lambda:
43+
name: "{{ function_name }}"
44+
code: "# updated code"
45+
runtime: python3.8
46+
timeout: 60
47+
handler: lambda_function.lambda_handler
48+
memory_size: 128
49+
role: "{{ iam_role_arn }}"
50+
publish: yes
51+
qualifier: "test"
52+
check_mode: yes
53+
register: update_check
54+
55+
- name: Update a Lambda function (changed)
56+
lambda:
57+
name: "{{ function_name }}"
58+
code: "# updated code"
59+
runtime: python3.8
60+
timeout: 60
61+
handler: lambda_function.lambda_handler
62+
memory_size: 128
63+
role: "{{ iam_role_arn }}"
64+
publish: yes
65+
qualifier: "test"
66+
register: update_changed
67+
68+
- name: Update a Lambda function (unchanged)
69+
lambda:
70+
name: "{{ function_name }}"
71+
code: "# updated code"
72+
runtime: python3.8
73+
timeout: 60
74+
handler: lambda_function.lambda_handler
75+
memory_size: 128
76+
role: "{{ iam_role_arn }}"
77+
publish: no # publishing would force an update and thus report changed
78+
qualifier: "test"
79+
register: update_unchanged
80+
81+
- name: Check results
82+
assert:
83+
that:
84+
- create_check is changed
85+
- create_changed is changed
86+
- create_unchanged is not changed
87+
- update_check is changed
88+
- update_changed is changed
89+
- update_unchanged is not changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
cloud/aws
2+
gather_facts/no
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
function_name: "{{ resource_prefix }}-event"
2+
function_arn: "arn:aws:lambda:{{ aws_region }}:{{ aws_account_id }}:function:{{ function_name }}:test"
3+
iam_role_name: "{{ ('' if resource_prefix.startswith('ansible-test-') else 'ansible-test-') + resource_prefix }}"
4+
iam_role_arn: "arn:aws:iam::{{ aws_account_id }}:role/{{ iam_role_name }}"
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
- block:
2+
- import_tasks: setup.yml
3+
- import_tasks: tests.yml
4+
module_defaults:
5+
group/mattclay.aws.common:
6+
access_key: "{{ aws_access_key }}"
7+
secret_key: "{{ aws_secret_key }}"
8+
aws_region: "{{ aws_region }}"
9+
security_token: "{{ security_token }}"
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
- name: Create a role
2+
community.aws.iam_role:
3+
name: "{{ iam_role_name }}"
4+
assume_role_policy_document:
5+
Version: '2012-10-17'
6+
Statement:
7+
- Action: sts:AssumeRole
8+
Effect: Allow
9+
Principal:
10+
Service: lambda.amazonaws.com
11+
managed_policies:
12+
- arn:aws:iam::aws:policy/service-role/AWSLambdaSQSQueueExecutionRole
13+
14+
- name: Wait for role to be usable
15+
pause:
16+
seconds: 10
17+
18+
- name: Gather account facts
19+
aws_account_facts:
20+
21+
- name: Create a Lambda function
22+
lambda:
23+
name: "{{ function_name }}"
24+
code: "# no actual code"
25+
runtime: python3.8
26+
timeout: 60
27+
handler: lambda_function.lambda_handler
28+
memory_size: 128
29+
role: "{{ iam_role_arn }}"
30+
publish: yes
31+
qualifier: "test"
32+
register: lambda_function
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
- name: Create the Lambda function alias (check)
2+
lambda_alias:
3+
name: "test"
4+
description: "test alias"
5+
function_name: "{{ lambda_function.meta.function_name }}"
6+
version: "{{ lambda_function.meta.version }}"
7+
check_mode: yes
8+
register: create_check
9+
10+
- name: Create the Lambda function alias (changed)
11+
lambda_alias:
12+
name: "test"
13+
description: "test alias"
14+
function_name: "{{ lambda_function.meta.function_name }}"
15+
version: "{{ lambda_function.meta.version }}"
16+
register: create_changed
17+
18+
- name: Create the Lambda function alias (unchanged)
19+
lambda_alias:
20+
name: "test"
21+
description: "test alias"
22+
function_name: "{{ lambda_function.meta.function_name }}"
23+
version: "{{ lambda_function.meta.version }}"
24+
register: create_unchanged
25+
26+
- name: Update the Lambda function alias (check)
27+
lambda_alias:
28+
name: "test"
29+
description: "updated alias"
30+
function_name: "{{ lambda_function.meta.function_name }}"
31+
version: "{{ lambda_function.meta.version }}"
32+
check_mode: yes
33+
register: update_check
34+
35+
- name: Update the Lambda function alias (changed)
36+
lambda_alias:
37+
name: "test"
38+
description: "updated alias"
39+
function_name: "{{ lambda_function.meta.function_name }}"
40+
version: "{{ lambda_function.meta.version }}"
41+
register: update_changed
42+
43+
- name: Update the Lambda function alias (unchanged)
44+
lambda_alias:
45+
name: "test"
46+
description: "updated alias"
47+
function_name: "{{ lambda_function.meta.function_name }}"
48+
version: "{{ lambda_function.meta.version }}"
49+
register: update_unchanged
50+
51+
- name: Check results
52+
assert:
53+
that:
54+
- create_check is changed
55+
- create_changed is changed
56+
- create_unchanged is not changed
57+
- update_check is changed
58+
- update_changed is changed
59+
- update_unchanged is not changed

0 commit comments

Comments
 (0)