如何在脚本开始时在 terraform 中运行 null_resource
Posted
技术标签:
【中文标题】如何在脚本开始时在 terraform 中运行 null_resource【英文标题】:How to run a null_resource in terraform at the start of the script 【发布时间】: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/… 【参考方案1】:您可以使用depends_on
resource "null_resource" "populate_data"
provisioner "local-exec"
command = "python3 scripts/data_populate.py"
// reading data variables from app_config.json file
locals
depends_on = [null_resource.populate_data]
config_data = jsondecode(file("$path.module/app_config.json"))
现在locals
将始终在populate_data
之后执行。
【讨论】:
我很确定locals
的一个特性不是在那里有一个 depends_on
语句,它实际上会导致一个depends_on 关系并且不只是定义一个名为depends_on
的局部变量。这根本无法按预期工作。以上是关于如何在脚本开始时在 terraform 中运行 null_resource的主要内容,如果未能解决你的问题,请参考以下文章
如何在 terraform 中运行 kubectl apply 命令