diff --git a/aws/data_source_aws_ami.go b/aws/data_source_aws_ami.go index 716ea6e4a001..5cfd3c464e69 100644 --- a/aws/data_source_aws_ami.go +++ b/aws/data_source_aws_ami.go @@ -13,6 +13,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/hashcode" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/helper/validation" + "github.com/terraform-providers/terraform-provider-aws/aws/internal/keyvaluetags" ) func dataSourceAwsAmi() *schema.Resource { @@ -290,8 +291,8 @@ func amiDescriptionAttributes(d *schema.ResourceData, image *ec2.Image) error { if err := d.Set("state_reason", amiStateReason(image.StateReason)); err != nil { return err } - if err := d.Set("tags", tagsToMap(image.Tags)); err != nil { - return err + if err := d.Set("tags", keyvaluetags.Ec2KeyValueTags(image.Tags).IgnoreAws().Map()); err != nil { + return fmt.Errorf("error setting tags: %s", err) } return nil } diff --git a/aws/data_source_aws_ami_test.go b/aws/data_source_aws_ami_test.go index bfc0c7a01137..a5d06a3b78be 100644 --- a/aws/data_source_aws_ami_test.go +++ b/aws/data_source_aws_ami_test.go @@ -10,6 +10,7 @@ import ( ) func TestAccAWSAmiDataSource_natInstance(t *testing.T) { + resourceName := "data.aws_ami.nat_ami" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, @@ -17,7 +18,7 @@ func TestAccAWSAmiDataSource_natInstance(t *testing.T) { { Config: testAccCheckAwsAmiDataSourceConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckAwsAmiDataSourceID("data.aws_ami.nat_ami"), + testAccCheckAwsAmiDataSourceID(resourceName), // Check attributes. Some attributes are tough to test - any not contained here should not be considered // stable and should not be used in interpolation. Exception to block_device_mappings which should both // show up consistently and break if certain references are not available. However modification of the @@ -25,35 +26,36 @@ func TestAccAWSAmiDataSource_natInstance(t *testing.T) { // deep inspection is not included, simply the count is checked. // Tags and product codes may need more testing, but I'm having a hard time finding images with // these attributes set. - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "architecture", "x86_64"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "block_device_mappings.#", "1"), - resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "creation_date", regexp.MustCompile("^20[0-9]{2}-")), - resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "description", regexp.MustCompile("^Amazon Linux AMI")), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "hypervisor", "xen"), - resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "image_id", regexp.MustCompile("^ami-")), - resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "image_location", regexp.MustCompile("^amazon/")), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "image_owner_alias", "amazon"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "image_type", "machine"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "most_recent", "true"), - resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "name", regexp.MustCompile("^amzn-ami-vpc-nat")), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "owner_id", "137112412989"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "public", "true"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "product_codes.#", "0"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "root_device_name", "/dev/xvda"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "root_device_type", "ebs"), - resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "root_snapshot_id", regexp.MustCompile("^snap-")), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "sriov_net_support", "simple"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "state", "available"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "state_reason.code", "UNSET"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "state_reason.message", "UNSET"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "tags.%", "0"), - resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "virtualization_type", "hvm"), + resource.TestCheckResourceAttr(resourceName, "architecture", "x86_64"), + resource.TestCheckResourceAttr(resourceName, "block_device_mappings.#", "1"), + resource.TestMatchResourceAttr(resourceName, "creation_date", regexp.MustCompile("^20[0-9]{2}-")), + resource.TestMatchResourceAttr(resourceName, "description", regexp.MustCompile("^Amazon Linux AMI")), + resource.TestCheckResourceAttr(resourceName, "hypervisor", "xen"), + resource.TestMatchResourceAttr(resourceName, "image_id", regexp.MustCompile("^ami-")), + resource.TestMatchResourceAttr(resourceName, "image_location", regexp.MustCompile("^amazon/")), + resource.TestCheckResourceAttr(resourceName, "image_owner_alias", "amazon"), + resource.TestCheckResourceAttr(resourceName, "image_type", "machine"), + resource.TestCheckResourceAttr(resourceName, "most_recent", "true"), + resource.TestMatchResourceAttr(resourceName, "name", regexp.MustCompile("^amzn-ami-vpc-nat")), + resource.TestCheckResourceAttr(resourceName, "owner_id", "137112412989"), + resource.TestCheckResourceAttr(resourceName, "public", "true"), + resource.TestCheckResourceAttr(resourceName, "product_codes.#", "0"), + resource.TestCheckResourceAttr(resourceName, "root_device_name", "/dev/xvda"), + resource.TestCheckResourceAttr(resourceName, "root_device_type", "ebs"), + resource.TestMatchResourceAttr(resourceName, "root_snapshot_id", regexp.MustCompile("^snap-")), + resource.TestCheckResourceAttr(resourceName, "sriov_net_support", "simple"), + resource.TestCheckResourceAttr(resourceName, "state", "available"), + resource.TestCheckResourceAttr(resourceName, "state_reason.code", "UNSET"), + resource.TestCheckResourceAttr(resourceName, "state_reason.message", "UNSET"), + resource.TestCheckResourceAttr(resourceName, "tags.%", "0"), + resource.TestCheckResourceAttr(resourceName, "virtualization_type", "hvm"), ), }, }, }) } func TestAccAWSAmiDataSource_windowsInstance(t *testing.T) { + resourceName := "data.aws_ami.windows_ami" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, @@ -61,31 +63,31 @@ func TestAccAWSAmiDataSource_windowsInstance(t *testing.T) { { Config: testAccCheckAwsAmiDataSourceWindowsConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckAwsAmiDataSourceID("data.aws_ami.windows_ami"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "architecture", "x86_64"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "block_device_mappings.#", "27"), - resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "creation_date", regexp.MustCompile("^20[0-9]{2}-")), - resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "description", regexp.MustCompile("^Microsoft Windows Server")), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "hypervisor", "xen"), - resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "image_id", regexp.MustCompile("^ami-")), - resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "image_location", regexp.MustCompile("^amazon/")), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "image_owner_alias", "amazon"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "image_type", "machine"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "most_recent", "true"), - resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "name", regexp.MustCompile("^Windows_Server-2012-R2")), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "owner_id", "801119661308"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "platform", "windows"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "public", "true"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "product_codes.#", "0"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "root_device_name", "/dev/sda1"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "root_device_type", "ebs"), - resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "root_snapshot_id", regexp.MustCompile("^snap-")), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "sriov_net_support", "simple"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "state", "available"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "state_reason.code", "UNSET"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "state_reason.message", "UNSET"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "tags.%", "0"), - resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "virtualization_type", "hvm"), + testAccCheckAwsAmiDataSourceID(resourceName), + resource.TestCheckResourceAttr(resourceName, "architecture", "x86_64"), + resource.TestCheckResourceAttr(resourceName, "block_device_mappings.#", "27"), + resource.TestMatchResourceAttr(resourceName, "creation_date", regexp.MustCompile("^20[0-9]{2}-")), + resource.TestMatchResourceAttr(resourceName, "description", regexp.MustCompile("^Microsoft Windows Server")), + resource.TestCheckResourceAttr(resourceName, "hypervisor", "xen"), + resource.TestMatchResourceAttr(resourceName, "image_id", regexp.MustCompile("^ami-")), + resource.TestMatchResourceAttr(resourceName, "image_location", regexp.MustCompile("^amazon/")), + resource.TestCheckResourceAttr(resourceName, "image_owner_alias", "amazon"), + resource.TestCheckResourceAttr(resourceName, "image_type", "machine"), + resource.TestCheckResourceAttr(resourceName, "most_recent", "true"), + resource.TestMatchResourceAttr(resourceName, "name", regexp.MustCompile("^Windows_Server-2012-R2")), + resource.TestCheckResourceAttr(resourceName, "owner_id", "801119661308"), + resource.TestCheckResourceAttr(resourceName, "platform", "windows"), + resource.TestCheckResourceAttr(resourceName, "public", "true"), + resource.TestCheckResourceAttr(resourceName, "product_codes.#", "0"), + resource.TestCheckResourceAttr(resourceName, "root_device_name", "/dev/sda1"), + resource.TestCheckResourceAttr(resourceName, "root_device_type", "ebs"), + resource.TestMatchResourceAttr(resourceName, "root_snapshot_id", regexp.MustCompile("^snap-")), + resource.TestCheckResourceAttr(resourceName, "sriov_net_support", "simple"), + resource.TestCheckResourceAttr(resourceName, "state", "available"), + resource.TestCheckResourceAttr(resourceName, "state_reason.code", "UNSET"), + resource.TestCheckResourceAttr(resourceName, "state_reason.message", "UNSET"), + resource.TestCheckResourceAttr(resourceName, "tags.%", "0"), + resource.TestCheckResourceAttr(resourceName, "virtualization_type", "hvm"), ), }, }, @@ -93,6 +95,7 @@ func TestAccAWSAmiDataSource_windowsInstance(t *testing.T) { } func TestAccAWSAmiDataSource_instanceStore(t *testing.T) { + resourceName := "data.aws_ami.instance_store_ami" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, @@ -100,27 +103,27 @@ func TestAccAWSAmiDataSource_instanceStore(t *testing.T) { { Config: testAccCheckAwsAmiDataSourceInstanceStoreConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckAwsAmiDataSourceID("data.aws_ami.instance_store_ami"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "architecture", "x86_64"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "block_device_mappings.#", "0"), - resource.TestMatchResourceAttr("data.aws_ami.instance_store_ami", "creation_date", regexp.MustCompile("^20[0-9]{2}-")), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "hypervisor", "xen"), - resource.TestMatchResourceAttr("data.aws_ami.instance_store_ami", "image_id", regexp.MustCompile("^ami-")), - resource.TestMatchResourceAttr("data.aws_ami.instance_store_ami", "image_location", regexp.MustCompile("ubuntu-trusty-14.04-amd64-server")), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "image_type", "machine"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "most_recent", "true"), - resource.TestMatchResourceAttr("data.aws_ami.instance_store_ami", "name", regexp.MustCompile("^ubuntu/images/hvm-instance/ubuntu-trusty-14.04-amd64-server")), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "owner_id", "099720109477"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "public", "true"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "product_codes.#", "0"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "root_device_type", "instance-store"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "root_snapshot_id", ""), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "sriov_net_support", "simple"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "state", "available"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "state_reason.code", "UNSET"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "state_reason.message", "UNSET"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "tags.%", "0"), - resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "virtualization_type", "hvm"), + testAccCheckAwsAmiDataSourceID(resourceName), + resource.TestCheckResourceAttr(resourceName, "architecture", "x86_64"), + resource.TestCheckResourceAttr(resourceName, "block_device_mappings.#", "0"), + resource.TestMatchResourceAttr(resourceName, "creation_date", regexp.MustCompile("^20[0-9]{2}-")), + resource.TestCheckResourceAttr(resourceName, "hypervisor", "xen"), + resource.TestMatchResourceAttr(resourceName, "image_id", regexp.MustCompile("^ami-")), + resource.TestMatchResourceAttr(resourceName, "image_location", regexp.MustCompile("ubuntu-trusty-14.04-amd64-server")), + resource.TestCheckResourceAttr(resourceName, "image_type", "machine"), + resource.TestCheckResourceAttr(resourceName, "most_recent", "true"), + resource.TestMatchResourceAttr(resourceName, "name", regexp.MustCompile("^ubuntu/images/hvm-instance/ubuntu-trusty-14.04-amd64-server")), + resource.TestCheckResourceAttr(resourceName, "owner_id", "099720109477"), + resource.TestCheckResourceAttr(resourceName, "public", "true"), + resource.TestCheckResourceAttr(resourceName, "product_codes.#", "0"), + resource.TestCheckResourceAttr(resourceName, "root_device_type", "instance-store"), + resource.TestCheckResourceAttr(resourceName, "root_snapshot_id", ""), + resource.TestCheckResourceAttr(resourceName, "sriov_net_support", "simple"), + resource.TestCheckResourceAttr(resourceName, "state", "available"), + resource.TestCheckResourceAttr(resourceName, "state_reason.code", "UNSET"), + resource.TestCheckResourceAttr(resourceName, "state_reason.message", "UNSET"), + resource.TestCheckResourceAttr(resourceName, "tags.%", "0"), + resource.TestCheckResourceAttr(resourceName, "virtualization_type", "hvm"), ), }, },