Terraform-在数据源上循环并创建地图,将此地图传递给模块
我想使用Terraform-在数据源上循环并创建地图,将此地图传递给模块,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我想使用grafana secrets列表循环查看secrets数据源。 此输出应映射为模块内部的env_secrets。 现在,模块将使用这个映射作为vars={}(即使它是空的,也是它的通用模块),并将创建一个模板文件 以下是我的非工作用例,仅供说明: variable "grafana-secrets" { type = "list" default = ["GF_DATABASE_USER","GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET","GF_S
grafana secrets
列表循环查看secrets
数据源。
此输出应映射为模块内部的env_secrets
。
现在,模块将使用这个映射作为vars={}
(即使它是空的,也是它的通用模块),并将创建一个模板文件
以下是我的非工作用例,仅供说明:
variable "grafana-secrets" {
type = "list"
default = ["GF_DATABASE_USER","GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET","GF_SESSION_PROVIDER_CONFIG"]
}
data "azurerm_key_vault_secret" "secrets" {
count = "${length(var.grafana-secrets)}"
name = "${element(var.grafana-secrets, count.index)}"
vault_uri = "https://foobar.vault.azure.net/"
}
module "grafana" {
source = "modules/deployment"
env_secrets = {
"${element(var.grafana-secrets, count.index)}" = data.azurerm_key_vault_secret.secret.*.value
}
}
模块/部署:
data "template_file" "template" {
template = ".secrets"
vars = "${merge(
env_secrets,
map(
"dummy", "dummy"
)
)}"
}
看起来您唯一的问题是为
grafana
模块的env_secrets
变量创建映射。如果是这种情况,您可以使用zipmap
完成此操作,如感谢中所述。但我不确定是否可以将映射传递给模块。这:env_secrets=“${zipmap(element(var.grafana-secrets,count.index),element(data.azurerm\u key\u vault\u secrets.*.value,count.index))}”
不适用于MEI如果您检查链接的答案或答案中链接的文档,它会声明参数是列表而不是字符串。您需要提供列表作为参数,而不是其字符串元素。您是对的,vars=“${zipmap(var.grafana-secrets,data.azurerm\u key\u vault\u secrets.secrets.*.value)}”
适用于数据源,但不是针对模块。看起来您唯一的问题是为grafana
模块的env_secrets
变量创建映射。如果是这种情况,您可以使用zipmap
完成此操作,如感谢中所述。但我不确定是否可以将映射传递给模块。这:env_secrets=“${zipmap(element(var.grafana-secrets,count.index),element(data.azurerm\u key\u vault\u secrets.*.value,count.index))}”
不适用于MEI如果您检查链接的答案或答案中链接的文档,它会声明参数是列表而不是字符串。您需要提供列表作为参数,而不是它们的字符串元素。您是对的,vars=“${zipmap(var.grafana-secrets,data.azurerm\u key\u vault\u secrets.secrets.*.value)}”
适用于数据源,但不适用于模块