From 974074fee904806402904db41090a23516b81dd4 Mon Sep 17 00:00:00 2001 From: Luke Chadwick Date: Tue, 29 Jul 2014 22:06:53 +1000 Subject: [PATCH 1/2] Add associate_public_ip_address as an attribute of the aws_instance resource --- .../providers/aws/resource_aws_instance.go | 33 +++++++++++-------- .../aws/resource_aws_instance_test.go | 1 + 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/builtin/providers/aws/resource_aws_instance.go b/builtin/providers/aws/resource_aws_instance.go index 757aca656..4e86d551b 100644 --- a/builtin/providers/aws/resource_aws_instance.go +++ b/builtin/providers/aws/resource_aws_instance.go @@ -34,13 +34,19 @@ func resource_aws_instance_create( userData = attr.NewExtra.(string) } + associatePublicIPAddress := false + if attr, ok := d.Attributes["associate_public_ip_address"]; ok { + associatePublicIPAddress = attr.New != "" && attr.New != "false" + } + // Build the creation struct runOpts := &ec2.RunInstances{ - ImageId: rs.Attributes["ami"], - InstanceType: rs.Attributes["instance_type"], - KeyName: rs.Attributes["key_name"], - SubnetId: rs.Attributes["subnet_id"], - UserData: []byte(userData), + ImageId: rs.Attributes["ami"], + InstanceType: rs.Attributes["instance_type"], + KeyName: rs.Attributes["key_name"], + SubnetId: rs.Attributes["subnet_id"], + AssociatePublicIpAddress: associatePublicIPAddress, + UserData: []byte(userData), } if raw := flatmap.Expand(rs.Attributes, "security_groups"); raw != nil { if sgs, ok := raw.([]interface{}); ok { @@ -187,14 +193,15 @@ func resource_aws_instance_diff( meta interface{}) (*terraform.ResourceDiff, error) { b := &diff.ResourceBuilder{ Attrs: map[string]diff.AttrType{ - "ami": diff.AttrTypeCreate, - "availability_zone": diff.AttrTypeCreate, - "instance_type": diff.AttrTypeCreate, - "key_name": diff.AttrTypeCreate, - "security_groups": diff.AttrTypeCreate, - "subnet_id": diff.AttrTypeCreate, - "source_dest_check": diff.AttrTypeUpdate, - "user_data": diff.AttrTypeCreate, + "ami": diff.AttrTypeCreate, + "availability_zone": diff.AttrTypeCreate, + "instance_type": diff.AttrTypeCreate, + "key_name": diff.AttrTypeCreate, + "security_groups": diff.AttrTypeCreate, + "subnet_id": diff.AttrTypeCreate, + "source_dest_check": diff.AttrTypeUpdate, + "user_data": diff.AttrTypeCreate, + "associate_public_ip_address": diff.AttrTypeCreate, }, ComputedAttrs: []string{ diff --git a/builtin/providers/aws/resource_aws_instance_test.go b/builtin/providers/aws/resource_aws_instance_test.go index 3ce3bb241..e27db231d 100644 --- a/builtin/providers/aws/resource_aws_instance_test.go +++ b/builtin/providers/aws/resource_aws_instance_test.go @@ -252,5 +252,6 @@ resource "aws_instance" "foo" { ami = "ami-4fccb37f" instance_type = "m1.small" subnet_id = "${aws_subnet.foo.id}" + associate_public_ip_address = true } ` From 8d2e232602e0c59a5ef28e928e755510869e4aa3 Mon Sep 17 00:00:00 2001 From: Luke Chadwick Date: Tue, 29 Jul 2014 22:12:43 +1000 Subject: [PATCH 2/2] Update documentation to reflect the addition of associate_public_ip_address to the aws_instance resource --- website/source/docs/providers/aws/r/instance.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/source/docs/providers/aws/r/instance.html.markdown b/website/source/docs/providers/aws/r/instance.html.markdown index 491d1f653..a700f9320 100644 --- a/website/source/docs/providers/aws/r/instance.html.markdown +++ b/website/source/docs/providers/aws/r/instance.html.markdown @@ -31,6 +31,7 @@ The following arguments are supported: If you are within a VPC, you'll need to use the security group ID. Otherwise, for EC2, use the security group name. * `subnet_id` - (Optional) The VPC Subnet ID to launch in. +* `associate_public_ip_address` - (Optional) Associate a public ip address with an instance in a VPC. * `source_dest_check` - (Optional) Controls if traffic is routed to the instance when the destination address does not match the instance. Used for NAT or VPNs. Defaults false. * `user_data` - (Optional) The user data to provide when launching the instance. @@ -48,4 +49,3 @@ The following attributes are exported: * `public_ip` - The public IP address. * `security_groups` - The associated security groups. * `subnet_id` - The VPC subnet ID. -