我正在尝试使用 count
通过模块创建动态资源。
但是,计数的用法给了我以下错误:
Error: Module does not support count
on server_gx_custom_dynamic.tf line 8, in module "server_gx_custom_dynamic":
8: count = len(var.units_wp3)
Module "server_gx_custom_dynamic" cannot be used with count because
it contains a nested provider configuration for "grafana", at
modules server_gx/custom/custom.tf:11,10-19.
This module can be made compatible with count by changing it to receive all of
its provider configurations from the calling module, by using the "providers"
argument in the calling module block.
我也尝试在子模块中添加提供者配置但没有用,同样的错误(ofc我没有做对)。有人对此问题有任何线索吗?
如果没有引入计数,我的模块就可以完美运行。
TIA!
`server_gx_custom_dynamic.tf`
module "server_gx_custom_dynamic" {
count = len(var.units_wp3)
source = "./modules/server_gx/custom"
...
}
`./modules/server_gx/custom/custom.tf`
resource "grafana_monitor" "custom_monitor" {
name = ...
...
}
答案 0 :(得分:0)
在包含 resource "grafana_monitor" "custom_monitor"
的模块中应该有一个 provider.tf 或者甚至只是一个 provider 代码块。尝试从包含资源块的模块中完全删除它并将其移动到 module "server_gx_custom_dynamic"
中。看看它是如何工作的。
或者,您可以尝试将计数引入包含 resource "grafana_monitor" "custom_monitor"
的子模块。如果提供程序块仍在该子模块中,但可以尝试一下,我不确定这是否会按预期工作。
当您说将提供程序配置添加到子模块时,您指的是包含 ./modules/server_gx/custom/custom.tf
的目录吗?
答案 1 :(得分:0)
出现此错误消息是因为模块 server_gx_custom_dynamic
包含本地提供程序配置,而不仅仅是从调用模块继承提供程序配置。
错误消息包含对该提供程序配置位置的引用,此处显示为 modules server_gx/custom/custom.tf:11,10-19
。在那个位置,我希望你会找到一个 provider "grafana"
块。
要使此配置与 count
兼容,您需要删除该提供程序块。如果您的根模块已经包含一个 provider "grafana"
块,那么只需删除嵌套的提供程序配置可能就足以使其工作,因为默认情况下,Terraform 将使所有子模块都可以使用根模块中的默认(无别名)提供程序配置.
在更复杂的情况下,如果您为同一个提供程序有多个配置,您将需要使用“附加”(别名)提供程序配置。这些表示为包含特殊 provider
参数的 alias
块。其他提供程序块不会像默认提供程序配置那样自动继承,因此在这种情况下,您需要在 providers
块内使用显式 modules
参数。
文档页面 Providers Within Modules 中有关于此机制的更多信息。特别是,您的模块当前处于 Legacy Shared Modules with Provider Configurations 部分中描述的情况,其中包含有关该问题的一些附加上下文以及有关如何解决该问题的一些示例。