Commit ea7760b5 authored by Jim Park's avatar Jim Park Committed by GitHub

make cluster-enabled mode a bit more automated (#59)

* feat: add ClusterEnabled: true default parameter (unless overwritten)

* fix: endpoint key changes when cluster mode enabled

* feat: set number_cache_clusters when in cluster_mode_enabled

* chore: terraform fmt
parent d27d632f
...@@ -182,7 +182,7 @@ Available targets: ...@@ -182,7 +182,7 @@ Available targets:
| cluster_mode_enabled | Flag to enable/disable creation of a native redis cluster. `automatic_failover_enabled` must be set to `true`. Only 1 `cluster_mode` block is allowed | bool | `false` | no | | cluster_mode_enabled | Flag to enable/disable creation of a native redis cluster. `automatic_failover_enabled` must be set to `true`. Only 1 `cluster_mode` block is allowed | bool | `false` | no |
| cluster_mode_num_node_groups | Number of node groups (shards) for this Redis replication group. Changing this number will trigger an online resizing operation before other settings modifications | number | `0` | no | | cluster_mode_num_node_groups | Number of node groups (shards) for this Redis replication group. Changing this number will trigger an online resizing operation before other settings modifications | number | `0` | no |
| cluster_mode_replicas_per_node_group | Number of replica nodes in each node group. Valid values are 0 to 5. Changing this number will force a new resource | number | `0` | no | | cluster_mode_replicas_per_node_group | Number of replica nodes in each node group. Valid values are 0 to 5. Changing this number will force a new resource | number | `0` | no |
| cluster_size | Number of nodes in cluster | number | `1` | no | | cluster_size | Number of nodes in cluster. *Ignored when `cluster_mode_enabled` == `true`* | number | `1` | no |
| delimiter | Delimiter between `name`, `namespace`, `stage` and `attributes` | string | `-` | no | | delimiter | Delimiter between `name`, `namespace`, `stage` and `attributes` | string | `-` | no |
| elasticache_subnet_group_name | Subnet group name for the ElastiCache instance | string | `` | no | | elasticache_subnet_group_name | Subnet group name for the ElastiCache instance | string | `` | no |
| enabled | Set to false to prevent the module from creating any resources | bool | `true` | no | | enabled | Set to false to prevent the module from creating any resources | bool | `true` | no |
...@@ -288,7 +288,7 @@ In general, PRs are welcome. We follow the typical "fork-and-pull" Git workflow. ...@@ -288,7 +288,7 @@ In general, PRs are welcome. We follow the typical "fork-and-pull" Git workflow.
## Copyright ## Copyright
Copyright © 2017-2019 [Cloud Posse, LLC](https://cpco.io/copyright) Copyright © 2017-2020 [Cloud Posse, LLC](https://cpco.io/copyright)
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
| cluster_mode_enabled | Flag to enable/disable creation of a native redis cluster. `automatic_failover_enabled` must be set to `true`. Only 1 `cluster_mode` block is allowed | bool | `false` | no | | cluster_mode_enabled | Flag to enable/disable creation of a native redis cluster. `automatic_failover_enabled` must be set to `true`. Only 1 `cluster_mode` block is allowed | bool | `false` | no |
| cluster_mode_num_node_groups | Number of node groups (shards) for this Redis replication group. Changing this number will trigger an online resizing operation before other settings modifications | number | `0` | no | | cluster_mode_num_node_groups | Number of node groups (shards) for this Redis replication group. Changing this number will trigger an online resizing operation before other settings modifications | number | `0` | no |
| cluster_mode_replicas_per_node_group | Number of replica nodes in each node group. Valid values are 0 to 5. Changing this number will force a new resource | number | `0` | no | | cluster_mode_replicas_per_node_group | Number of replica nodes in each node group. Valid values are 0 to 5. Changing this number will force a new resource | number | `0` | no |
| cluster_size | Number of nodes in cluster | number | `1` | no | | cluster_size | Number of nodes in cluster. *Ignored when `cluster_mode_enabled` == `true`* | number | `1` | no |
| delimiter | Delimiter between `name`, `namespace`, `stage` and `attributes` | string | `-` | no | | delimiter | Delimiter between `name`, `namespace`, `stage` and `attributes` | string | `-` | no |
| elasticache_subnet_group_name | Subnet group name for the ElastiCache instance | string | `` | no | | elasticache_subnet_group_name | Subnet group name for the ElastiCache instance | string | `` | no |
| enabled | Set to false to prevent the module from creating any resources | bool | `true` | no | | enabled | Set to false to prevent the module from creating any resources | bool | `true` | no |
......
...@@ -67,8 +67,10 @@ resource "aws_elasticache_parameter_group" "default" { ...@@ -67,8 +67,10 @@ resource "aws_elasticache_parameter_group" "default" {
name = module.label.id name = module.label.id
family = var.family family = var.family
dynamic "parameter" { dynamic "parameter" {
for_each = var.parameter for_each = var.cluster_mode_enabled ? concat([{ "name" = "cluster-enabled", "value" = "yes" }], var.parameter) : var.parameter
content { content {
name = parameter.value.name name = parameter.value.name
value = parameter.value.value value = parameter.value.value
...@@ -83,7 +85,7 @@ resource "aws_elasticache_replication_group" "default" { ...@@ -83,7 +85,7 @@ resource "aws_elasticache_replication_group" "default" {
replication_group_id = var.replication_group_id == "" ? module.label.id : var.replication_group_id replication_group_id = var.replication_group_id == "" ? module.label.id : var.replication_group_id
replication_group_description = module.label.id replication_group_description = module.label.id
node_type = var.instance_type node_type = var.instance_type
number_cache_clusters = var.cluster_size number_cache_clusters = var.cluster_mode_enabled ? (1 + var.cluster_mode_replicas_per_node_group) * var.cluster_mode_num_node_groups : var.cluster_size
port = var.port port = var.port
parameter_group_name = join("", aws_elasticache_parameter_group.default.*.name) parameter_group_name = join("", aws_elasticache_parameter_group.default.*.name)
availability_zones = slice(var.availability_zones, 0, var.cluster_size) availability_zones = slice(var.availability_zones, 0, var.cluster_size)
...@@ -107,6 +109,7 @@ resource "aws_elasticache_replication_group" "default" { ...@@ -107,6 +109,7 @@ resource "aws_elasticache_replication_group" "default" {
num_node_groups = var.cluster_mode_num_node_groups num_node_groups = var.cluster_mode_num_node_groups
} }
} }
} }
# #
...@@ -162,5 +165,5 @@ module "dns" { ...@@ -162,5 +165,5 @@ module "dns" {
name = var.name name = var.name
ttl = 60 ttl = 60
zone_id = var.zone_id zone_id = var.zone_id
records = [join("", aws_elasticache_replication_group.default.*.primary_endpoint_address)] records = var.cluster_mode_enabled ? [join("", aws_elasticache_replication_group.default.*.configuration_endpoint_address)] : [join("", aws_elasticache_replication_group.default.*.primary_endpoint_address)]
} }
...@@ -14,7 +14,7 @@ output "port" { ...@@ -14,7 +14,7 @@ output "port" {
} }
output "endpoint" { output "endpoint" {
value = join("", aws_elasticache_replication_group.default.*.primary_endpoint_address) value = var.cluster_mode_enabled ? join("", aws_elasticache_replication_group.default.*.configuration_endpoint_address) : join("", aws_elasticache_replication_group.default.*.primary_endpoint_address)
description = "Redis primary endpoint" description = "Redis primary endpoint"
} }
......
...@@ -71,7 +71,7 @@ variable "maintenance_window" { ...@@ -71,7 +71,7 @@ variable "maintenance_window" {
variable "cluster_size" { variable "cluster_size" {
type = number type = number
default = 1 default = 1
description = "Number of nodes in cluster" description = "Number of nodes in cluster. *Ignored when `cluster_mode_enabled` == `true`*"
} }
variable "port" { variable "port" {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment