Merge pull request #1502 from snyk/fix/aws_route_with_prefix_broken

fix: crash in deep mode on aws_route
main
Elie 2022-05-25 14:23:30 +02:00 committed by GitHub
commit 4c4a33326c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 95 additions and 0 deletions

View File

@ -20,6 +20,9 @@ func initAwsRouteMetaData(resourceSchemaRepository resource.SchemaRepositoryInte
if ipv6 := res.Attributes().GetString("destination_ipv6_cidr_block"); ipv6 != nil && *ipv6 != "" { if ipv6 := res.Attributes().GetString("destination_ipv6_cidr_block"); ipv6 != nil && *ipv6 != "" {
attributes["destination_ipv6_cidr_block"] = *ipv6 attributes["destination_ipv6_cidr_block"] = *ipv6
} }
if prefixes := res.Attributes().GetString("destination_prefix_list_id"); prefixes != nil && *prefixes != "" {
attributes["destination_prefix_list_id"] = *prefixes
}
return attributes return attributes
}) })
resourceSchemaRepository.SetNormalizeFunc(AwsRouteResourceType, func(res *resource.Resource) { resourceSchemaRepository.SetNormalizeFunc(AwsRouteResourceType, func(res *resource.Resource) {
@ -30,6 +33,7 @@ func initAwsRouteMetaData(resourceSchemaRepository resource.SchemaRepositoryInte
val.DeleteIfDefault("local_gateway_id") val.DeleteIfDefault("local_gateway_id")
val.DeleteIfDefault("destination_cidr_block") val.DeleteIfDefault("destination_cidr_block")
val.DeleteIfDefault("destination_ipv6_cidr_block") val.DeleteIfDefault("destination_ipv6_cidr_block")
val.DeleteIfDefault("destination_prefix_list_id")
val.DeleteIfDefault("egress_only_gateway_id") val.DeleteIfDefault("egress_only_gateway_id")
val.DeleteIfDefault("nat_gateway_id") val.DeleteIfDefault("nat_gateway_id")
val.DeleteIfDefault("instance_id") val.DeleteIfDefault("instance_id")

View File

@ -34,3 +34,31 @@ func TestAcc_Aws_Route(t *testing.T) {
}, },
}) })
} }
// Splitted that case because it required a lot of unrelated resources
func TestAcc_Aws_Route_With_PrefixListId(t *testing.T) {
acceptance.Run(t, acceptance.AccTestCase{
TerraformVersion: "0.15.5",
Paths: []string{"./testdata/acc/aws_route_with_prefix_list_id"},
Args: []string{"scan", "--deep"},
RetryDestroy: acceptance.RetryConfig{
Attempts: 3,
Delay: 5 * time.Second,
},
Checks: []acceptance.AccCheck{
{
Env: map[string]string{
"AWS_REGION": "us-east-1",
},
ShouldRetry: acceptance.LinearBackoff(10 * time.Minute),
Check: func(result *test.ScanResult, stdout string, err error) {
if err != nil {
t.Fatal(err)
}
result.AssertInfrastructureIsInSync()
result.AssertManagedCount(1)
},
},
},
})
}

View File

@ -0,0 +1,3 @@
*
!aws_route

View File

@ -0,0 +1,21 @@
# This file is maintained automatically by "terraform init".
# Manual edits may be lost in future updates.
provider "registry.terraform.io/hashicorp/aws" {
version = "3.75.1"
constraints = "3.75.1"
hashes = [
"h1:++H0a4igODgreQL3SJuRz71JZkC69rl41R8xLYM894o=",
"zh:11c2ee541ca1da923356c9225575ba294523d7b6af82d6171c912470ef0f90cd",
"zh:19fe975993664252b4a2ff1079546f2b186b01d1a025a94a4f15c37e023806c5",
"zh:442e7fc145b2debebe9279b283d07f5f736dc1776c2e5b1702728a6eb03789d0",
"zh:7a77991b204ae2c16ac29a32226135d5fdbda40c8dafa77c5adf5439a346be77",
"zh:89a257933181c15293c15a858fbfe7252129cc57cc2ec05b6c0b595d1bfe9d38",
"zh:b1813ea5b6b0fd88ea85b1b21b8e4119566d1bc34feca297b4fb39d0536893cb",
"zh:c519f3292ae431bd2381f88a95bd37c52f7a56d91feef88511e929344c180549",
"zh:d3dbe88b661c073c174f04f73adc2720372143bdfa12f4fe8f411332e64662cf",
"zh:e92a27e3c7295b031b5d62dd9428966c96e3157fc768b3d848a9ac60d1661c8e",
"zh:ecd664c0d664fcf2d8a89a01462cb00bcae37da200305aef2de1b8fe185c9cd8",
"zh:ed6ce1f9fa96aa28dd65842f852abed25f919d20b5cf53d26cec5b3f4d845725",
]
}

View File

@ -0,0 +1,39 @@
provider "aws" {
region = "us-east-1"
}
terraform {
required_providers {
aws = "3.75.1"
}
}
resource "aws_vpc" "example" {
cidr_block = "10.1.0.0/16"
}
resource "aws_ec2_managed_prefix_list" "example" {
name = "example"
address_family = "IPv4"
max_entries = 5
}
resource "aws_route_table" "example" {
vpc_id = aws_vpc.example.id
}
resource "aws_subnet" "example" {
vpc_id = aws_vpc.example.id
cidr_block = "10.1.1.0/24"
}
resource "aws_nat_gateway" "example" {
connectivity_type = "private"
subnet_id = aws_subnet.example.id
}
resource "aws_route" "r" {
route_table_id = aws_route_table.example.id
nat_gateway_id = aws_nat_gateway.example.id
destination_prefix_list_id = aws_ec2_managed_prefix_list.example.id
}