gpt4 book ai didi

Terraform - 对模块的资源依赖

转载 作者:行者123 更新时间:2023-12-04 09:47:22 25 4
gpt4 key购买 nike

我有一个 Terraform 模块,我们称之为 家长 以及其中使用的子模块,我们将其称为 child .目标是让子模块在创建 kubernetes_deployment 资源之前运行配置程序。基本上,子模块构建并推送 Docker 镜像。如果镜像不存在,kubernetes_deployment 将等待并最终超时,因为部署没有镜像可用于创建 pod。我已经尝试了所有可以在网上找到的东西,子模块中的输出变量,在 kubernetes_deployment 资源中使用depends_on 等等,但都碰壁了。我将不胜感激任何帮助!

父.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"]
}
}

示例 Terraform 错误输出:
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_resourcekubernetes_deployment取决于输出,可传递 kubernetes_deployment现在有效地依赖于 null_resource ,创建您想要的排序。

关于Terraform - 对模块的资源依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62076497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com