|
|
|
|
@ -19,6 +19,7 @@ import (
|
|
|
|
|
|
|
|
|
|
func TestAccAWSOpsworksStackNoVpc(t *testing.T) {
|
|
|
|
|
stackName := fmt.Sprintf("tf-opsworks-acc-%d", acctest.RandInt())
|
|
|
|
|
var opsstack opsworks.Stack
|
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
|
|
|
Providers: testAccProviders,
|
|
|
|
|
@ -26,7 +27,14 @@ func TestAccAWSOpsworksStackNoVpc(t *testing.T) {
|
|
|
|
|
Steps: []resource.TestStep{
|
|
|
|
|
resource.TestStep{
|
|
|
|
|
Config: testAccAwsOpsworksStackConfigNoVpcCreate(stackName),
|
|
|
|
|
Check: testAccAwsOpsworksStackCheckResourceAttrsCreate("us-east-1a", stackName),
|
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
|
testAccCheckAWSOpsworksStackExists(
|
|
|
|
|
"aws_opsworks_stack.tf-acc", false, &opsstack),
|
|
|
|
|
testAccCheckAWSOpsworksCreateStackAttributes(
|
|
|
|
|
&opsstack, "us-east-1a", stackName),
|
|
|
|
|
testAccAwsOpsworksStackCheckResourceAttrsCreate(
|
|
|
|
|
"us-east-1a", stackName),
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
// resource.TestStep{
|
|
|
|
|
// Config: testAccAWSOpsworksStackConfigNoVpcUpdate(stackName),
|
|
|
|
|
@ -38,6 +46,7 @@ func TestAccAWSOpsworksStackNoVpc(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
func TestAccAWSOpsworksStackVpc(t *testing.T) {
|
|
|
|
|
stackName := fmt.Sprintf("tf-opsworks-acc-%d", acctest.RandInt())
|
|
|
|
|
var opsstack opsworks.Stack
|
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
|
|
|
Providers: testAccProviders,
|
|
|
|
|
@ -45,13 +54,24 @@ func TestAccAWSOpsworksStackVpc(t *testing.T) {
|
|
|
|
|
Steps: []resource.TestStep{
|
|
|
|
|
resource.TestStep{
|
|
|
|
|
Config: testAccAwsOpsworksStackConfigVpcCreate(stackName),
|
|
|
|
|
Check: testAccAwsOpsworksStackCheckResourceAttrsCreate("us-west-2a", stackName),
|
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
|
testAccCheckAWSOpsworksStackExists(
|
|
|
|
|
"aws_opsworks_stack.tf-acc", true, &opsstack),
|
|
|
|
|
testAccCheckAWSOpsworksCreateStackAttributes(
|
|
|
|
|
&opsstack, "us-west-2a", stackName),
|
|
|
|
|
testAccAwsOpsworksStackCheckResourceAttrsCreate(
|
|
|
|
|
"us-west-2a", stackName),
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
resource.TestStep{
|
|
|
|
|
Config: testAccAWSOpsworksStackConfigVpcUpdate(stackName),
|
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
|
testAccAwsOpsworksStackCheckResourceAttrsUpdate("us-west-2a", stackName),
|
|
|
|
|
testAccAwsOpsworksCheckVpc,
|
|
|
|
|
testAccCheckAWSOpsworksStackExists(
|
|
|
|
|
"aws_opsworks_stack.tf-acc", true, &opsstack),
|
|
|
|
|
testAccCheckAWSOpsworksUpdateStackAttributes(
|
|
|
|
|
&opsstack, "us-west-2a", stackName),
|
|
|
|
|
testAccAwsOpsworksStackCheckResourceAttrsUpdate(
|
|
|
|
|
"us-west-2a", stackName),
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
@ -167,35 +187,132 @@ func testAccAwsOpsworksStackCheckResourceAttrsUpdate(zone, stackName string) res
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testAccAwsOpsworksCheckVpc(s *terraform.State) error {
|
|
|
|
|
rs, ok := s.RootModule().Resources["aws_opsworks_stack.tf-acc"]
|
|
|
|
|
if !ok {
|
|
|
|
|
return fmt.Errorf("Not found: %s", "aws_opsworks_stack.tf-acc")
|
|
|
|
|
}
|
|
|
|
|
if rs.Primary.ID == "" {
|
|
|
|
|
return fmt.Errorf("No ID is set")
|
|
|
|
|
}
|
|
|
|
|
func testAccCheckAWSOpsworksStackExists(
|
|
|
|
|
n string, vpc bool, opsstack *opsworks.Stack) resource.TestCheckFunc {
|
|
|
|
|
return func(s *terraform.State) error {
|
|
|
|
|
rs, ok := s.RootModule().Resources[n]
|
|
|
|
|
if !ok {
|
|
|
|
|
return fmt.Errorf("Not found: %s", n)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p := rs.Primary
|
|
|
|
|
if rs.Primary.ID == "" {
|
|
|
|
|
return fmt.Errorf("No ID is set")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
opsworksconn := testAccProvider.Meta().(*AWSClient).opsworksconn
|
|
|
|
|
describeOpts := &opsworks.DescribeStacksInput{
|
|
|
|
|
StackIds: []*string{aws.String(p.ID)},
|
|
|
|
|
}
|
|
|
|
|
resp, err := opsworksconn.DescribeStacks(describeOpts)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
if len(resp.Stacks) == 0 {
|
|
|
|
|
return fmt.Errorf("No stack %s not found", p.ID)
|
|
|
|
|
conn := testAccProvider.Meta().(*AWSClient).opsworksconn
|
|
|
|
|
|
|
|
|
|
params := &opsworks.DescribeStacksInput{
|
|
|
|
|
StackIds: []*string{aws.String(rs.Primary.ID)},
|
|
|
|
|
}
|
|
|
|
|
resp, err := conn.DescribeStacks(params)
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if v := len(resp.Stacks); v != 1 {
|
|
|
|
|
return fmt.Errorf("Expected 1 response returned, got %d", v)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*opsstack = *resp.Stacks[0]
|
|
|
|
|
|
|
|
|
|
if vpc {
|
|
|
|
|
if rs.Primary.Attributes["vpc_id"] != *opsstack.VpcId {
|
|
|
|
|
return fmt.Errorf("VPCID Got %s, expected %s", *opsstack.VpcId, rs.Primary.Attributes["vpc_id"])
|
|
|
|
|
}
|
|
|
|
|
if rs.Primary.Attributes["default_subnet_id"] != *opsstack.DefaultSubnetId {
|
|
|
|
|
return fmt.Errorf("Default subnet Id Got %s, expected %s", *opsstack.DefaultSubnetId, rs.Primary.Attributes["default_subnet_id"])
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
if p.Attributes["vpc_id"] != *resp.Stacks[0].VpcId {
|
|
|
|
|
return fmt.Errorf("VPCID Got %s, expected %s", *resp.Stacks[0].VpcId, p.Attributes["vpc_id"])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testAccCheckAWSOpsworksCreateStackAttributes(
|
|
|
|
|
opsstack *opsworks.Stack, zone, stackName string) resource.TestCheckFunc {
|
|
|
|
|
return func(s *terraform.State) error {
|
|
|
|
|
if *opsstack.Name != stackName {
|
|
|
|
|
return fmt.Errorf("Unnexpected stackName: %s", *opsstack.Name)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.DefaultAvailabilityZone != zone {
|
|
|
|
|
return fmt.Errorf("Unnexpected DefaultAvailabilityZone: %s", *opsstack.DefaultAvailabilityZone)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.DefaultOs != "Amazon Linux 2014.09" {
|
|
|
|
|
return fmt.Errorf("Unnexpected stackName: %s", *opsstack.DefaultOs)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.DefaultRootDeviceType != "ebs" {
|
|
|
|
|
return fmt.Errorf("Unnexpected DefaultRootDeviceType: %s", *opsstack.DefaultRootDeviceType)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.CustomJson != `{"key": "value"}` {
|
|
|
|
|
return fmt.Errorf("Unnexpected CustomJson: %s", *opsstack.CustomJson)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.ConfigurationManager.Version != "11.10" {
|
|
|
|
|
return fmt.Errorf("Unnexpected Version: %s", *opsstack.ConfigurationManager.Version)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.UseOpsworksSecurityGroups {
|
|
|
|
|
return fmt.Errorf("Unnexpected UseOpsworksSecurityGroups: %s", *opsstack.UseOpsworksSecurityGroups)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
if p.Attributes["default_subnet_id"] != *resp.Stacks[0].DefaultSubnetId {
|
|
|
|
|
return fmt.Errorf("VPCID Got %s, expected %s", *resp.Stacks[0].DefaultSubnetId, p.Attributes["default_subnet_id"])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testAccCheckAWSOpsworksUpdateStackAttributes(
|
|
|
|
|
opsstack *opsworks.Stack, zone, stackName string) resource.TestCheckFunc {
|
|
|
|
|
return func(s *terraform.State) error {
|
|
|
|
|
if *opsstack.Name != stackName {
|
|
|
|
|
return fmt.Errorf("Unnexpected stackName: %s", *opsstack.Name)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.DefaultAvailabilityZone != zone {
|
|
|
|
|
return fmt.Errorf("Unnexpected DefaultAvailabilityZone: %s", *opsstack.DefaultAvailabilityZone)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.DefaultOs != "Amazon Linux 2014.09" {
|
|
|
|
|
return fmt.Errorf("Unnexpected stackName: %s", *opsstack.DefaultOs)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.DefaultRootDeviceType != "ebs" {
|
|
|
|
|
return fmt.Errorf("Unnexpected DefaultRootDeviceType: %s", *opsstack.DefaultRootDeviceType)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.CustomJson != `{"key": "value"}` {
|
|
|
|
|
return fmt.Errorf("Unnexpected CustomJson: %s", *opsstack.CustomJson)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.ConfigurationManager.Version != "11.10" {
|
|
|
|
|
return fmt.Errorf("Unnexpected Version: %s", *opsstack.ConfigurationManager.Version)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if !*opsstack.UseCustomCookbooks {
|
|
|
|
|
return fmt.Errorf("Unnexpected UseCustomCookbooks: %s", *opsstack.UseCustomCookbooks)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if !*opsstack.ChefConfiguration.ManageBerkshelf {
|
|
|
|
|
return fmt.Errorf("Unnexpected ManageBerkshelf: %s", *opsstack.ChefConfiguration.ManageBerkshelf)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.CustomCookbooksSource.Type != "git" {
|
|
|
|
|
return fmt.Errorf("Unnexpected *opsstack.CustomCookbooksSource.Type: %s", *opsstack.CustomCookbooksSource.Type)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.CustomCookbooksSource.Revision != "master" {
|
|
|
|
|
return fmt.Errorf("Unnexpected *opsstack.CustomCookbooksSource.Type: %s", *opsstack.CustomCookbooksSource.Revision)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *opsstack.CustomCookbooksSource.Url != "https://github.com/aws/opsworks-example-cookbooks.git" {
|
|
|
|
|
return fmt.Errorf("Unnexpected *opsstack.CustomCookbooksSource.Type: %s", *opsstack.CustomCookbooksSource.Url)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testAccCheckAwsOpsworksStackDestroy(s *terraform.State) error {
|
|
|
|
|
|