Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform-在数据源上循环并创建地图,将此地图传递给模块_Terraform_Terraform Provider Azure - Fatal编程技术网

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)}”
适用于数据源,但不适用于模块