地形 - 模块上的资源依赖性



我有一个Terraform模块,我们称之为模块,以及其中使用的子模块,我们将其称为模块。目标是让子模块在创建kubernetes_deployment资源之前运行预配程序。基本上,子模块构建并推送 Docker 镜像。如果映像尚不存在,则kubernetes_deployment将等待并最终超时,因为部署没有用于创建 Pod 的映像。我已经尝试了我在网上能够找到的所有东西,在子模块中输出变量,在kubernetes_deployment资源中使用depends_on等,并且碰壁了。我将非常感谢任何帮助!

parent.tf

module "child" {
source       = ".\child-module-path"
...
}

resource "kubernetes_deployment" "kub_deployment" {
...
}

子模块路径\child.tf

data "external" "hash_folder" {
program = ["powershell.exe", "${path.module}\bin\hash_folder.ps1"]
}
resource "null_resource" "build" {
triggers = {
md5 = data.external.hash_folder.result.md5
}
provisioner "local-exec" {
command     = "${path.module}\bin\build.ps1 ${var.argument_example}"
interpreter = ["powershell.exe"]
}
}

大地形状错误输出示例:

module.parent.kubernetes_deployment.kub_deployment: Still creating... [10m0s elapsed]
Error output: 
Error: Waiting for rollout to finish: 0 of 1 updated replicas are available...

在子模块中,声明一个输出值,该值依赖于具有与其关联的配置程序的空资源:

output "build_complete" {
# The actual value here doesn't really matter,
# as long as this output refers to the null_resource.
value = null_resource.build.triggers.md5
}

然后在"父"模块中,您可以在表达式中使用module.child.build_complete(如果在部署中的某个位置包含 MD5 字符串很有用(,或者您可以只声明资源依赖于输出。

resource "kubernetes_deployment" "example" {
depends_on = [module.child.build_complete]
...
}

因为输出取决于null_resource,而kubernetes_deployment取决于输出,所以传递kubernetes_deployment现在实际上取决于null_resource,创建您想要的顺序。

最新更新