terraform-contour-mirror/modules/yc-valkey-user/main.tf

57 lines
1.9 KiB
HCL

locals {
valkey_users_map = {
for valkey_user in var.valkey_users : "${valkey_user.cluster_id}:${valkey_user.user.name}" => valkey_user
}
valkey_user_permissions = {
for key, valkey_user in local.valkey_users_map : key => merge(
try(valkey_user.permissions.commands, null) != null ? {
commands = valkey_user.permissions.commands
} : {},
try(valkey_user.permissions.categories, null) != null ? {
categories = valkey_user.permissions.categories
} : {},
try(valkey_user.permissions.patterns, null) != null ? {
patterns = valkey_user.permissions.patterns
} : {},
try(valkey_user.permissions.pub_sub_channels, try(valkey_user.permissions.pubSubChannels, null)) != null ? {
pub_sub_channels = try(valkey_user.permissions.pub_sub_channels, valkey_user.permissions.pubSubChannels)
} : {},
try(valkey_user.permissions.sanitize_payload, try(valkey_user.permissions.sanitizePayload, null)) != null ? {
sanitize_payload = try(valkey_user.permissions.sanitize_payload, valkey_user.permissions.sanitizePayload)
} : {},
try(valkey_user.permissions.databases, null) != null ? {
databases = valkey_user.permissions.databases
} : {}
)
}
}
resource "random_password" "user_password" {
for_each = local.valkey_users_map
length = try(each.value.user.password_length, 32)
special = try(each.value.user.password_special, false)
upper = true
lower = true
numeric = true
lifecycle {
ignore_changes = all
}
}
resource "yandex_mdb_redis_user" "this" {
for_each = local.valkey_users_map
cluster_id = each.value.cluster_id
name = each.value.user.name
passwords = [random_password.user_password[each.key].result]
enabled = try(each.value.user.enabled, true)
permissions = local.valkey_user_permissions[each.key]
lifecycle {
ignore_changes = [passwords]
}
}