driftctl/pkg/resource/aws/aws_route.go

78 lines
2.7 KiB
Go

package aws
import (
"fmt"
"github.com/cloudskiff/driftctl/pkg/resource"
"github.com/hashicorp/terraform/helper/hashcode"
)
const AwsRouteResourceType = "aws_route"
func initAwsRouteMetaData(resourceSchemaRepository resource.SchemaRepositoryInterface) {
resourceSchemaRepository.SetResolveReadAttributesFunc(AwsRouteResourceType, func(res *resource.Resource) map[string]string {
attributes := map[string]string{
"route_table_id": *res.Attributes().GetString("route_table_id"),
}
if ipv4 := res.Attributes().GetString("destination_cidr_block"); ipv4 != nil && *ipv4 != "" {
attributes["destination_cidr_block"] = *ipv4
}
if ipv6 := res.Attributes().GetString("destination_ipv6_cidr_block"); ipv6 != nil && *ipv6 != "" {
attributes["destination_ipv6_cidr_block"] = *ipv6
}
return attributes
})
resourceSchemaRepository.SetNormalizeFunc(AwsRouteResourceType, func(res *resource.Resource) {
val := res.Attrs
val.SafeDelete([]string{"timeouts"})
val.DeleteIfDefault("vpc_endpoint_id")
val.DeleteIfDefault("local_gateway_id")
val.DeleteIfDefault("destination_cidr_block")
val.DeleteIfDefault("destination_ipv6_cidr_block")
val.DeleteIfDefault("egress_only_gateway_id")
val.DeleteIfDefault("nat_gateway_id")
val.DeleteIfDefault("instance_id")
val.DeleteIfDefault("network_interface_id")
val.DeleteIfDefault("transit_gateway_id")
val.DeleteIfDefault("vpc_peering_connection_id")
val.DeleteIfDefault("destination_prefix_list_id")
val.DeleteIfDefault("instance_owner_id")
val.DeleteIfDefault("carrier_gateway_id")
})
resourceSchemaRepository.SetHumanReadableAttributesFunc(AwsRouteResourceType, func(res *resource.Resource) map[string]string {
val := res.Attrs
attrs := make(map[string]string)
if rtID := val.GetString("route_table_id"); rtID != nil && *rtID != "" {
attrs["Table"] = *rtID
}
if ipv4 := val.GetString("destination_cidr_block"); ipv4 != nil && *ipv4 != "" {
attrs["Destination"] = *ipv4
}
if ipv6 := val.GetString("destination_ipv6_cidr_block"); ipv6 != nil && *ipv6 != "" {
attrs["Destination"] = *ipv6
}
if prefix := val.GetString("destination_prefix_list_id"); prefix != nil && *prefix != "" {
attrs["Destination"] = *prefix
}
return attrs
})
resourceSchemaRepository.SetFlags(AwsRouteResourceType, resource.FlagDeepMode)
}
func CalculateRouteID(tableId, CidrBlock, Ipv6CidrBlock, PrefixListId *string) string {
if CidrBlock != nil && *CidrBlock != "" {
return fmt.Sprintf("r-%s%d", *tableId, hashcode.String(*CidrBlock))
}
if Ipv6CidrBlock != nil && *Ipv6CidrBlock != "" {
return fmt.Sprintf("r-%s%d", *tableId, hashcode.String(*Ipv6CidrBlock))
}
if PrefixListId != nil && *PrefixListId != "" {
return fmt.Sprintf("r-%s%d", *tableId, hashcode.String(*PrefixListId))
}
return ""
}