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  `