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

Leo*_*ira 10 azure terraform terraform-provider-azure terraform0.12+

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

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

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

我发现要求删除块providers或删除所有数据源至少让人感到不舒服。

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

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

小智 2

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

\n

例子

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 outputs.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 provider.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 runtime.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 variables.tf\n
Run Code Online (Sandbox Code Playgroud)\n

如果在上面的提供程序中声明以下内容:

\n
provider "google" {\n  project = var.gcp_project_id\n  region  = var.gcp_region\n  zone    = var.gcp_zone\n}\n\nprovider "google-beta" {\n  project = var.gcp_project_id\n  region  = var.gcp_region\n  zone    = var.gcp_zone\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果您随后引用一个模块,则期望该模块引用上述父提供程序配置。如果模块声明了自己的配置并且与上面的不同,Terraform 将报告错误。

\n

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

\n

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

\n