繁体   English   中英

为什么我无法将 depends_on 块添加到具有提供程序配置的模块?

[英]Why am I unable to add a depends_on block to a module with provider configuration?

在为我的 Terraform 模块编写示例时,出现错误:“模块包含提供程序配置”“无法使用计数、for_each 或 depends_on 在模块内配置提供程序。”

当我尝试将depends_on块添加到模块的声明以避免在创建部署模块内资源所需的资源组之前尝试运行模块计划时,出现此错误。

如果我不添加depends_on块,它也会中断,因为它找不到应该在模块运行以填充所需资源组数据源之前创建的已声明资源组。

我发现要求删除providers块或删除所有数据源至少是不舒服的。

我找不到有关此错误或如何修复它的任何详细信息。

在 Terraform 的代码中引发此错误的特定行。

您所拥有的可能与下面的代码相似,对吧?

Root module (eg. terraform.tf):
---

... some code...

module "child_module" {
    count  = var.children_no
    source = "./modules/childmodule.tf"
  ...
}

Child module (childmodule.tf)
---

... some code  ...

provider "any_provider" {
    ...
}

所以……可悲的是……你不能那样做。 如果模块有任何供应商,你不能“计算”它。 :/

这基本上就是错误所说的。 您要么必须让您的提供者退出模块,要么从根模块中退出count

从错误消息中,听起来好像存在 Provider 冲突。 当使用与父级中声明的提供程序不同的提供程序调用模块时,可能会发生这种情况。

例子

.
├── main.tf
├── outputs.tf
├── provider.tf
├── runtime.yaml
└── variables.tf

如果在上述提供者中,它声明以下内容:

provider "google" {
  project = var.gcp_project_id
  region  = var.gcp_region
  zone    = var.gcp_zone
}

provider "google-beta" {
  project = var.gcp_project_id
  region  = var.gcp_region
  zone    = var.gcp_zone
}

如果您随后引用一个模块,则期望该模块引用上述父 Provider 配置。 如果模块声明了自己的配置和上面的不一样,Terraform会报错。

要解决此问题,您应该尊重父提供者。 从模块中删除提供者声明,然后依赖项应该是兼容的。

另请注意,当您更新提供程序时 - 您将需要执行terraform init 我删除了预先存在的 Terraform 隐藏目录,以确保它正确选择新设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM