foreach - 使用 Terraform 如何为每个数据库以及每个命名空间创建一个用户?
问题描述
我的 Terraform 脚本当前为一组命名空间(一个或多个)创建 2 个数据库。我现在需要为每个相应的数据库创建一个用户,但我无法找出正确的方法来执行此操作。
这是我目前的...
variable "namespaces" {
type = set(string)
}
variable "databases" {
type = set("server", "analyzer")
}
resource "postgresql_database" "server_databases" {
for_each = toset(var.namespaces)
name = "server_${each.key}"
}
resource "postgresql_database" "analyzer_databases" {
for_each = toset(var.namespaces)
name = "analyzer_${each.key}"
}
resource "random_password" "postgres_password" {
length = 12
}
resource "postgresql_role" "read_only_user" {
name = "readonlyuser"
login = true
password = random_password.postgres_password.result
skip_reassign_owned = true
}
resource "postgresql_grant" "readonly_tables" {
depends_on = [postgresql_database.server_databases, postgresql_database.analyzer_databases]
for_each = toset(var.namespaces)
database = "server_${each.key}"
object_type = "table"
privileges = ["SELECT"]
role = "readonlyuser"
schema = "public"
}
这里的问题是database = "server_${each.key}"
只会在每个命名空间中为我的服务器数据库创建一个用户。我很确定我需要一个嵌套的 for_each 但我不知道如何实现这一点。
我认为甚至应该可以循环postgresql_database
资源而不是定义2个单独的资源
解决方案
推荐阅读
- javascript - 从解析的 XML 获取数据到 JSON
- java - Quarkus 使用 -Dnative-image.docker-build=true 构建本机可执行 NoSuchFileException
- python - 函数可以在其定义中使用不同的参数调用自身吗?
- python - ODBC SQL Server 驱动程序 - 连接正忙于处理另一个 hstmt (0) (SQLExecDirectW) 的结果
- opengl - OpenGL 固定管道渲染颜色 GL_FLOAT 不够精确
- django - 如何使用 Django rest api 更新(放置/发布请求)相关字段?
- java - Proguard 无法通过 maven 插件混淆 jar
- php - ksor PHP和排序VB.Net之间相同结果的代码比较
- javascript - 展开和折叠手风琴时,图标不会相应地切换
- python-3.x - 如何读取多个文件然后连接:我具有检查文件是否存在并读取是否存在的功能,连接时面临问题