diff --git a/README.md b/README.md index a258836..2e5388d 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ module "memorystore" { | enable\_apis | Flag for enabling redis.googleapis.com in your project | `bool` | `true` | no | | labels | The resource labels to represent user provided metadata. | `map(string)` | `null` | no | | location\_id | The zone where the instance will be provisioned. If not provided, the service will choose a zone for the instance. For STANDARD\_HA tier, instances will be created across two zones for protection against zonal failures. If [alternativeLocationId] is also provided, it must be different from [locationId]. | `string` | `null` | no | +| maintenance\_policy | The maintenance policy for an instance. |
object({
day = string
start_time = object({
hours = number
minutes = number
seconds = number
nanos = number
})
})
| `null` | no | | memory\_size\_gb | Redis memory size in GiB. Defaulted to 1 GiB | `number` | `1` | no | | name | The ID of the instance or a fully qualified identifier for the instance. | `string` | n/a | yes | | project | The ID of the project in which the resource belongs to. | `string` | n/a | yes | diff --git a/examples/memcache/versions.tf b/examples/memcache/versions.tf index 242d77b..99efe52 100644 --- a/examples/memcache/versions.tf +++ b/examples/memcache/versions.tf @@ -19,11 +19,11 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "~> 3.52" + version = "~> 4.23.0" } google-beta = { source = "hashicorp/google-beta" - version = "~> 3.52" + version = "~> 4.23.0" } } } diff --git a/main.tf b/main.tf index 22216a6..694cfb0 100644 --- a/main.tf +++ b/main.tf @@ -41,6 +41,21 @@ resource "google_redis_instance" "default" { auth_enabled = var.auth_enabled transit_encryption_mode = var.transit_encryption_mode + + dynamic "maintenance_policy" { + for_each = var.maintenance_policy != null ? [var.maintenance_policy] : [] + content { + weekly_maintenance_window { + day = maintenance_policy.value["day"] + start_time { + hours = maintenance_policy.value["start_time"]["hours"] + minutes = maintenance_policy.value["start_time"]["minutes"] + seconds = maintenance_policy.value["start_time"]["seconds"] + nanos = maintenance_policy.value["start_time"]["nanos"] + } + } + } + } } module "enable_apis" { diff --git a/modules/memcache/README.md b/modules/memcache/README.md index 80cf97c..40e3c58 100644 --- a/modules/memcache/README.md +++ b/modules/memcache/README.md @@ -12,6 +12,7 @@ A Terraform module for creating a fully functional Google Memorystore (memcache) | display\_name | An arbitrary and optional user-provided name for the instance. | `string` | `null` | no | | enable\_apis | Flag for enabling memcache.googleapis.com in your project | `bool` | `true` | no | | labels | The resource labels to represent user provided metadata. | `map(string)` | `{}` | no | +| maintenance\_policy | The maintenance policy for an instance. |
object({
day = string
duration = number
start_time = object({
hours = number
minutes = number
seconds = number
nanos = number
})
})
| `null` | no | | memory\_size\_mb | Memcache memory size in MiB. Defaulted to 1024 | `number` | `1024` | no | | name | The ID of the instance or a fully qualified identifier for the instance. | `string` | n/a | yes | | node\_count | Number of nodes in the memcache instance. | `number` | `1` | no | diff --git a/modules/memcache/main.tf b/modules/memcache/main.tf index 80d1ca9..f0ba45b 100644 --- a/modules/memcache/main.tf +++ b/modules/memcache/main.tf @@ -38,6 +38,22 @@ resource "google_memcache_instance" "self" { } } + dynamic "maintenance_policy" { + for_each = var.maintenance_policy != null ? [var.maintenance_policy] : [] + content { + weekly_maintenance_window { + day = maintenance_policy.value["day"] + duration = maintenance_policy.value["duration"] + start_time { + hours = maintenance_policy.value["start_time"]["hours"] + minutes = maintenance_policy.value["start_time"]["minutes"] + seconds = maintenance_policy.value["start_time"]["seconds"] + nanos = maintenance_policy.value["start_time"]["nanos"] + } + } + } + } + } diff --git a/modules/memcache/variables.tf b/modules/memcache/variables.tf index f2bbfad..8642132 100644 --- a/modules/memcache/variables.tf +++ b/modules/memcache/variables.tf @@ -88,3 +88,19 @@ variable "params" { type = map(string) default = null } + +variable "maintenance_policy" { + description = "The maintenance policy for an instance." + # type = object(any) + type = object({ + day = string + duration = number + start_time = object({ + hours = number + minutes = number + seconds = number + nanos = number + }) + }) + default = null +} diff --git a/modules/memcache/versions.tf b/modules/memcache/versions.tf index 2f272fc..2f705eb 100644 --- a/modules/memcache/versions.tf +++ b/modules/memcache/versions.tf @@ -20,11 +20,11 @@ terraform { google = { source = "hashicorp/google" - version = ">= 3.53, < 5.0" + version = ">= 4.23.0, < 5.0" } google-beta = { source = "hashicorp/google-beta" - version = ">= 3.53, < 5.0" + version = ">= 4.23.0, < 5.0" } } diff --git a/variables.tf b/variables.tf index e7b5603..bcd2ab4 100644 --- a/variables.tf +++ b/variables.tf @@ -125,3 +125,18 @@ variable "transit_encryption_mode" { type = string default = "SERVER_AUTHENTICATION" } + +variable "maintenance_policy" { + description = "The maintenance policy for an instance." + # type = object(any) + type = object({ + day = string + start_time = object({ + hours = number + minutes = number + seconds = number + nanos = number + }) + }) + default = null +} diff --git a/versions.tf b/versions.tf index 1fdc4ec..0b49a12 100644 --- a/versions.tf +++ b/versions.tf @@ -20,7 +20,7 @@ terraform { google = { source = "hashicorp/google" - version = ">= 3.53, < 5.0" + version = ">= 4.10.0, < 5.0" } }