github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/aws/data_source_aws_instance_test.go (about) 1 package aws 2 3 import ( 4 "testing" 5 6 "fmt" 7 8 "github.com/hashicorp/terraform/helper/acctest" 9 "github.com/hashicorp/terraform/helper/resource" 10 ) 11 12 func TestAccAWSInstanceDataSource_basic(t *testing.T) { 13 resource.Test(t, resource.TestCase{ 14 PreCheck: func() { testAccPreCheck(t) }, 15 Providers: testAccProviders, 16 Steps: []resource.TestStep{ 17 { 18 Config: testAccInstanceDataSourceConfig, 19 Check: resource.ComposeTestCheckFunc( 20 resource.TestCheckResourceAttr( 21 "data.aws_instance.web-instance", "ami", "ami-4fccb37f"), 22 resource.TestCheckResourceAttr( 23 "data.aws_instance.web-instance", "tags.#", "1"), 24 resource.TestCheckResourceAttr( 25 "data.aws_instance.web-instance", "instance_type", "m1.small"), 26 ), 27 }, 28 }, 29 }) 30 } 31 32 func TestAccAWSInstanceDataSource_tags(t *testing.T) { 33 rInt := acctest.RandInt() 34 resource.Test(t, resource.TestCase{ 35 PreCheck: func() { testAccPreCheck(t) }, 36 Providers: testAccProviders, 37 Steps: []resource.TestStep{ 38 { 39 Config: testAccInstanceDataSourceConfig_Tags(rInt), 40 Check: resource.ComposeTestCheckFunc( 41 resource.TestCheckResourceAttr( 42 "data.aws_instance.web-instance", "ami", "ami-4fccb37f"), 43 resource.TestCheckResourceAttr( 44 "data.aws_instance.web-instance", "tags.#", "2"), 45 resource.TestCheckResourceAttr( 46 "data.aws_instance.web-instance", "instance_type", "m1.small"), 47 ), 48 }, 49 }, 50 }) 51 } 52 53 func TestAccAWSInstanceDataSource_AzUserData(t *testing.T) { 54 resource.Test(t, resource.TestCase{ 55 PreCheck: func() { testAccPreCheck(t) }, 56 Providers: testAccProviders, 57 Steps: []resource.TestStep{ 58 { 59 Config: testAccInstanceDataSourceConfig_AzUserData, 60 Check: resource.ComposeTestCheckFunc( 61 resource.TestCheckResourceAttr( 62 "data.aws_instance.foo", "ami", "ami-4fccb37f"), 63 resource.TestCheckResourceAttr( 64 "data.aws_instance.foo", "tags.#", "1"), 65 resource.TestCheckResourceAttr( 66 "data.aws_instance.foo", "instance_type", "m1.small"), 67 resource.TestCheckResourceAttr( 68 "data.aws_instance.foo", "availability_zone", "us-west-2a"), 69 resource.TestCheckResourceAttr( 70 "data.aws_instance.foo", "user_data", "3dc39dda39be1205215e776bad998da361a5955d"), 71 ), 72 }, 73 }, 74 }) 75 } 76 77 func TestAccAWSInstanceDataSource_gp2IopsDevice(t *testing.T) { 78 resource.Test(t, resource.TestCase{ 79 PreCheck: func() { testAccPreCheck(t) }, 80 Providers: testAccProviders, 81 Steps: []resource.TestStep{ 82 { 83 Config: testAccInstanceDataSourceConfig_gp2IopsDevice, 84 Check: resource.ComposeTestCheckFunc( 85 resource.TestCheckResourceAttr( 86 "data.aws_instance.foo", "ami", "ami-55a7ea65"), 87 resource.TestCheckResourceAttr( 88 "data.aws_instance.foo", "instance_type", "m3.medium"), 89 resource.TestCheckResourceAttr( 90 "aws_instance.foo", "root_block_device.#", "1"), 91 resource.TestCheckResourceAttr( 92 "aws_instance.foo", "root_block_device.0.volume_size", "11"), 93 resource.TestCheckResourceAttr( 94 "aws_instance.foo", "root_block_device.0.volume_type", "gp2"), 95 resource.TestCheckResourceAttr( 96 "aws_instance.foo", "root_block_device.0.iops", "100"), 97 ), 98 }, 99 }, 100 }) 101 } 102 103 func TestAccAWSInstanceDataSource_blockDevices(t *testing.T) { 104 resource.Test(t, resource.TestCase{ 105 PreCheck: func() { testAccPreCheck(t) }, 106 Providers: testAccProviders, 107 Steps: []resource.TestStep{ 108 { 109 Config: testAccInstanceDataSourceConfig_blockDevices, 110 Check: resource.ComposeTestCheckFunc( 111 resource.TestCheckResourceAttr( 112 "data.aws_instance.foo", "ami", "ami-55a7ea65"), 113 resource.TestCheckResourceAttr( 114 "data.aws_instance.foo", "instance_type", "m3.medium"), 115 resource.TestCheckResourceAttr( 116 "aws_instance.foo", "root_block_device.#", "1"), 117 resource.TestCheckResourceAttr( 118 "aws_instance.foo", "root_block_device.0.volume_size", "11"), 119 resource.TestCheckResourceAttr( 120 "aws_instance.foo", "root_block_device.0.volume_type", "gp2"), 121 resource.TestCheckResourceAttr( 122 "aws_instance.foo", "ebs_block_device.#", "3"), 123 resource.TestCheckResourceAttr( 124 "aws_instance.foo", "ephemeral_block_device.#", "1"), 125 ), 126 }, 127 }, 128 }) 129 } 130 131 func TestAccAWSInstanceDataSource_rootInstanceStore(t *testing.T) { 132 resource.Test(t, resource.TestCase{ 133 PreCheck: func() { testAccPreCheck(t) }, 134 Providers: testAccProviders, 135 Steps: []resource.TestStep{ 136 { 137 Config: testAccInstanceDataSourceConfig_rootInstanceStore, 138 Check: resource.ComposeTestCheckFunc( 139 resource.TestCheckResourceAttr( 140 "data.aws_instance.foo", "ami", "ami-44c36524"), 141 resource.TestCheckResourceAttr( 142 "data.aws_instance.foo", "instance_type", "m3.medium"), 143 resource.TestCheckResourceAttr( 144 "aws_instance.foo", "ebs_block_device.#", "0"), 145 resource.TestCheckResourceAttr( 146 "aws_instance.foo", "ebs_optimized", "false"), 147 resource.TestCheckResourceAttr( 148 "aws_instance.foo", "root_block_device.#", "0"), 149 ), 150 }, 151 }, 152 }) 153 } 154 155 func TestAccAWSInstanceDataSource_privateIP(t *testing.T) { 156 resource.Test(t, resource.TestCase{ 157 PreCheck: func() { testAccPreCheck(t) }, 158 Providers: testAccProviders, 159 Steps: []resource.TestStep{ 160 { 161 Config: testAccInstanceDataSourceConfig_privateIP, 162 Check: resource.ComposeTestCheckFunc( 163 resource.TestCheckResourceAttr( 164 "data.aws_instance.foo", "ami", "ami-c5eabbf5"), 165 resource.TestCheckResourceAttr( 166 "data.aws_instance.foo", "instance_type", "t2.micro"), 167 resource.TestCheckResourceAttr( 168 "data.aws_instance.foo", "private_ip", "10.1.1.42"), 169 ), 170 }, 171 }, 172 }) 173 } 174 175 func TestAccAWSInstanceDataSource_keyPair(t *testing.T) { 176 rName := fmt.Sprintf("tf-test-key-%d", acctest.RandInt()) 177 resource.Test(t, resource.TestCase{ 178 PreCheck: func() { testAccPreCheck(t) }, 179 Providers: testAccProviders, 180 Steps: []resource.TestStep{ 181 { 182 Config: testAccInstanceDataSourceConfig_keyPair(rName), 183 Check: resource.ComposeTestCheckFunc( 184 resource.TestCheckResourceAttr( 185 "data.aws_instance.foo", "ami", "ami-408c7f28"), 186 resource.TestCheckResourceAttr( 187 "data.aws_instance.foo", "instance_type", "t1.micro"), 188 resource.TestCheckResourceAttr( 189 "data.aws_instance.foo", "tags.#", "1"), 190 resource.TestCheckResourceAttr( 191 "data.aws_instance.foo", "key_name", rName), 192 ), 193 }, 194 }, 195 }) 196 } 197 198 func TestAccAWSInstanceDataSource_VPC(t *testing.T) { 199 resource.Test(t, resource.TestCase{ 200 PreCheck: func() { testAccPreCheck(t) }, 201 Providers: testAccProviders, 202 Steps: []resource.TestStep{ 203 { 204 Config: testAccInstanceDataSourceConfig_VPC, 205 Check: resource.ComposeTestCheckFunc( 206 resource.TestCheckResourceAttr( 207 "data.aws_instance.foo", "ami", "ami-4fccb37f"), 208 resource.TestCheckResourceAttr( 209 "data.aws_instance.foo", "instance_type", "m1.small"), 210 resource.TestCheckResourceAttr( 211 "data.aws_instance.foo", "user_data", "562a3e32810edf6ff09994f050f12e799452379d"), 212 resource.TestCheckResourceAttr( 213 "data.aws_instance.foo", "associate_public_ip_address", "true"), 214 resource.TestCheckResourceAttr( 215 "data.aws_instance.foo", "tenancy", "dedicated"), 216 ), 217 }, 218 }, 219 }) 220 } 221 222 func TestAccAWSInstanceDataSource_SecurityGroups(t *testing.T) { 223 rInt := acctest.RandInt() 224 resource.Test(t, resource.TestCase{ 225 PreCheck: func() { testAccPreCheck(t) }, 226 Providers: testAccProviders, 227 Steps: []resource.TestStep{ 228 { 229 Config: testAccInstanceDataSourceConfig_SecurityGroups(rInt), 230 Check: resource.ComposeTestCheckFunc( 231 resource.TestCheckResourceAttr( 232 "data.aws_instance.foo", "ami", "ami-408c7f28"), 233 resource.TestCheckResourceAttr( 234 "data.aws_instance.foo", "instance_type", "m1.small"), 235 resource.TestCheckResourceAttr( 236 "data.aws_instance.foo", "vpc_security_group_ids.#", "0"), 237 resource.TestCheckResourceAttr( 238 "data.aws_instance.foo", "security_groups.#", "1"), 239 resource.TestCheckResourceAttr( 240 "data.aws_instance.foo", "user_data", "3dc39dda39be1205215e776bad998da361a5955d"), 241 ), 242 }, 243 }, 244 }) 245 } 246 247 func TestAccAWSInstanceDataSource_VPCSecurityGroups(t *testing.T) { 248 resource.Test(t, resource.TestCase{ 249 PreCheck: func() { testAccPreCheck(t) }, 250 Providers: testAccProviders, 251 Steps: []resource.TestStep{ 252 { 253 Config: testAccInstanceDataSourceConfig_VPCSecurityGroups, 254 Check: resource.ComposeTestCheckFunc( 255 resource.TestCheckResourceAttr( 256 "data.aws_instance.foo", "ami", "ami-21f78e11"), 257 resource.TestCheckResourceAttr( 258 "data.aws_instance.foo", "instance_type", "t1.micro"), 259 resource.TestCheckResourceAttr( 260 "data.aws_instance.foo", "security_groups.#", "0"), 261 resource.TestCheckResourceAttr( 262 "data.aws_instance.foo", "vpc_security_group_ids.#", "1"), 263 ), 264 }, 265 }, 266 }) 267 } 268 269 // Lookup based on InstanceID 270 const testAccInstanceDataSourceConfig = ` 271 resource "aws_instance" "web" { 272 # us-west-2 273 ami = "ami-4fccb37f" 274 instance_type = "m1.small" 275 tags { 276 Name = "HelloWorld" 277 } 278 } 279 280 data "aws_instance" "web-instance" { 281 filter { 282 name = "instance-id" 283 values = ["${aws_instance.web.id}"] 284 } 285 } 286 ` 287 288 // Use the tags attribute to filter 289 func testAccInstanceDataSourceConfig_Tags(rInt int) string { 290 return fmt.Sprintf(` 291 resource "aws_instance" "web" { 292 # us-west-2 293 ami = "ami-4fccb37f" 294 instance_type = "m1.small" 295 tags { 296 Name = "HelloWorld" 297 TestSeed = "%d" 298 } 299 } 300 301 data "aws_instance" "web-instance" { 302 instance_tags { 303 Name = "${aws_instance.web.tags["Name"]}" 304 TestSeed = "%d" 305 } 306 } 307 `, rInt, rInt) 308 } 309 310 // filter on tag, populate more attributes 311 const testAccInstanceDataSourceConfig_AzUserData = ` 312 resource "aws_instance" "foo" { 313 # us-west-2 314 ami = "ami-4fccb37f" 315 availability_zone = "us-west-2a" 316 317 instance_type = "m1.small" 318 user_data = "foo:-with-character's" 319 tags { 320 TFAccTest = "YesThisIsATest" 321 } 322 } 323 324 data "aws_instance" "foo" { 325 instance_id = "${aws_instance.foo.id}" 326 } 327 ` 328 329 // GP2IopsDevice 330 const testAccInstanceDataSourceConfig_gp2IopsDevice = ` 331 resource "aws_instance" "foo" { 332 # us-west-2 333 ami = "ami-55a7ea65" 334 instance_type = "m3.medium" 335 root_block_device { 336 volume_type = "gp2" 337 volume_size = 11 338 } 339 } 340 341 data "aws_instance" "foo" { 342 instance_id = "${aws_instance.foo.id}" 343 } 344 ` 345 346 // Block Device 347 const testAccInstanceDataSourceConfig_blockDevices = ` 348 resource "aws_instance" "foo" { 349 # us-west-2 350 ami = "ami-55a7ea65" 351 instance_type = "m3.medium" 352 353 root_block_device { 354 volume_type = "gp2" 355 volume_size = 11 356 } 357 ebs_block_device { 358 device_name = "/dev/sdb" 359 volume_size = 9 360 } 361 ebs_block_device { 362 device_name = "/dev/sdc" 363 volume_size = 10 364 volume_type = "io1" 365 iops = 100 366 } 367 368 # Encrypted ebs block device 369 ebs_block_device { 370 device_name = "/dev/sdd" 371 volume_size = 12 372 encrypted = true 373 } 374 375 ephemeral_block_device { 376 device_name = "/dev/sde" 377 virtual_name = "ephemeral0" 378 } 379 } 380 381 data "aws_instance" "foo" { 382 instance_id = "${aws_instance.foo.id}" 383 } 384 ` 385 386 const testAccInstanceDataSourceConfig_rootInstanceStore = ` 387 resource "aws_instance" "foo" { 388 ami = "ami-44c36524" 389 instance_type = "m3.medium" 390 } 391 data "aws_instance" "foo" { 392 instance_id = "${aws_instance.foo.id}" 393 } 394 ` 395 396 const testAccInstanceDataSourceConfig_privateIP = ` 397 resource "aws_vpc" "foo" { 398 cidr_block = "10.1.0.0/16" 399 } 400 401 resource "aws_subnet" "foo" { 402 cidr_block = "10.1.1.0/24" 403 vpc_id = "${aws_vpc.foo.id}" 404 } 405 406 resource "aws_instance" "foo" { 407 ami = "ami-c5eabbf5" 408 instance_type = "t2.micro" 409 subnet_id = "${aws_subnet.foo.id}" 410 private_ip = "10.1.1.42" 411 } 412 413 data "aws_instance" "foo" { 414 instance_id = "${aws_instance.foo.id}" 415 } 416 ` 417 418 func testAccInstanceDataSourceConfig_keyPair(rName string) string { 419 return fmt.Sprintf(` 420 provider "aws" { 421 region = "us-east-1" 422 } 423 424 resource "aws_key_pair" "debugging" { 425 key_name = "%s" 426 public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 phodgson@thoughtworks.com" 427 } 428 429 resource "aws_instance" "foo" { 430 ami = "ami-408c7f28" 431 instance_type = "t1.micro" 432 key_name = "${aws_key_pair.debugging.key_name}" 433 tags { 434 Name = "testAccInstanceDataSourceConfigKeyPair_TestAMI" 435 } 436 } 437 438 data "aws_instance" "foo" { 439 filter { 440 name = "tag:Name" 441 values = ["testAccInstanceDataSourceConfigKeyPair_TestAMI"] 442 } 443 filter { 444 name = "key-name" 445 values = ["${aws_instance.foo.key_name}"] 446 } 447 }`, rName) 448 } 449 450 const testAccInstanceDataSourceConfig_VPC = ` 451 resource "aws_vpc" "foo" { 452 cidr_block = "10.1.0.0/16" 453 } 454 455 resource "aws_subnet" "foo" { 456 cidr_block = "10.1.1.0/24" 457 vpc_id = "${aws_vpc.foo.id}" 458 } 459 460 resource "aws_instance" "foo" { 461 # us-west-2 462 ami = "ami-4fccb37f" 463 instance_type = "m1.small" 464 subnet_id = "${aws_subnet.foo.id}" 465 associate_public_ip_address = true 466 tenancy = "dedicated" 467 # pre-encoded base64 data 468 user_data = "3dc39dda39be1205215e776bad998da361a5955d" 469 } 470 471 data "aws_instance" "foo" { 472 instance_id = "${aws_instance.foo.id}" 473 } 474 ` 475 476 func testAccInstanceDataSourceConfig_SecurityGroups(rInt int) string { 477 return fmt.Sprintf(` 478 provider "aws" { 479 region = "us-east-1" 480 } 481 482 resource "aws_security_group" "tf_test_foo" { 483 name = "tf_test_foo-%d" 484 description = "foo" 485 486 ingress { 487 protocol = "icmp" 488 from_port = -1 489 to_port = -1 490 cidr_blocks = ["0.0.0.0/0"] 491 } 492 } 493 494 resource "aws_instance" "foo" { 495 ami = "ami-408c7f28" 496 instance_type = "m1.small" 497 security_groups = ["${aws_security_group.tf_test_foo.name}"] 498 user_data = "foo:-with-character's" 499 } 500 501 data "aws_instance" "foo" { 502 instance_id = "${aws_instance.foo.id}" 503 } 504 `, rInt) 505 } 506 507 const testAccInstanceDataSourceConfig_VPCSecurityGroups = ` 508 resource "aws_internet_gateway" "gw" { 509 vpc_id = "${aws_vpc.foo.id}" 510 } 511 512 resource "aws_vpc" "foo" { 513 cidr_block = "10.1.0.0/16" 514 tags { 515 Name = "tf-network-test" 516 } 517 } 518 519 resource "aws_security_group" "tf_test_foo" { 520 name = "tf_test_foo" 521 description = "foo" 522 vpc_id="${aws_vpc.foo.id}" 523 524 ingress { 525 protocol = "icmp" 526 from_port = -1 527 to_port = -1 528 cidr_blocks = ["0.0.0.0/0"] 529 } 530 } 531 532 resource "aws_subnet" "foo" { 533 cidr_block = "10.1.1.0/24" 534 vpc_id = "${aws_vpc.foo.id}" 535 } 536 537 resource "aws_instance" "foo_instance" { 538 ami = "ami-21f78e11" 539 instance_type = "t1.micro" 540 vpc_security_group_ids = ["${aws_security_group.tf_test_foo.id}"] 541 subnet_id = "${aws_subnet.foo.id}" 542 depends_on = ["aws_internet_gateway.gw"] 543 } 544 545 data "aws_instance" "foo" { 546 instance_id = "${aws_instance.foo_instance.id}" 547 } 548 `