Merge pull request #3994 from Pryz/master

Add AWS Classiclink for AWS VPC resource
This commit is contained in:
Clint 2016-01-12 16:48:23 -06:00
commit 90e5f5f655
3 changed files with 77 additions and 0 deletions

View File

@ -55,6 +55,12 @@ func resourceAwsVpc() *schema.Resource {
Computed: true,
},
"enable_classiclink": &schema.Schema{
Type: schema.TypeBool,
Optional: true,
Computed: true,
},
"main_route_table_id": &schema.Schema{
Type: schema.TypeString,
Computed: true,
@ -170,6 +176,22 @@ func resourceAwsVpcRead(d *schema.ResourceData, meta interface{}) error {
}
d.Set("enable_dns_hostnames", *resp.EnableDnsHostnames)
DescribeClassiclinkOpts := &ec2.DescribeVpcClassicLinkInput{
VpcIds: []*string{ &vpcid },
}
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
}
}
d.Set("enable_classiclink", classiclink_enabled)
// Get the main routing table for this VPC
// Really Ugly need to make this better - rmenn
filter1 := &ec2.Filter{
@ -241,6 +263,34 @@ func resourceAwsVpcUpdate(d *schema.ResourceData, meta interface{}) error {
d.SetPartial("enable_dns_support")
}
if d.HasChange("enable_classiclink") {
val := d.Get("enable_classiclink").(bool)
if val {
modifyOpts := &ec2.EnableVpcClassicLinkInput{
VpcId: &vpcid,
}
log.Printf(
"[INFO] Modifying enable_classiclink vpc attribute for %s: %#v",
d.Id(), modifyOpts)
if _, err := conn.EnableVpcClassicLink(modifyOpts); err != nil {
return err
}
} else {
modifyOpts := &ec2.DisableVpcClassicLinkInput{
VpcId: &vpcid,
}
log.Printf(
"[INFO] Modifying enable_classiclink vpc attribute for %s: %#v",
d.Id(), modifyOpts)
if _, err := conn.DisableVpcClassicLink(modifyOpts); err != nil {
return err
}
}
d.SetPartial("enable_classiclink")
}
if err := setTags(conn, d); err != nil {
return err
} else {

View File

@ -206,6 +206,23 @@ func TestAccAWSVpc_bothDnsOptionsSet(t *testing.T) {
})
}
func TestAccAWSVpc_classiclinkOptionSet(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckVpcDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccVpcConfig_ClassiclinkOption,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(
"aws_vpc.bar", "enable_classiclink", "true"),
),
},
},
})
}
const testAccVpcConfig = `
resource "aws_vpc" "foo" {
cidr_block = "10.1.0.0/16"
@ -254,3 +271,11 @@ resource "aws_vpc" "bar" {
enable_dns_support = true
}
`
const testAccVpcConfig_ClassiclinkOption = `
resource "aws_vpc" "bar" {
cidr_block = "172.2.0.0/16"
enable_classiclink = true
}
`

View File

@ -41,6 +41,7 @@ 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.
* `tags` - (Optional) A mapping of tags to assign to the resource.
## Attributes Reference
@ -52,6 +53,7 @@ The following attributes are exported:
* `instance_tenancy` - Tenancy of instances spin up within VPC.
* `enable_dns_support` - Whether or not the VPC has DNS support
* `enable_dns_hostnames` - Whether or not the VPC has DNS hostname support
* `enable_classiclink` - Whether or not the VPC has Classiclink enabled
* `main_route_table_id` - The ID of the main route table associated with
this VPC. Note that you can change a VPC's main route table by using an
[`aws_main_route_table_association`](/docs/providers/aws/r/main_route_table_assoc.html).