找不到变量 'azurerm_sql_server.sql_server.name' 的资源 'azurerm_sql_server.sql_server'

Resource 'azurerm_sql_server.sql_server' not found for variable 'azurerm_sql_server.sql_server.name'

我用 enable/disable 选项和 var.sql_server_enable 创建了 sql,但我遇到了输出问题。如果 var.sql_server_enable0azurerm_sql_server.sql_server.name 将是 null,我得到以下错误。

resource "azurerm_sql_server" "sql_server" {
  count                        = "${var.sql_server_enable ? 1 : 0}"
  name                         = "${var.sql_server_name}"
  resource_group_name          = "${var.sql_server_resource_group_name}"
  location                     = "${var.sql_server_location}"
  version                      = "${var.sql_server_version}"
  administrator_login          = "${var.sql_server_admin_user}"
  administrator_login_password = "${var.sql_server_admin_pass}"
}
output "sql_server_name_output" {
  value = "${var.sql_server_enable == "1" ? azurerm_sql_server.sql_server.name : var.null }"
}
Error: Error running plan: 1 error occurred:
        * module.hello.module.azure_sql_server_hello_staging.output.sql_server_name_output: Resource 'azurerm_sql_server.sql_server' not found for variable 'azurerm_sql_server.sql_server.name'

你可以输出 value = "${var.sql_server_enable ? azurerm_sql_server.sql_server[0].name : var.null }"。当您应用 terraform 时,当您输入变量 "sql_server_enable".

的值时,您可以键入“1”表示真,“0”表示假

这对我适用于 Terraform v0.12.6 + provider.azurerm v1.32.1,如果需要,您可以 upgrade it

variable "sql_server_enable" {
  type = bool 

}

variable "null" {
  default = "this is empty"
}


resource "azurerm_sql_server" "sql_server" {
  count                        = "${var.sql_server_enable  ? 1 : 0}"
  name                         = "mysqlserver123qaz"
  resource_group_name          = "${azurerm_resource_group.test.name}"
  location                     = "${azurerm_resource_group.test.location}"
  version                      = "12.0"
  administrator_login          = "mradministrator"
  administrator_login_password = "thisIsDog11"

}

output "sql_server_name_output" {
 value = "${var.sql_server_enable ? azurerm_sql_server.sql_server[0].name : var.null }"
 }

结果1 结果2 希望对您有所帮助。

感谢您的回答,但 sql_server_name_output 变量在另一个模块上使用。它需要 string 值。然后我使用 var.null 而不是 null。在我听从你的建议后,我在下面收到另一个错误。您还有其他建议吗?

Error: Inconsistent conditional result types

  on ../modules/azure_sql_server/output.tf line 9, in output "sql_server_name_output":
   9:   value = "${var.sql_server_enable ? azurerm_sql_server.sql_server[*].name : var.null }"
    |----------------
    | azurerm_sql_server.sql_server is tuple with 1 element
    | var.null is "null"
    | var.sql_server_enable is true

需要 azurerm_sql_server.sql_server 的其他资源如下。

resource "azurerm_sql_firewall_rule" "sql_firewall_rule" {
  count               = "${var.sql_fw_enable == "1" ? 1 : 0}"
  name                = "${var.sql_fw_rule_name}"
  resource_group_name = "${var.sql_fw_rule_resource_group_name}"
  server_name         = "${azurerm_sql_server.sql_server}"
  start_ip_address    = "${var.sql_fw_rule_start_ip}"
  end_ip_address      = "${var.sql_fw_rule_end_ip}"
}