在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文件。)。
我如何将所有这些密钥保存到文件中以访问密钥?
答案 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 plan
或terraform apply
时从Consul读取,因此它无法像consul-template
那样自动对更改做出反应。