mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-20 11:48:24 -06:00
Several of the arguments were optional, and if omitted, they are calculated. Mark them as such in the schema to avoid triggering an update. Go back to storing the password in the state file. Without doing so, there's no way for Terraform to know the password has changed. It should be hashed, but then interpolating the password yields a hash instead of the password. Make the `name` parameter optional. It's not required in any engine, and in some (MS SQL Server) it's not allowed at all. Drop the `skip_final_snapshot` argument. If `final_snapshot_identifier` isn't specified, then don't make a final snapshot. As things were, it was possible to create a resource with neither of these arguments specified which would later fail when it was to be deleted since the RDS API requires exactly one of the two. Resolves issue #689.
164 lines
4.0 KiB
Go
164 lines
4.0 KiB
Go
package aws
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/terraform/helper/resource"
|
|
"github.com/hashicorp/terraform/terraform"
|
|
"github.com/mitchellh/goamz/rds"
|
|
)
|
|
|
|
func TestAccAWSDBInstance(t *testing.T) {
|
|
var v rds.DBInstance
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
Providers: testAccProviders,
|
|
CheckDestroy: testAccCheckAWSDBInstanceDestroy,
|
|
Steps: []resource.TestStep{
|
|
resource.TestStep{
|
|
Config: testAccAWSDBInstanceConfig,
|
|
Check: resource.ComposeTestCheckFunc(
|
|
testAccCheckAWSDBInstanceExists("aws_db_instance.bar", &v),
|
|
testAccCheckAWSDBInstanceAttributes(&v),
|
|
resource.TestCheckResourceAttr(
|
|
"aws_db_instance.bar", "identifier", "foobarbaz-test-terraform"),
|
|
resource.TestCheckResourceAttr(
|
|
"aws_db_instance.bar", "allocated_storage", "10"),
|
|
resource.TestCheckResourceAttr(
|
|
"aws_db_instance.bar", "engine", "mysql"),
|
|
resource.TestCheckResourceAttr(
|
|
"aws_db_instance.bar", "engine_version", "5.6.21"),
|
|
resource.TestCheckResourceAttr(
|
|
"aws_db_instance.bar", "instance_class", "db.t1.micro"),
|
|
resource.TestCheckResourceAttr(
|
|
"aws_db_instance.bar", "name", "baz"),
|
|
resource.TestCheckResourceAttr(
|
|
// Shouldn't save password to state
|
|
"aws_db_instance.bar", "password", ""),
|
|
resource.TestCheckResourceAttr(
|
|
"aws_db_instance.bar", "username", "foo"),
|
|
resource.TestCheckResourceAttr(
|
|
"aws_db_instance.bar", "security_group_names.3322503515", "secfoobarbaz-test-terraform"),
|
|
resource.TestCheckResourceAttr(
|
|
"aws_db_instance.bar", "parameter_group_name", "default.mysql5.6"),
|
|
),
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
func testAccCheckAWSDBInstanceDestroy(s *terraform.State) error {
|
|
conn := testAccProvider.Meta().(*AWSClient).rdsconn
|
|
|
|
for _, rs := range s.RootModule().Resources {
|
|
if rs.Type != "aws_db_instance" {
|
|
continue
|
|
}
|
|
|
|
// Try to find the Group
|
|
resp, err := conn.DescribeDBInstances(
|
|
&rds.DescribeDBInstances{
|
|
DBInstanceIdentifier: rs.Primary.ID,
|
|
})
|
|
|
|
if err == nil {
|
|
if len(resp.DBInstances) != 0 &&
|
|
resp.DBInstances[0].DBInstanceIdentifier == rs.Primary.ID {
|
|
return fmt.Errorf("DB Instance still exists")
|
|
}
|
|
}
|
|
|
|
// Verify the error
|
|
newerr, ok := err.(*rds.Error)
|
|
if !ok {
|
|
return err
|
|
}
|
|
if newerr.Code != "InvalidDBInstance.NotFound" {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func testAccCheckAWSDBInstanceAttributes(v *rds.DBInstance) resource.TestCheckFunc {
|
|
return func(s *terraform.State) error {
|
|
|
|
if len(v.DBSecurityGroupNames) == 0 {
|
|
return fmt.Errorf("no sec names: %#v", v.DBSecurityGroupNames)
|
|
}
|
|
|
|
if v.Engine != "mysql" {
|
|
return fmt.Errorf("bad engine: %#v", v.Engine)
|
|
}
|
|
|
|
if v.EngineVersion != "5.6.21" {
|
|
return fmt.Errorf("bad engine_version: %#v", v.EngineVersion)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func testAccCheckAWSDBInstanceExists(n string, v *rds.DBInstance) resource.TestCheckFunc {
|
|
return func(s *terraform.State) error {
|
|
rs, ok := s.RootModule().Resources[n]
|
|
if !ok {
|
|
return fmt.Errorf("Not found: %s", n)
|
|
}
|
|
|
|
if rs.Primary.ID == "" {
|
|
return fmt.Errorf("No DB Instance ID is set")
|
|
}
|
|
|
|
conn := testAccProvider.Meta().(*AWSClient).rdsconn
|
|
|
|
opts := rds.DescribeDBInstances{
|
|
DBInstanceIdentifier: rs.Primary.ID,
|
|
}
|
|
|
|
resp, err := conn.DescribeDBInstances(&opts)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(resp.DBInstances) != 1 ||
|
|
resp.DBInstances[0].DBInstanceIdentifier != rs.Primary.ID {
|
|
return fmt.Errorf("DB Instance not found")
|
|
}
|
|
|
|
*v = resp.DBInstances[0]
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
const testAccAWSDBInstanceConfig = `
|
|
resource "aws_db_security_group" "bar" {
|
|
name = "secfoobarbaz-test-terraform"
|
|
description = "just cuz"
|
|
|
|
ingress {
|
|
cidr = "10.0.0.1/24"
|
|
}
|
|
}
|
|
|
|
resource "aws_db_instance" "bar" {
|
|
identifier = "foobarbaz-test-terraform"
|
|
|
|
allocated_storage = 10
|
|
engine = "mysql"
|
|
engine_version = "5.6.21"
|
|
instance_class = "db.t1.micro"
|
|
name = "baz"
|
|
password = "barbarbarbar"
|
|
username = "foo"
|
|
|
|
security_group_names = ["${aws_db_security_group.bar.name}"]
|
|
parameter_group_name = "default.mysql5.6"
|
|
}
|
|
`
|