Terraform取决于另一个路径中的另一个模块

时间:2020-06-29 13:14:19

标签: terraform artifactory

我想自动创建Artifactory存储库。为此,我使用了Atlasian artifcatory插件,但是在将虚拟存储库声明为本地存储库时遇到了问题。

这是我的文件夹:

modules/
├── local-repository/
│   ├── main.tf
│   ├── variables.tf
├── virtual-repository/
│   ├── main.tf
│   └──variables.tf
│── local-repository-xxx.tf
│── virtual-repository-xxx.tf
│── variables.tf
│──provider.tf
│── version.tf

Local-repository.tf:

resource "artifactory_local_repository" "local-repository" {
  key          = var.key
  package_type = var.type
}

虚拟存储库:

resource "artifactory_virtual_repository" "virtual-repository" {
  key          = var.key
  package_type = var.type
  repositories = [var.repositories]
}

我想先创建所有本地存储库,然后再创建虚拟存储库。

在这种情况下,我如何使用callDepend_on?

谢谢

2 个答案:

答案 0 :(得分:0)

当您通过输出值从模块返回数据或通过输入变量将数据传递到模块时,值本身及其依赖项都会通过。

如果使用对要依赖的对象的引用来填充子模块的变量,则可以在此处完全避免使用depends_on。例如:

resource "artifactory_local_repository" "local-repository" {
  key          = var.key
  package_type = var.type
}

module "virtual_repository" {
  source = "./virtual-repository"

  # ...

  # If you create the repositories value by referring to
  # artifactory_local_repository.local-repository then
  # any resource in the module that refers to
  # var.repositories will in turn depend on
  # artifactory_local_repository.local-repository
  # automatically.
  repositories = artifactory_local_repository.local-repository[*].id
}

在引用未自动指定所有依赖项的异常情况下,可以在depends_on中使用输入变量和输出值。例如:

  # Using var.repositories in a depends_on
  # means that the resource will depend on
  # whatever var.repositories depends on, even
  # if it doesn't actually use the value of
  # the variable.
  depends_on = [var.repositories]
  # Using module.local_repository.id in
  # a depends_on means that the resource will
  # depend on whatever the output "id"
  # declaration in the module depends on.
  depends_on = [module.local_repository.id]

甚至更不寻常的情况下,输出本身需要带有通常不会具有的依赖关系,可以在depends_on块内使用output: / p>

output "id" {
  value      = "anything"
  depends_on = [artifactory_local_repository.local-repository]
}

几乎总是可以并且最好仅引用其他对象并让Terraform自动计算依赖关系,因为随着模块的发展,依赖关系将自动保持正确,并且您不必编写许多其他依赖关系注释。 depends_on仅适用于因“隐藏”在Terraform中而导致的依赖关系的异常情况,这是由于两个对象之间存在一种未被该对象的参数捕获的关系。 depends_on是不得已的方法。

答案 1 :(得分:0)

我会说

module "x" {
  ...
}

module "y" {
 depends_on = [module.x]
}