diff --git a/aws/resource_aws_launch_template.go b/aws/resource_aws_launch_template.go index 1524d2516586..c599182c3c1a 100644 --- a/aws/resource_aws_launch_template.go +++ b/aws/resource_aws_launch_template.go @@ -10,6 +10,7 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/arn" "github.com/aws/aws-sdk-go/service/ec2" + "github.com/hashicorp/terraform/helper/customdiff" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/validation" @@ -415,6 +416,20 @@ func resourceAwsLaunchTemplate() *schema.Resource { "tags": tagsSchema(), }, + + CustomizeDiff: customdiff.Sequence( + customdiff.ComputedIf("latest_version", func(diff *schema.ResourceDiff, meta interface{}) bool { + for _, changedKey := range diff.GetChangedKeysPrefix("") { + switch changedKey { + case "name", "name_prefix", "description", "default_version", "latest_version": + continue + default: + return true + } + } + return false + }), + ), } } diff --git a/aws/resource_aws_launch_template_test.go b/aws/resource_aws_launch_template_test.go index 470c40be2479..151b7011ef7a 100644 --- a/aws/resource_aws_launch_template_test.go +++ b/aws/resource_aws_launch_template_test.go @@ -105,7 +105,6 @@ func TestAccAWSLaunchTemplate_data(t *testing.T) { func TestAccAWSLaunchTemplate_update(t *testing.T) { var template ec2.LaunchTemplate resName := "aws_launch_template.foo" - rInt := acctest.RandInt() resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -113,20 +112,24 @@ func TestAccAWSLaunchTemplate_update(t *testing.T) { CheckDestroy: testAccCheckAWSLaunchTemplateDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSLaunchTemplateConfig_basic(rInt), + Config: testAccAWSLaunchTemplateConfig_asg_basic, Check: resource.ComposeTestCheckFunc( testAccCheckAWSLaunchTemplateExists(resName, &template), resource.TestCheckResourceAttr(resName, "default_version", "1"), resource.TestCheckResourceAttr(resName, "latest_version", "1"), + resource.TestCheckResourceAttr( + "aws_autoscaling_group.bar", "launch_template.0.version", "1"), ), }, { - Config: testAccAWSLaunchTemplateConfig_data(rInt), + Config: testAccAWSLaunchTemplateConfig_asg_update, Check: resource.ComposeTestCheckFunc( testAccCheckAWSLaunchTemplateExists(resName, &template), resource.TestCheckResourceAttr(resName, "default_version", "1"), resource.TestCheckResourceAttr(resName, "latest_version", "2"), - resource.TestCheckResourceAttrSet(resName, "image_id"), + resource.TestCheckResourceAttrSet(resName, "instance_type"), + resource.TestCheckResourceAttr( + "aws_autoscaling_group.bar", "launch_template.0.version", "2"), ), }, }, @@ -415,3 +418,72 @@ resource "aws_launch_template" "test" { } } ` + +const testAccAWSLaunchTemplateConfig_asg_basic = ` +data "aws_ami" "test_ami" { + most_recent = true + + filter { + name = "owner-alias" + values = ["amazon"] + } + + filter { + name = "name" + values = ["amzn-ami-hvm-*-x86_64-gp2"] + } +} + +resource "aws_launch_template" "foo" { + name_prefix = "foobar" + image_id = "${data.aws_ami.test_ami.id}" +} + +data "aws_availability_zones" "available" {} + +resource "aws_autoscaling_group" "bar" { + availability_zones = ["${data.aws_availability_zones.available.names[0]}"] + desired_capacity = 0 + max_size = 0 + min_size = 0 + launch_template = { + id = "${aws_launch_template.foo.id}" + version = "${aws_launch_template.foo.latest_version}" + } +} +` + +const testAccAWSLaunchTemplateConfig_asg_update = ` +data "aws_ami" "test_ami" { + most_recent = true + + filter { + name = "owner-alias" + values = ["amazon"] + } + + filter { + name = "name" + values = ["amzn-ami-hvm-*-x86_64-gp2"] + } +} + +resource "aws_launch_template" "foo" { + name_prefix = "foobar" + image_id = "${data.aws_ami.test_ami.id}" + instance_type = "t2.nano" +} + +data "aws_availability_zones" "available" {} + +resource "aws_autoscaling_group" "bar" { + availability_zones = ["${data.aws_availability_zones.available.names[0]}"] + desired_capacity = 0 + max_size = 0 + min_size = 0 + launch_template = { + id = "${aws_launch_template.foo.id}" + version = "${aws_launch_template.foo.latest_version}" + } +} +`