【发布时间】:2021-04-05 04:01:27
【问题描述】:
我有一个用例,我从 terraform 中的本地人获取所有变量,如下所示,但在此之前,我想运行一个 null_resource 块,它将运行 python 脚本并将所有数据更新到本地文件中。
所以简单来说我的用例是在 terraform 脚本的开头执行一个 null_resource 块,然后运行所有其他资源块
我目前的代码示例如下:
// executing script for populating data in app_config.json
resource "null_resource" "populate_data" {
provisioner "local-exec" {
command = "python3 scripts/data_populate.py"
}
}
// reading data variables from app_config.json file
locals {
config_data = jsondecode(file("${path.module}/app_config.json"))
}
我如何做到这一点?我所尝试的只是在 locals 中添加一个 triggers 命令,如下所示,但即使这样也没有用。
locals {
triggers = {
order = null_resource.populate_data.id
}
config_data = jsondecode(file("${path.module}/app_config.json"))
}
【问题讨论】:
-
您应该在运行实际的 terraform 命令之前将 terraform 命令包装在触发 python 脚本的 shell 脚本中。您想要实现的不是应该使用什么/如何使用 terraform。除非您更详细地解释脚本的作用、它生成的数据如何与部署的其余部分交互、依赖于它的资源等等。
-
你的意思是说我无法在 terraform 脚本的开头执行 null_resource 块,因为那是我的用例?
-
有一种方法,根据时间戳触发null_resource,然后为每个资源添加depends_on关系,以便它们等待null_resource完成。不理想也不好玩。你不应该那样做。首选方法是围绕它包装一个脚本,或者为 python 脚本创建一个自定义数据源,然后显式依赖该脚本输出,而不是写入文件并在其他地方从文件中读取。跨度>
-
您可以使用外部数据源以更简单的方式完成所有这些操作:registry.terraform.io/providers/hashicorp/external/latest/docs/…
标签: terraform terraform-provider-aws terraform0.12+ terraform-template-file