From 2ac040bef2009ff34af0c82cb6f7eecc8929112d Mon Sep 17 00:00:00 2001 From: clint shryock Date: Thu, 28 Jan 2016 09:54:58 -0600 Subject: [PATCH] providers/aws: Fix issue with VPC Classic Link and regions that don't support it - use eu-central-1 to a config to check for #4874 - update documentation --- builtin/providers/aws/resource_aws_vpc.go | 25 +++++++++++++------ .../providers/aws/resource_aws_vpc_test.go | 4 +++ .../docs/providers/aws/r/vpc.html.markdown | 7 +++++- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/builtin/providers/aws/resource_aws_vpc.go b/builtin/providers/aws/resource_aws_vpc.go index 007a2f8154b2..fea662dea5b2 100644 --- a/builtin/providers/aws/resource_aws_vpc.go +++ b/builtin/providers/aws/resource_aws_vpc.go @@ -179,18 +179,27 @@ func resourceAwsVpcRead(d *schema.ResourceData, meta interface{}) error { DescribeClassiclinkOpts := &ec2.DescribeVpcClassicLinkInput{ VpcIds: []*string{&vpcid}, } + + // Classic Link is only available in regions that support EC2 Classic respClassiclink, err := conn.DescribeVpcClassicLink(DescribeClassiclinkOpts) if err != nil { - return err - } - classiclink_enabled := false - for _, v := range respClassiclink.Vpcs { - if *v.VpcId == vpcid { - classiclink_enabled = *v.ClassicLinkEnabled - break + if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == "UnsupportedOperation" { + log.Printf("[WARN] VPC Classic Link is not supported in this region") + } else { + return err + } + } else { + classiclink_enabled := false + for _, v := range respClassiclink.Vpcs { + if *v.VpcId == vpcid { + if v.ClassicLinkEnabled != nil { + classiclink_enabled = *v.ClassicLinkEnabled + } + break + } } + d.Set("enable_classiclink", classiclink_enabled) } - d.Set("enable_classiclink", classiclink_enabled) // Get the main routing table for this VPC // Really Ugly need to make this better - rmenn diff --git a/builtin/providers/aws/resource_aws_vpc_test.go b/builtin/providers/aws/resource_aws_vpc_test.go index cd01bbf5d1f2..485dd1dc423d 100644 --- a/builtin/providers/aws/resource_aws_vpc_test.go +++ b/builtin/providers/aws/resource_aws_vpc_test.go @@ -264,6 +264,10 @@ resource "aws_vpc" "bar" { ` const testAccVpcConfig_BothDnsOptions = ` +provider "aws" { + region = "eu-central-1" +} + resource "aws_vpc" "bar" { cidr_block = "10.2.0.0/16" diff --git a/website/source/docs/providers/aws/r/vpc.html.markdown b/website/source/docs/providers/aws/r/vpc.html.markdown index 0e88ea309882..8cf089b5c90b 100644 --- a/website/source/docs/providers/aws/r/vpc.html.markdown +++ b/website/source/docs/providers/aws/r/vpc.html.markdown @@ -41,7 +41,9 @@ The following arguments are supported: * `instance_tenancy` - (Optional) A tenancy option for instances launched into the VPC * `enable_dns_support` - (Optional) A boolean flag to enable/disable DNS support in the VPC. Defaults true. * `enable_dns_hostnames` - (Optional) A boolean flag to enable/disable DNS hostnames in the VPC. Defaults false. -* `enable_classiclink` - (Optional) A boolean flag to enable/disable ClassicLink for the VPC. Defaults false. +* `enable_classiclink` - (Optional) A boolean flag to enable/disable ClassicLink + for the VPC. Only valid in regions and accounts that support EC2 Classic. + See the [ClassicLink documentation][1] for more information. Defaults false. * `tags` - (Optional) A mapping of tags to assign to the resource. ## Attributes Reference @@ -59,3 +61,6 @@ The following attributes are exported: [`aws_main_route_table_association`](/docs/providers/aws/r/main_route_table_assoc.html). * `default_network_acl_id` - The ID of the network ACL created by default on VPC creation * `default_security_group_id` - The ID of the security group created by default on VPC creation + + +[1]: http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/vpc-classiclink.html