Terraform 0.13-模块,每个模块和供应商
已更新 我正在尝试使用Terraform在Azure中提供多个SQL数据库 My child模块具有以下代码,用于提供SQL数据库: 提供者。tfTerraform 0.13-模块,每个模块和供应商,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,已更新 我正在尝试使用Terraform在Azure中提供多个SQL数据库 My child模块具有以下代码,用于提供SQL数据库: 提供者。tf // default provider provider "azurerm" { alias = "main" features {} } // The provider that can access the storage account to store diagnostics provider
// default provider
provider "azurerm" {
alias = "main"
features {}
}
// The provider that can access the storage account to store diagnostics
provider "azurerm" {
alias = "storage_account"
features {}
}
resource "azurerm_mssql_database" "default" {
name = var.name
base_name = var.base_name
...
tags = var.tags
provider = azurerm.main
}
data "azurerm_storage_account" "storage" {
name = var.storage_account_name
resource_group_name = var.storage_account_rg
provider = azurerm.storage_account
}
sql_db.tf
// default provider
provider "azurerm" {
alias = "main"
features {}
}
// The provider that can access the storage account to store diagnostics
provider "azurerm" {
alias = "storage_account"
features {}
}
resource "azurerm_mssql_database" "default" {
name = var.name
base_name = var.base_name
...
tags = var.tags
provider = azurerm.main
}
data "azurerm_storage_account" "storage" {
name = var.storage_account_name
resource_group_name = var.storage_account_rg
provider = azurerm.storage_account
}
data.tf
// default provider
provider "azurerm" {
alias = "main"
features {}
}
// The provider that can access the storage account to store diagnostics
provider "azurerm" {
alias = "storage_account"
features {}
}
resource "azurerm_mssql_database" "default" {
name = var.name
base_name = var.base_name
...
tags = var.tags
provider = azurerm.main
}
data "azurerm_storage_account" "storage" {
name = var.storage_account_name
resource_group_name = var.storage_account_rg
provider = azurerm.storage_account
}
我在我的main.tf文件中调用此模块,如下所示,其中我希望使用为每个配置多个SQL数据库:
module "sql_db" {
for_each = var.sql_db
source = "...../sql_db.git"
base_name = each.value.base_name
name = each.value.name
providers = {
azurerm.main = azurerm.main
azurerm.storage_account = azurerm.storage_account
}
}
provider "azurerm" {
features {}
version = "=2.20.0"
}
// default provider
provider "azurerm" {
alias = "main"
features {}
}
provider "azurerm" {
alias = "storage_account"
features {}
}
运行“计划”时,出现以下错误:
错误:模块不支持每个
在main.tf第35行的模块“sql_db”中:
35:for_each=var.sql_db
模块“sql\u db”不能与for\u each一起使用,因为它包含嵌套的
“azurerm.main”的提供程序配置,位于
.terraform\modules\sql\u db\providers.tf:2,10-19。
通过将此模块更改为接收所有,可以使其与for_兼容
通过使用
调用模块块中的“providers”参数。
错误:模块不支持每个
在main.tf第35行的模块“sql_db”中:
35:for_each=var.sql_db
模块“sql\u db”不能与for\u each一起使用,因为它包含嵌套的
“azurerm.storage_帐户”的提供程序配置,位于
.terraform\modules\sql\u db\providers.tf:8,10-19。
通过将此模块更改为接收所有,可以使其与for_兼容
通过使用
调用模块块中的“providers”参数。
var.sql\u db的结构是什么?您在模块中定义了两个提供程序,但只从根模块传入其中一个模块。错误抱怨它没有从调用模块接收所有提供程序配置。还有什么东西阻止您传入存储帐户提供程序吗?我会从资源“azurerm\u mssql\u数据库”的默认值中删除provider=azurerm.main
,并设置为module.sql\u db.providers
={azurerm=azurerm.main}
。除非您出于不同的原因将其他提供者传递给同一模块。我已更新了问题的更多细节。实际上,我在子模块中使用了多个azurerm提供程序。