Terraform dependent_on 另一个路径中的另一个模块

Pie*_*rbe 5 artifactory terraform

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

\n

这是我的文件夹:

\n
modules/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 local-repository/\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 variables.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 virtual-repository/\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80variables.tf\n\xe2\x94\x82\xe2\x94\x80\xe2\x94\x80 local-repository-xxx.tf\n\xe2\x94\x82\xe2\x94\x80\xe2\x94\x80 virtual-repository-xxx.tf\n\xe2\x94\x82\xe2\x94\x80\xe2\x94\x80 variables.tf\n\xe2\x94\x82\xe2\x94\x80\xe2\x94\x80provider.tf\n\xe2\x94\x82\xe2\x94\x80\xe2\x94\x80 version.tf\n
Run Code Online (Sandbox Code Playgroud)\n

本地存储库.tf:

\n
resource "artifactory_local_repository" "local-repository" {\n  key          = var.key\n  package_type = var.type\n}\n
Run Code Online (Sandbox Code Playgroud)\n

虚拟存储库:

\n
resource "artifactory_virtual_repository" "virtual-repository" {\n  key          = var.key\n  package_type = var.type\n  repositories = [var.repositories]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

在这种情况下我如何使用 call dependent_on ?

\n

谢谢

\n

Mar*_*ins 6

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

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
}
Run Code Online (Sandbox Code Playgroud)

在引用未自动指定所有依赖项的特殊情况下,您可以在 dependent_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]
Run Code Online (Sandbox Code Playgroud)
  # 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]
Run Code Online (Sandbox Code Playgroud)

更不寻常的情况下,输出本身需要携带通常不会有的依赖项,您可以depends_onoutput块内使用:

output "id" {
  value      = "anything"
  depends_on = [artifactory_local_repository.local-repository]
}
Run Code Online (Sandbox Code Playgroud)

引用其他对象并让 Terraform 自动计算依赖关系几乎总是可行且更好的,因为这样依赖关系将随着模块的发展自动保持正确,并且您无需编写大量额外的依赖注释。depends_on仅适用于异常情况,其中依赖关系“隐藏”到 Terraform,因为两个对象之间存在某种关系,而这些对象的参数未捕获这些关系。depends_on是最后的手段。