Skip to content

Commit

Permalink
Merge pull request #22 from kishaningithub/add-prefix-list-to-securit…
Browse files Browse the repository at this point in the history
…y-group-rule

Handle prefix lists in security group rule and improve performance
  • Loading branch information
kishaningithub committed May 8, 2024
2 parents 2f2eabf + 4cec2fc commit e11ca88
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 17 deletions.
21 changes: 16 additions & 5 deletions pkg/convertor.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,16 +74,27 @@ func computeResourceIDForAWSSecurityGroupRole(resource parser.TerraformResource)
if isCidrBlocksValid {
isCidrBlocksValid = len(cidrBlocks) > 0
}
prefixListIds, isPrefixListIdsValid := resource.AttributeValues["prefix_list_ids"].([]any)
if isPrefixListIdsValid {
isPrefixListIdsValid = len(prefixListIds) > 0
}
resourceID := fmt.Sprintf("%s_%s_%s_%s_%s", securityGroupId, securityGroupType, protocol, fromPort, toPort)
if isSourceSecurityGroupIdValid {
return fmt.Sprintf("%s_%s", resourceID, sourceSecurityGroupId)
}
if isCidrBlocksValid {
var cidrStringBlocks []string
for _, cidrBlock := range cidrBlocks {
cidrStringBlocks = append(cidrStringBlocks, fmt.Sprint(cidrBlock))
}
return fmt.Sprintf("%s_%s", resourceID, strings.Join(cidrStringBlocks, "_"))
return fmt.Sprintf("%s_%s", resourceID, strings.Join(convertToStrings(cidrBlocks), "_"))
}
if isPrefixListIdsValid {
return fmt.Sprintf("%s_%s", resourceID, strings.Join(convertToStrings(prefixListIds), "_"))
}
return resourceID
}

func convertToStrings(source []any) []string {
var result []string
for _, element := range source {
result = append(result, fmt.Sprint(element))
}
return result
}
20 changes: 20 additions & 0 deletions pkg/convertor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,26 @@ func Test_ComputeTerraformImportForResource(t *testing.T) {
SupportsImport: true,
},
},
{
name: "For aws_security_group_rule with prefix_list_ids",
terraformResource: parser.TerraformResource{
Address: "aws_security_group_rule.test",
Type: "aws_security_group_rule",
AttributeValues: map[string]any{
"security_group_id": "security-group-id",
"type": "type",
"protocol": "protocol",
"from_port": 1234,
"to_port": 5678,
"prefix_list_ids": []any{"prefix-list-1", "prefix-list-2"},
},
},
expected: TerraformImport{
ResourceAddress: "aws_security_group_rule.test",
ResourceID: "security-group-id_type_protocol_1234_5678_prefix-list-1_prefix-list-2",
SupportsImport: true,
},
},
{
name: "For aws_api_gateway_resource",
terraformResource: parser.TerraformResource{
Expand Down
14 changes: 2 additions & 12 deletions pkg/internal/parser/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,14 @@ func (resources TerraformResources) FilterByAddresses(addresses []string) Terraf
for _, resource := range resources {
for _, address := range addresses {
if strings.HasPrefix(resource.Address, address) {
if !filteredResources.contains(resource) {
filteredResources = append(filteredResources, resource)
}
filteredResources = append(filteredResources, resource)
break
}
}
}
return filteredResources
}

func (resources TerraformResources) contains(r TerraformResource) bool {
for _, resource := range resources {
if resource.Address == r.Address {
return true
}
}
return false
}

type TerraformStateParser interface {
Parse() (TerraformResources, error)
}

0 comments on commit e11ca88

Please sign in to comment.