Skip to content

Commit 541b3ff

Browse files
committed
Fix missing resources
1 parent e5f3a8d commit 541b3ff

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

terraform_compliance/extensions/terraform.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,6 @@ def _parse_resources(self):
7676
:return: none
7777
'''
7878

79-
#TODO: Consider about using 'resource_changes' instead of 'resources'
80-
8179
# Resources ( exists in Plan )
8280
for findings in seek_key_in_dict(self.raw.get('planned_values', {}).get('root_module', {}), 'resources'):
8381
for resource in findings.get('resources', []):
@@ -110,6 +108,18 @@ def _parse_resources(self):
110108
else:
111109
self.resources[resource['address']] = resource
112110

111+
# Resource Changes ( exists in Plan )
112+
for finding in self.raw.get('resource_changes', {}):
113+
resource = deepcopy(finding)
114+
resource['values'] = resource.get('change', {}).get('after', {})
115+
if 'change' in resource:
116+
del resource['change']
117+
118+
if resource['address'].startswith('data'):
119+
self.data[resource['address']] = resource
120+
else:
121+
self.resources[resource['address']] = resource
122+
113123
def _parse_configurations(self):
114124
'''
115125
Assigns all configuration related data defined in the terraform plan. This is mostly used for

tests/terraform_compliance/extensions/test_terraform.py

+39
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,45 @@ def test_parse_resources_child_resources_exists_in_the_state_resource(self, *arg
154154
obj._parse_resources()
155155
self.assertEqual(obj.resources['something'], {'address': 'something'})
156156

157+
@patch.object(TerraformParser, '_read_file', return_value={})
158+
def test_parse_resources_resources_exists_in_the_resource_changes_data(self, *args):
159+
obj = TerraformParser('somefile', parse_it=False)
160+
obj.raw['resource_changes'] = [
161+
{
162+
'address': 'data_something',
163+
'change': {
164+
'actions': ['update'],
165+
'before': {
166+
'key': 'foo'
167+
},
168+
'after': {
169+
'key': 'bar'
170+
}
171+
}
172+
}
173+
]
174+
obj._parse_resources()
175+
self.assertEqual(obj.data['data_something'], {'address': 'data_something', 'values': {'key': 'bar'}})
176+
177+
@patch.object(TerraformParser, '_read_file', return_value={})
178+
def test_parse_resources_resources_exists_in_the_resource_changes_resource(self, *args):
179+
obj = TerraformParser('somefile', parse_it=False)
180+
obj.raw['resource_changes'] = [
181+
{
182+
'address': 'something',
183+
'change': {
184+
'actions': ['update'],
185+
'before': {
186+
'key': 'foo'
187+
},
188+
'after': {
189+
'key': 'bar'
190+
}
191+
}
192+
}
193+
]
194+
obj._parse_resources()
195+
self.assertEqual(obj.resources['something'], {'address': 'something', 'values': {'key': 'bar'}})
157196

158197
@patch.object(TerraformParser, '_read_file', return_value={})
159198
def test_parse_configurations_resources(self, *args):

0 commit comments

Comments
 (0)