From 563770ec399e94f325aa52d9d0a3fd19b693bb04 Mon Sep 17 00:00:00 2001 From: Kash Date: Fri, 14 Sep 2018 10:57:17 -0400 Subject: [PATCH] fix setting ipv6_addresses --- aws/resource_aws_launch_template.go | 19 ++++++++----- aws/resource_aws_launch_template_test.go | 34 ++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/aws/resource_aws_launch_template.go b/aws/resource_aws_launch_template.go index 5be358d0b58c..92a2afda31bf 100644 --- a/aws/resource_aws_launch_template.go +++ b/aws/resource_aws_launch_template.go @@ -758,7 +758,6 @@ func getMonitoring(m *ec2.LaunchTemplatesMonitoring) []interface{} { func getNetworkInterfaces(n []*ec2.LaunchTemplateInstanceNetworkInterfaceSpecification) []interface{} { s := []interface{}{} for _, v := range n { - var ipv6Addresses []string var ipv4Addresses []string networkInterface := map[string]interface{}{ @@ -773,11 +772,19 @@ func getNetworkInterfaces(n []*ec2.LaunchTemplateInstanceNetworkInterfaceSpecifi "subnet_id": aws.StringValue(v.SubnetId), } - for _, address := range v.Ipv6Addresses { - ipv6Addresses = append(ipv6Addresses, aws.StringValue(address.Ipv6Address)) - } - if len(ipv6Addresses) > 0 { - networkInterface["ipv6_addresses"] = ipv6Addresses + if len(v.Ipv6Addresses) > 0 { + raw, ok := networkInterface["ipv6_addresses"] + if !ok { + raw = schema.NewSet(schema.HashString, nil) + } + + list := raw.(*schema.Set) + + for _, address := range v.Ipv6Addresses { + list.Add(aws.StringValue(address.Ipv6Address)) + } + + networkInterface["ipv6_addresses"] = list } for _, address := range v.PrivateIpAddresses { diff --git a/aws/resource_aws_launch_template_test.go b/aws/resource_aws_launch_template_test.go index e53c527d20b3..f1a99eae79c2 100644 --- a/aws/resource_aws_launch_template_test.go +++ b/aws/resource_aws_launch_template_test.go @@ -250,6 +250,27 @@ func TestAccAWSLaunchTemplate_networkInterface(t *testing.T) { }) } +func TestAccAWSLaunchTemplate_networkInterface_ipv6Addresses(t *testing.T) { + var template ec2.LaunchTemplate + resName := "aws_launch_template.test" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSLaunchTemplateDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSLaunchTemplateConfig_networkInterface_ipv6Addresses, + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSLaunchTemplateExists(resName, &template), + resource.TestCheckResourceAttr(resName, "network_interfaces.#", "1"), + resource.TestCheckResourceAttr(resName, "network_interfaces.0.ipv6_addresses.#", "2"), + ), + }, + }, + }) +} + func testAccCheckAWSLaunchTemplateExists(n string, t *ec2.LaunchTemplate) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] @@ -531,6 +552,19 @@ resource "aws_launch_template" "test" { } ` +const testAccAWSLaunchTemplateConfig_networkInterface_ipv6Addresses = ` +resource "aws_launch_template" "test" { + name = "network-interface-ipv6-addresses-launch-template" + + network_interfaces { + ipv6_addresses = [ + "0:0:0:0:0:ffff:a01:5", + "0:0:0:0:0:ffff:a01:6", + ] + } +} +` + const testAccAWSLaunchTemplateConfig_asg_basic = ` data "aws_ami" "test_ami" { most_recent = true