在为我的 Terraform 模块编写示例时,我收到错误: “模块包含提供者配置” “无法使用 count、for_each 或 dependent_on 在模块内配置提供程序。”
当我尝试将 depends_on
block 添加到模块的声明中以避免在创建部署模块内资源所需的资源组之前尝试运行模块计划时,出现此错误。
如果我不添加 depends_on
block ,它也会中断,因为它找不到在模块运行以填充所需资源组数据源之前应创建的已声明资源组。
我发现要求删除 providers
block 或删除所有数据源至少让人感到不舒服。
我找不到有关此错误或如何修复该错误的任何详细信息。
Specific line that raises this error inside Terraform's code.
最佳答案
从错误消息来看,似乎存在 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
}
如果您随后引用一个模块,则期望该模块引用上述父提供程序配置。如果模块声明了自己的配置并且与上面的不同,Terraform 将报告错误。
要解决此问题,您应该尊重父提供商。从模块中删除提供者声明,然后依赖关系应该是兼容的。
另请注意,当您更新提供程序时 - 您将需要执行 terraform init
。我删除了预先存在的 Terraform 隐藏目录,以确保它正确选择新设置。
关于azure - 为什么我无法将 dependent_on block 添加到具有提供程序配置的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67361809/