将Terraform“数据consul_keys ...”存储为文件吗?

时间:2019-12-10 00:28:04

标签: terraform consul

在base.tf文件中,我有:

data "consul_keys" "project_emails"{
  datacenter = "mine1"
  key {
    name = "notification_list"
    path = "project/notification_email_list"
  }
}

我想在我的python代码中使用这些consul变量。 我正在考虑的方法是将其输出到文件中。 (因此,不仅仅是使用"${project_emails.notification_list.construct}"和版本11或12的另一个Terraform文件。)。

我如何将所有这些密钥保存到文件中以访问密钥?

1 个答案:

答案 0 :(得分:2)

从Terraform配置导出数据的一般机制是Output Values

您可以这样定义一个输出值,该输出值将从Consul读取的值传递出去:

output "project_emails" {
  value = data.consul_keys.project_emails.var.notification_list
}

运行terraform apply在配置中执行操作后,可以使用the terraform output command从根模块中检索输出值。因为您想从另一个程序中读取它,所以您可能希望以JSON格式检索输出:

terraform output -json

您可以安排程序自己运行该命令,也可以先将该命令的输出重定向到磁盘上的静态文件,然后让程序读取该文件。


以上内容假设您提到的Python代码将作为配置过程的一部分在运行Terraform的同一台计算机上运行。相反,如果您要询问从Terraform设置的虚拟机上运行的软件对这些设置的访问权限,则可以使用云平台提供的机制将用户数据传递到实例。具体细节因提供商而异。

对于使用来自Consul的数据的长期应用程序,更常见的解决方案是在虚拟服务器上运行consul-template并使其直接访问Consul。这种方法的优点是,如果Consul中的数据发生更改,那么consul-template可以识别出该错误并立即更新模板文件,并在必要时重新启动程序。 Terraform只能在您运行terraform planterraform apply时从Consul读取,因此它无法像consul-template那样自动对更改做出反应。