模块的变通方法';对Terraform 0.11的依赖不起作用

模块的变通方法';对Terraform 0.11的依赖不起作用,terraform,Terraform,我试图在我的main.tf中创建一个隐式模块依赖项,以便在kube模块之后创建jenkins模块 module "jenkins" { install_jenkins = "${var.install_jenkins}" env_name = "${var.env_name}" source = "../../../../modules-terraform/jenkins_module" sync_var = "${module.kube.cluster_name}

我试图在我的
main.tf
中创建一个隐式模块依赖项,以便在
kube
模块之后创建
jenkins
模块

module "jenkins" {
  install_jenkins = "${var.install_jenkins}"
  env_name = "${var.env_name}"
  source        = "../../../../modules-terraform/jenkins_module"
  sync_var = "${module.kube.cluster_name}"
}

module "kube" {
  source        = "../../../../modules-terraform/kube_module"
  cluster_count = "${var.gke_cluster_create}"

}
因此(从上面的代码可以看出),我已经为模块
jenkins
创建了(不需要的)
sync\u var

这在模块
jenkins
变量.tf
中声明

variable "sync_var" {
  description = "Dummy variable used for synchronization with kube_module"
  default     = ""
}
output "cluster_name" {
  value = "${google_container_cluster.k8s.0.name}"
}
当然,
集群名称
模块
kube的
output.tf

variable "sync_var" {
  description = "Dummy variable used for synchronization with kube_module"
  default     = ""
}
output "cluster_name" {
  value = "${google_container_cluster.k8s.0.name}"
}
然而,
apply
过程(其中
main.tf
包含本文开头的初始tf片段)似乎没有考虑到上述内容

这两个模块的资源是并行创建的

使用地形
0.11.14


知道为什么会发生这种情况吗?

您在问题中没有提到对
var.sync\u var
的任何引用。如果没有至少一个资源依赖于该变量,它的依赖关系将不会产生任何有用的效果,因为变量本身没有外部可见的副作用

对于Terraform 0.12,只需在
dependens\u on
中直接引用变量即可实现对变量的明确依赖性,如下所示:

resource "example" "example" {
  # This resource depends on anything that
  # var.sync_var depends on.
  depends_on = [var.sync_var]

  # ...
}

在Terraform 0.11中,
dependens\u-on
仅直接与资源一起工作,因此我们需要引入一个额外的资源来桥接变量与其他资源之间的依赖关系,
dependens\u-on

resource "null_resource" "example" {
  triggers = {
    # By referring to the variable, this resource
    # implicitly depends on anything var.sync_var
    # depends on.
    dependency = "${var.sync_var}"
  }
}


resource "example" "example" {
  # This resource depends on anything that
  # null_resource.example depends on, which
  # includes everything that var.sync_var
  # depends on.
  depends_on = ["null_resource.example"]

  # ...
}