provider/aws: Add support for setting MSSQL Timezone in aws_db_instance

This commit is contained in:
clint shryock 2017-01-17 16:43:53 -06:00
parent 4198a1fb4d
commit 549fd22c87
3 changed files with 205 additions and 0 deletions

View File

@ -313,6 +313,13 @@ func resourceAwsDbInstance() *schema.Resource {
ValidateFunc: validateArn,
},
"timezone": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},
"tags": tagsSchema(),
},
}
@ -529,6 +536,10 @@ func resourceAwsDbInstanceCreate(d *schema.ResourceData, meta interface{}) error
opts.CharacterSetName = aws.String(attr.(string))
}
if attr, ok := d.GetOk("timezone"); ok {
opts.Timezone = aws.String(attr.(string))
}
if attr, ok := d.GetOk("maintenance_window"); ok {
opts.PreferredMaintenanceWindow = aws.String(attr.(string))
}
@ -679,6 +690,8 @@ func resourceAwsDbInstanceRead(d *schema.ResourceData, meta interface{}) error {
d.Set("character_set_name", v.CharacterSetName)
}
d.Set("timezone", v.Timezone)
if len(v.DBParameterGroups) > 0 {
d.Set("parameter_group_name", v.DBParameterGroups[0].DBParameterGroupName)
}

View File

@ -270,6 +270,41 @@ func TestAccAWSDBInstance_portUpdate(t *testing.T) {
})
}
func TestAccAWSDBInstance_MSSQL_TZ(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: testAccAWSDBMSSQL_timezone,
Check: resource.ComposeTestCheckFunc(
testAccCheckAWSDBInstanceExists("aws_db_instance.mssql", &v),
testAccCheckAWSDBInstanceAttributes_MSSQL(&v, ""),
resource.TestCheckResourceAttr(
"aws_db_instance.mssql", "allocated_storage", "20"),
resource.TestCheckResourceAttr(
"aws_db_instance.mssql", "engine", "sqlserver-ex"),
),
},
resource.TestStep{
Config: testAccAWSDBMSSQL_timezone_AKST,
Check: resource.ComposeTestCheckFunc(
testAccCheckAWSDBInstanceExists("aws_db_instance.mssql", &v),
testAccCheckAWSDBInstanceAttributes_MSSQL(&v, "Alaskan Standard Time"),
resource.TestCheckResourceAttr(
"aws_db_instance.mssql", "allocated_storage", "20"),
resource.TestCheckResourceAttr(
"aws_db_instance.mssql", "engine", "sqlserver-ex"),
),
},
},
})
}
func testAccCheckAWSDBInstanceDestroy(s *terraform.State) error {
conn := testAccProvider.Meta().(*AWSClient).rdsconn
@ -328,6 +363,26 @@ func testAccCheckAWSDBInstanceAttributes(v *rds.DBInstance) resource.TestCheckFu
}
}
func testAccCheckAWSDBInstanceAttributes_MSSQL(v *rds.DBInstance, tz string) resource.TestCheckFunc {
return func(s *terraform.State) error {
if *v.Engine != "sqlserver-ex" {
return fmt.Errorf("bad engine: %#v", *v.Engine)
}
rtz := ""
if v.Timezone != nil {
rtz = *v.Timezone
}
if tz != rtz {
return fmt.Errorf("Expected (%s) Timezone for MSSQL test, got (%s)", tz, rtz)
}
return nil
}
}
func testAccCheckAWSDBInstanceReplicaAttributes(source, replica *rds.DBInstance) resource.TestCheckFunc {
return func(s *terraform.State) error {
@ -923,3 +978,138 @@ resource "aws_db_instance" "bar" {
apply_immediately = true
}`, rName)
}
const testAccAWSDBMSSQL_timezone = `
provider "aws" {
region = "us-west-2"
}
resource "aws_vpc" "foo" {
cidr_block = "10.1.0.0/16"
enable_dns_hostnames = true
tags {
Name = "tf-rds-mssql-timezone-test"
}
}
resource "aws_db_subnet_group" "rds_one" {
name = "rds_one_db"
description = "db subnets for rds_one"
subnet_ids = ["${aws_subnet.main.id}", "${aws_subnet.other.id}"]
}
resource "aws_subnet" "main" {
vpc_id = "${aws_vpc.foo.id}"
availability_zone = "us-west-2a"
cidr_block = "10.1.1.0/24"
}
resource "aws_subnet" "other" {
vpc_id = "${aws_vpc.foo.id}"
availability_zone = "us-west-2b"
cidr_block = "10.1.2.0/24"
}
resource "aws_db_instance" "mssql" {
#identifier = "tf-test-mssql"
db_subnet_group_name = "${aws_db_subnet_group.rds_one.name}"
instance_class = "db.t2.micro"
allocated_storage = 20
username = "somecrazyusername"
password = "somecrazypassword"
engine = "sqlserver-ex"
backup_retention_period = 0
#publicly_accessible = true
vpc_security_group_ids = ["${aws_security_group.rds-mssql.id}"]
}
resource "aws_security_group" "rds-mssql" {
name = "tf-rds-mssql-test"
description = "TF Testing"
vpc_id = "${aws_vpc.foo.id}"
}
resource "aws_security_group_rule" "rds-mssql-1" {
type = "egress"
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
security_group_id = "${aws_security_group.rds-mssql.id}"
}
`
const testAccAWSDBMSSQL_timezone_AKST = `
provider "aws" {
region = "us-west-2"
}
resource "aws_vpc" "foo" {
cidr_block = "10.1.0.0/16"
enable_dns_hostnames = true
tags {
Name = "tf-rds-mssql-timezone-test"
}
}
resource "aws_db_subnet_group" "rds_one" {
name = "rds_one_db"
description = "db subnets for rds_one"
subnet_ids = ["${aws_subnet.main.id}", "${aws_subnet.other.id}"]
}
resource "aws_subnet" "main" {
vpc_id = "${aws_vpc.foo.id}"
availability_zone = "us-west-2a"
cidr_block = "10.1.1.0/24"
}
resource "aws_subnet" "other" {
vpc_id = "${aws_vpc.foo.id}"
availability_zone = "us-west-2b"
cidr_block = "10.1.2.0/24"
}
resource "aws_db_instance" "mssql" {
#identifier = "tf-test-mssql"
db_subnet_group_name = "${aws_db_subnet_group.rds_one.name}"
instance_class = "db.t2.micro"
allocated_storage = 20
username = "somecrazyusername"
password = "somecrazypassword"
engine = "sqlserver-ex"
backup_retention_period = 0
#publicly_accessible = true
vpc_security_group_ids = ["${aws_security_group.rds-mssql.id}"]
timezone = "Alaskan Standard Time"
}
resource "aws_security_group" "rds-mssql" {
name = "tf-rds-mssql-test"
description = "TF Testing"
vpc_id = "${aws_vpc.foo.id}"
}
resource "aws_security_group_rule" "rds-mssql-1" {
type = "egress"
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
security_group_id = "${aws_security_group.rds-mssql.id}"
}
`

View File

@ -109,6 +109,8 @@ what IAM permissions are needed to allow Enhanced Monitoring for RDS Instances.
* `character_set_name` - (Optional) The character set name to use for DB encoding in Oracle instances. This can't be changed.
[Oracle Character Sets Supported in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleCharacterSets.html)
* `tags` - (Optional) A mapping of tags to assign to the resource.
* `timezone` - (Optional) Time zone of the DB instance. `timezone` is currently only supported by Microsoft SQL Server.
The `timezone` can only be set on creation. See [MSSQL User Guide](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.TimeZone) for more information
~> **NOTE:** Removing the `replicate_source_db` attribute from an existing RDS
Replicate database managed by Terraform will promote the database to a fully