github.com/gabrielperezs/terraform@v0.7.0-rc2.0.20160715084931-f7da2612946f/builtin/providers/aws/data_source_aws_ami_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "regexp" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 ) 11 12 func TestAccAWSAmiDataSource_natInstance(t *testing.T) { 13 resource.Test(t, resource.TestCase{ 14 PreCheck: func() { testAccPreCheck(t) }, 15 Providers: testAccProviders, 16 Steps: []resource.TestStep{ 17 resource.TestStep{ 18 Config: testAccCheckAwsAmiDataSourceConfig, 19 Check: resource.ComposeTestCheckFunc( 20 testAccCheckAwsAmiDataSourceID("data.aws_ami.nat_ami"), 21 // Check attributes. Some attributes are tough to test - any not contained here should not be considered 22 // stable and should not be used in interpolation. Exception to block_device_mappings which should both 23 // show up consistently and break if certain references are not available. However modification of the 24 // snapshot ID which is bound to happen on the NAT AMIs will cause testing to break consistently, so 25 // deep inspection is not included, simply the count is checked. 26 // Tags and product codes may need more testing, but I'm having a hard time finding images with 27 // these attributes set. 28 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "architecture", "x86_64"), 29 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "block_device_mappings.#", "1"), 30 resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "creation_date", regexp.MustCompile("^20[0-9]{2}-")), 31 resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "description", regexp.MustCompile("^Amazon Linux AMI")), 32 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "hypervisor", "xen"), 33 resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "image_id", regexp.MustCompile("^ami-")), 34 resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "image_location", regexp.MustCompile("^amazon/")), 35 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "image_owner_alias", "amazon"), 36 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "image_type", "machine"), 37 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "most_recent", "true"), 38 resource.TestMatchResourceAttr("data.aws_ami.nat_ami", "name", regexp.MustCompile("^amzn-ami-vpc-nat")), 39 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "owner_id", "137112412989"), 40 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "public", "true"), 41 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "product_codes.#", "0"), 42 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "root_device_name", "/dev/xvda"), 43 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "root_device_type", "ebs"), 44 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "sriov_net_support", "simple"), 45 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "state", "available"), 46 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "state_reason.code", "UNSET"), 47 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "state_reason.message", "UNSET"), 48 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "tags.#", "0"), 49 resource.TestCheckResourceAttr("data.aws_ami.nat_ami", "virtualization_type", "hvm"), 50 ), 51 }, 52 }, 53 }) 54 } 55 func TestAccAWSAmiDataSource_windowsInstance(t *testing.T) { 56 resource.Test(t, resource.TestCase{ 57 PreCheck: func() { testAccPreCheck(t) }, 58 Providers: testAccProviders, 59 Steps: []resource.TestStep{ 60 resource.TestStep{ 61 Config: testAccCheckAwsAmiDataSourceWindowsConfig, 62 Check: resource.ComposeTestCheckFunc( 63 testAccCheckAwsAmiDataSourceID("data.aws_ami.windows_ami"), 64 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "architecture", "x86_64"), 65 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "block_device_mappings.#", "27"), 66 resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "creation_date", regexp.MustCompile("^20[0-9]{2}-")), 67 resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "description", regexp.MustCompile("^Microsoft Windows Server 2012")), 68 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "hypervisor", "xen"), 69 resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "image_id", regexp.MustCompile("^ami-")), 70 resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "image_location", regexp.MustCompile("^amazon/")), 71 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "image_owner_alias", "amazon"), 72 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "image_type", "machine"), 73 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "most_recent", "true"), 74 resource.TestMatchResourceAttr("data.aws_ami.windows_ami", "name", regexp.MustCompile("^Windows_Server-2012-R2")), 75 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "owner_id", "801119661308"), 76 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "platform", "windows"), 77 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "public", "true"), 78 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "product_codes.#", "0"), 79 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "root_device_name", "/dev/sda1"), 80 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "root_device_type", "ebs"), 81 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "sriov_net_support", "simple"), 82 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "state", "available"), 83 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "state_reason.code", "UNSET"), 84 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "state_reason.message", "UNSET"), 85 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "tags.#", "0"), 86 resource.TestCheckResourceAttr("data.aws_ami.windows_ami", "virtualization_type", "hvm"), 87 ), 88 }, 89 }, 90 }) 91 } 92 93 func TestAccAWSAmiDataSource_instanceStore(t *testing.T) { 94 resource.Test(t, resource.TestCase{ 95 PreCheck: func() { testAccPreCheck(t) }, 96 Providers: testAccProviders, 97 Steps: []resource.TestStep{ 98 resource.TestStep{ 99 Config: testAccCheckAwsAmiDataSourceInstanceStoreConfig, 100 Check: resource.ComposeTestCheckFunc( 101 testAccCheckAwsAmiDataSourceID("data.aws_ami.instance_store_ami"), 102 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "architecture", "x86_64"), 103 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "block_device_mappings.#", "0"), 104 resource.TestMatchResourceAttr("data.aws_ami.instance_store_ami", "creation_date", regexp.MustCompile("^20[0-9]{2}-")), 105 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "hypervisor", "xen"), 106 resource.TestMatchResourceAttr("data.aws_ami.instance_store_ami", "image_id", regexp.MustCompile("^ami-")), 107 resource.TestMatchResourceAttr("data.aws_ami.instance_store_ami", "image_location", regexp.MustCompile("images/hvm-instance/ubuntu-trusty-14.04-amd64-server")), 108 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "image_type", "machine"), 109 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "most_recent", "true"), 110 resource.TestMatchResourceAttr("data.aws_ami.instance_store_ami", "name", regexp.MustCompile("^ubuntu/images/hvm-instance/ubuntu-trusty-14.04-amd64-server")), 111 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "owner_id", "099720109477"), 112 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "public", "true"), 113 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "product_codes.#", "0"), 114 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "root_device_type", "instance-store"), 115 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "sriov_net_support", "simple"), 116 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "state", "available"), 117 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "state_reason.code", "UNSET"), 118 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "state_reason.message", "UNSET"), 119 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "tags.#", "0"), 120 resource.TestCheckResourceAttr("data.aws_ami.instance_store_ami", "virtualization_type", "hvm"), 121 ), 122 }, 123 }, 124 }) 125 } 126 127 func TestAccAWSAmiDataSource_owners(t *testing.T) { 128 resource.Test(t, resource.TestCase{ 129 PreCheck: func() { testAccPreCheck(t) }, 130 Providers: testAccProviders, 131 Steps: []resource.TestStep{ 132 resource.TestStep{ 133 Config: testAccCheckAwsAmiDataSourceOwnersConfig, 134 Check: resource.ComposeTestCheckFunc( 135 testAccCheckAwsAmiDataSourceID("data.aws_ami.amazon_ami"), 136 ), 137 }, 138 }, 139 }) 140 } 141 142 func testAccCheckAwsAmiDataSourceDestroy(s *terraform.State) error { 143 return nil 144 } 145 146 func testAccCheckAwsAmiDataSourceID(n string) resource.TestCheckFunc { 147 // Wait for IAM role 148 return func(s *terraform.State) error { 149 rs, ok := s.RootModule().Resources[n] 150 if !ok { 151 return fmt.Errorf("Can't find AMI data source: %s", n) 152 } 153 154 if rs.Primary.ID == "" { 155 return fmt.Errorf("AMI data source ID not set") 156 } 157 return nil 158 } 159 } 160 161 // Using NAT AMIs for testing - I would expect with NAT gateways now a thing, 162 // that this will possibly be deprecated at some point in time. Other candidates 163 // for testing this after that may be Ubuntu's AMI's, or Amazon's regular 164 // Amazon Linux AMIs. 165 const testAccCheckAwsAmiDataSourceConfig = ` 166 data "aws_ami" "nat_ami" { 167 most_recent = true 168 filter { 169 name = "owner-alias" 170 values = ["amazon"] 171 } 172 filter { 173 name = "name" 174 values = ["amzn-ami-vpc-nat*"] 175 } 176 filter { 177 name = "virtualization-type" 178 values = ["hvm"] 179 } 180 filter { 181 name = "root-device-type" 182 values = ["ebs"] 183 } 184 filter { 185 name = "block-device-mapping.volume-type" 186 values = ["standard"] 187 } 188 } 189 ` 190 191 // Windows image test. 192 const testAccCheckAwsAmiDataSourceWindowsConfig = ` 193 data "aws_ami" "windows_ami" { 194 most_recent = true 195 filter { 196 name = "owner-alias" 197 values = ["amazon"] 198 } 199 filter { 200 name = "name" 201 values = ["Windows_Server-2012-R2*"] 202 } 203 filter { 204 name = "virtualization-type" 205 values = ["hvm"] 206 } 207 filter { 208 name = "root-device-type" 209 values = ["ebs"] 210 } 211 filter { 212 name = "block-device-mapping.volume-type" 213 values = ["gp2"] 214 } 215 } 216 ` 217 218 // Instance store test - using Ubuntu images 219 const testAccCheckAwsAmiDataSourceInstanceStoreConfig = ` 220 data "aws_ami" "instance_store_ami" { 221 most_recent = true 222 filter { 223 name = "owner-id" 224 values = ["099720109477"] 225 } 226 filter { 227 name = "name" 228 values = ["ubuntu/images/hvm-instance/ubuntu-trusty-14.04-amd64-server*"] 229 } 230 filter { 231 name = "virtualization-type" 232 values = ["hvm"] 233 } 234 filter { 235 name = "root-device-type" 236 values = ["instance-store"] 237 } 238 } 239 ` 240 241 // Testing owner parameter 242 const testAccCheckAwsAmiDataSourceOwnersConfig = ` 243 data "aws_ami" "amazon_ami" { 244 most_recent = true 245 owners = ["amazon"] 246 } 247 `