【问题标题】:Terraform - Resource dependency on moduleTerraform - 对模块的资源依赖
【发布时间】:2020-09-16 11:09:03
【问题描述】:

我有一个 Terraform 模块,我们将其称为 parent 和一个在其中使用的子模块,我们将其称为 child。目标是让子模块在创建 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"]
  }
}

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...

【问题讨论】:

    标签: terraform


    【解决方案1】:

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

    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,从而创建了您想要的排序。

    【讨论】:

      猜你喜欢
      • 2021-07-09
      • 2019-11-04
      • 2023-02-23
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多