使用变量和字符串的值从 Terraform 数据源中获取

using value of variable and string to fetch from terraform data source

我正在尝试使用 tf 数据源从 hashicorp 保险库中获取一些证书

这是保险库中证书路径的样子

serverA:
  dev-cert: <base64 encoded cert>
  qa-cert: <base64 encoded cert>
  test-cert: <base64 encoded cert>

此证书在其他资源块中使用,工作正常,如下所示

resource <somegcpresource> <xyz>
{
   certificate = base64decode(data.vault_generic_secret.server_cryptoobjects.data["dev-cert"])
}
  1. 我可以使用自定义环境变量来获取证书的值吗?

    certificate = base64decode(data.vault_generic_secret.server_cryptoobjects.data["var.env-cert"])

  2. 或本地 var 以引用保险库数据源中的密钥名称,例如;

    certificate = base64decode(data.vault_generic_secret.server_cryptoobjects.data[local.certname])

是的,data.vault_generic_secret.server_cryptoobjects.data 是一个对象,因此您可以使用相应的键访问它的值。如果你声明一个变量 env-cert:

variable "env-cert" {
  type    = string
  default = "dev-cert"
}

那你就可以把它当key了:

certificate = base64decode(data.vault_generic_secret.server_cryptoobjects.data["var.env-cert"])

是的,您也可以使用本地作为密钥:

locals {
  certname = "dev-cert"
}

certificate = base64decode(data.vault_generic_secret.server_cryptoobjects.data[local.certname])

如果您还没有查看整个用例的 Vault PKI 机密引擎,我还建议您查看,因为问题中的这个示例使用的是 KV2 机密引擎。