Skip to content

Commit 0bfb8d4

Browse files
authored
CM-3937 - Extend tfplan scan result with module path (#246)
1 parent 053f82a commit 0bfb8d4

File tree

4 files changed

+19
-7
lines changed

4 files changed

+19
-7
lines changed

cycode/cli/files_collector/iac/tf_content_generator.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import json
22
import time
3-
import uuid
43
from typing import List
54

65
from cycode.cli import consts
@@ -44,14 +43,25 @@ def _generate_tf_content(resource_changes: List[ResourceChange]) -> str:
4443

4544

4645
def _generate_resource_content(resource_change: ResourceChange) -> str:
47-
resource_content = f'resource "{resource_change.resource_type}" "{resource_change.name}-{uuid.uuid4()}" {{\n'
46+
resource_content = f'resource "{resource_change.resource_type}" "{_get_resource_name(resource_change)}" {{\n'
4847
if resource_change.values is not None:
4948
for key, value in resource_change.values.items():
5049
resource_content += f' {key} = {json.dumps(value)}\n'
5150
resource_content += '}\n\n'
5251
return resource_content
5352

5453

54+
def _get_resource_name(resource_change: ResourceChange) -> str:
55+
parts = [resource_change.module_address, resource_change.name]
56+
57+
if resource_change.index is not None:
58+
parts.append(str(resource_change.index))
59+
60+
valid_parts = [part for part in parts if part]
61+
62+
return '-'.join(valid_parts).replace('.', '-')
63+
64+
5565
def _extract_resources(tfplan: str, filename: str) -> List[ResourceChange]:
5666
tfplan_json = load_json(tfplan)
5767
resources: List[ResourceChange] = []
@@ -60,8 +70,10 @@ def _extract_resources(tfplan: str, filename: str) -> List[ResourceChange]:
6070
for resource_change in resource_changes:
6171
resources.append(
6272
ResourceChange(
73+
module_address=resource_change.get('module_address'),
6374
resource_type=resource_change['type'],
6475
name=resource_change['name'],
76+
index=resource_change.get('index'),
6577
actions=resource_change['change']['actions'],
6678
values=resource_change['change']['after'],
6779
)

cycode/cli/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,10 @@ class LocalScanResult(NamedTuple):
7676

7777
@dataclass
7878
class ResourceChange:
79+
module_address: Optional[str]
7980
resource_type: str
8081
name: str
82+
index: Optional[int]
8183
actions: List[str]
8284
values: Dict[str, str]
8385

tests/cli/files_collector/iac/test_tf_content_generator.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import os
2-
import re
32

43
from cycode.cli.files_collector.iac import tf_content_generator
54
from cycode.cli.utils.path_utils import get_file_content, get_immediate_subdirectories
@@ -15,5 +14,4 @@ def test_generate_tf_content_from_tfplan() -> None:
1514
tf_expected_content = get_file_content(os.path.join(_PATH_TO_EXAMPLES, example, 'tf_content.txt'))
1615
tf_content = tf_content_generator.generate_tf_content_from_tfplan(example, tfplan_content)
1716

18-
cleaned_tf_content = re.sub(r'-[a-fA-F0-9\-]{36}', '', tf_content)
19-
assert cleaned_tf_content == tf_expected_content
17+
assert tf_content == tf_expected_content

tests/test_files/tf_content_generator_files/tfplan-create-example/tf_content.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ resource "aws_sfn_state_machine" "terra_ci_runner" {
7979
type = "STANDARD"
8080
}
8181

82-
resource "aws_route" "private" {
82+
resource "aws_route" "private-1" {
8383
carrier_gateway_id = null
8484
destination_cidr_block = "172.25.16.0/20"
8585
destination_ipv6_cidr_block = null
@@ -95,7 +95,7 @@ resource "aws_route" "private" {
9595
vpc_peering_connection_id = null
9696
}
9797

98-
resource "aws_route" "private" {
98+
resource "aws_route" "private-rtb-00cf8381520103cfb" {
9999
carrier_gateway_id = null
100100
destination_cidr_block = "172.25.16.0/20"
101101
destination_ipv6_cidr_block = null

0 commit comments

Comments
 (0)