| # Copyright (c) HashiCorp, Inc. |
| # SPDX-License-Identifier: BUSL-1.1 |
| |
| // An arithmetic module for calculating inputs and outputs for various replication steps. |
| |
| // Get the first follower out of the hosts set |
| variable "follower_hosts" { |
| type = map(object({ |
| private_ip = string |
| public_ip = string |
| })) |
| default = {} |
| } |
| |
| output "follower_host_1" { |
| value = try(var.follower_hosts[0], null) |
| } |
| |
| output "follower_public_ip_1" { |
| value = try(var.follower_hosts[0].public_ip, null) |
| } |
| |
| output "follower_private_ip_1" { |
| value = try(var.follower_hosts[0].private_ip, null) |
| } |
| |
| output "follower_host_2" { |
| value = try(var.follower_hosts[1], null) |
| } |
| |
| output "follower_public_ip_2" { |
| value = try(var.follower_hosts[1].public_ip, null) |
| } |
| |
| output "follower_private_ip_2" { |
| value = try(var.follower_hosts[1].private_ip, null) |
| } |
| |
| // Calculate our remainder hosts after we've added and removed leader |
| variable "initial_hosts" { |
| type = map(object({ |
| private_ip = string |
| public_ip = string |
| })) |
| default = {} |
| } |
| |
| variable "initial_hosts_count" { |
| type = number |
| default = 0 |
| } |
| |
| variable "added_hosts" { |
| type = map(object({ |
| private_ip = string |
| public_ip = string |
| })) |
| default = {} |
| } |
| |
| variable "added_hosts_count" { |
| type = number |
| default = 0 |
| } |
| |
| variable "removed_primary_host" { |
| type = object({ |
| private_ip = string |
| public_ip = string |
| }) |
| default = null |
| } |
| |
| variable "removed_follower_host" { |
| type = object({ |
| private_ip = string |
| public_ip = string |
| }) |
| default = null |
| } |
| |
| locals { |
| remaining_hosts_count = max((var.initial_hosts_count + var.added_hosts_count - 2), 0) |
| indices = [for idx in range(local.remaining_hosts_count) : idx] |
| remaining_initial = setsubtract(values(var.initial_hosts), [var.removed_primary_host, var.removed_follower_host]) |
| remaining_hosts_list = tolist(setunion(values(var.added_hosts), local.remaining_initial)) |
| remaining_hosts = zipmap(local.indices, local.remaining_hosts_list) |
| } |
| |
| output "remaining_initial_count" { |
| value = length(local.remaining_initial) |
| } |
| |
| output "remaining_initial_hosts" { |
| value = local.remaining_initial |
| } |
| |
| output "remaining_hosts_count" { |
| value = local.remaining_hosts_count |
| } |
| |
| output "remaining_hosts" { |
| value = local.remaining_hosts |
| } |