Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 1 commit into from
Jan 18, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions builtin/providers/aws/resource_aws_db_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,13 @@ func resourceAwsDbInstance() *schema.Resource {
ValidateFunc: validateArn,
},

"timezone": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},

"tags": tagsSchema(),
},
}
Expand Down Expand Up @@ -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))
}
Expand Down Expand Up @@ -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)
}
Expand Down
190 changes: 190 additions & 0 deletions builtin/providers/aws/resource_aws_db_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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 {

Expand Down Expand Up @@ -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}"
}
`
2 changes: 2 additions & 0 deletions website/source/docs/providers/aws/r/db_instance.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down