Skip to content

Commit b1a7079

Browse files
committed
Improved resource mounting a bit where some terraform providers were producing inconsistent plan outputs. #260
1 parent d9a5323 commit b1a7079

File tree

4 files changed

+230
-0
lines changed

4 files changed

+230
-0
lines changed

terraform_compliance/extensions/terraform.py

+3
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,9 @@ def _mount_resources(self, source, target, ref_type):
236236
self.resources[target_resource][Defaults.r_mount_addr_ptr][parameter] = source
237237
self.resources[target_resource][Defaults.r_mount_addr_ptr_list].extend(source)
238238

239+
if parameter not in self.resources[source_resource]['values']:
240+
self.resources[source_resource]['values'][parameter] = resource
241+
239242
def _find_resource_from_name(self, resource_name):
240243
'''
241244
Finds all the resources that is starting with resource_name
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
{
2+
"format_version": "0.1",
3+
"terraform_version": "0.12.24",
4+
"planned_values": {
5+
"root_module": {
6+
"resources": [{
7+
"address": "aws_kms_key.test",
8+
"mode": "managed",
9+
"type": "aws_kms_key",
10+
"name": "test",
11+
"provider_name": "aws",
12+
"schema_version": 0,
13+
"values": {
14+
"customer_master_key_spec": "SYMMETRIC_DEFAULT",
15+
"deletion_window_in_days": null,
16+
"description": "test",
17+
"enable_key_rotation": true,
18+
"is_enabled": true,
19+
"key_usage": "ENCRYPT_DECRYPT",
20+
"tags": null
21+
}
22+
},
23+
{
24+
"address": "aws_sqs_queue.failure",
25+
"mode": "managed",
26+
"type": "aws_sqs_queue",
27+
"name": "failure",
28+
"provider_name": "aws",
29+
"schema_version": 0,
30+
"values": {
31+
"content_based_deduplication": false,
32+
"delay_seconds": 0,
33+
"fifo_queue": false,
34+
"max_message_size": 262144,
35+
"message_retention_seconds": 345600,
36+
"name_prefix": null,
37+
"receive_wait_time_seconds": 0,
38+
"redrive_policy": null,
39+
"tags": null,
40+
"visibility_timeout_seconds": 30
41+
}
42+
},
43+
{
44+
"address": "aws_sqs_queue.success",
45+
"mode": "managed",
46+
"type": "aws_sqs_queue",
47+
"name": "success",
48+
"provider_name": "aws",
49+
"schema_version": 0,
50+
"values": {
51+
"content_based_deduplication": false,
52+
"delay_seconds": 0,
53+
"fifo_queue": false,
54+
"kms_master_key_id": "key",
55+
"max_message_size": 262144,
56+
"message_retention_seconds": 345600,
57+
"name_prefix": null,
58+
"receive_wait_time_seconds": 0,
59+
"redrive_policy": null,
60+
"tags": null,
61+
"visibility_timeout_seconds": 30
62+
}
63+
}
64+
]
65+
}
66+
},
67+
"resource_changes": [{
68+
"address": "aws_kms_key.test",
69+
"mode": "managed",
70+
"type": "aws_kms_key",
71+
"name": "test",
72+
"provider_name": "aws",
73+
"change": {
74+
"actions": [
75+
"create"
76+
],
77+
"before": null,
78+
"after": {
79+
"customer_master_key_spec": "SYMMETRIC_DEFAULT",
80+
"deletion_window_in_days": null,
81+
"description": "test",
82+
"enable_key_rotation": true,
83+
"is_enabled": true,
84+
"key_usage": "ENCRYPT_DECRYPT",
85+
"tags": null
86+
},
87+
"after_unknown": {
88+
"arn": true,
89+
"id": true,
90+
"key_id": true,
91+
"policy": true
92+
}
93+
}
94+
},
95+
{
96+
"address": "aws_sqs_queue.failure",
97+
"mode": "managed",
98+
"type": "aws_sqs_queue",
99+
"name": "failure",
100+
"provider_name": "aws",
101+
"change": {
102+
"actions": [
103+
"create"
104+
],
105+
"before": null,
106+
"after": {
107+
"content_based_deduplication": false,
108+
"delay_seconds": 0,
109+
"fifo_queue": false,
110+
"max_message_size": 262144,
111+
"message_retention_seconds": 345600,
112+
"name_prefix": null,
113+
"receive_wait_time_seconds": 0,
114+
"redrive_policy": null,
115+
"tags": null,
116+
"visibility_timeout_seconds": 30
117+
},
118+
"after_unknown": {
119+
"arn": true,
120+
"id": true,
121+
"kms_data_key_reuse_period_seconds": true,
122+
"kms_master_key_id": true,
123+
"name": true,
124+
"policy": true
125+
}
126+
}
127+
},
128+
{
129+
"address": "aws_sqs_queue.success",
130+
"mode": "managed",
131+
"type": "aws_sqs_queue",
132+
"name": "success",
133+
"provider_name": "aws",
134+
"change": {
135+
"actions": [
136+
"create"
137+
],
138+
"before": null,
139+
"after": {
140+
"content_based_deduplication": false,
141+
"delay_seconds": 0,
142+
"fifo_queue": false,
143+
"kms_master_key_id": "key",
144+
"max_message_size": 262144,
145+
"message_retention_seconds": 345600,
146+
"name_prefix": null,
147+
"receive_wait_time_seconds": 0,
148+
"redrive_policy": null,
149+
"tags": null,
150+
"visibility_timeout_seconds": 30
151+
},
152+
"after_unknown": {
153+
"arn": true,
154+
"id": true,
155+
"kms_data_key_reuse_period_seconds": true,
156+
"name": true,
157+
"policy": true
158+
}
159+
}
160+
}
161+
],
162+
"configuration": {
163+
"root_module": {
164+
"resources": [{
165+
"address": "aws_kms_key.test",
166+
"mode": "managed",
167+
"type": "aws_kms_key",
168+
"name": "test",
169+
"provider_config_key": "aws",
170+
"expressions": {
171+
"description": {
172+
"constant_value": "test"
173+
},
174+
"enable_key_rotation": {
175+
"constant_value": true
176+
}
177+
},
178+
"schema_version": 0
179+
},
180+
{
181+
"address": "aws_sqs_queue.failure",
182+
"mode": "managed",
183+
"type": "aws_sqs_queue",
184+
"name": "failure",
185+
"provider_config_key": "aws",
186+
"expressions": {
187+
"kms_master_key_id": {
188+
"references": [
189+
"aws_kms_key.test"
190+
]
191+
}
192+
},
193+
"schema_version": 0
194+
},
195+
{
196+
"address": "aws_sqs_queue.success",
197+
"mode": "managed",
198+
"type": "aws_sqs_queue",
199+
"name": "success",
200+
"provider_config_key": "aws",
201+
"expressions": {
202+
"kms_master_key_id": {
203+
"constant_value": "key"
204+
}
205+
},
206+
"schema_version": 0
207+
}
208+
]
209+
}
210+
}
211+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Feature: test
2+
3+
Scenario: This is for constant values
4+
Given I have aws_sqs_queue resource configured
5+
Then it must contain kms_master_key_id
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
resource "aws_sqs_queue" "success" {
2+
kms_master_key_id = "key"
3+
}
4+
5+
resource "aws_sqs_queue" "failure" {
6+
kms_master_key_id = aws_kms_key.test.id
7+
}
8+
resource "aws_kms_key" "test" {
9+
description = "test"
10+
enable_key_rotation = true
11+
}

0 commit comments

Comments
 (0)