【问题标题】:Resource 'azurerm_sql_server.sql_server' not found for variable 'azurerm_sql_server.sql_server.name'找不到变量“azurerm_sql_server.sql_server.name”的资源“azurerm_sql_server.sql_server”
【发布时间】:2019-08-06 10:49:09
【问题描述】:

我使用var.sql_server_enable 创建了带有启用/禁用选项的sql,但是我遇到了输出问题。如果var.sql_server_enable 是0,则azurerm_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'

【问题讨论】:

  • 这在 Terraform 0.12 中已修复,但在 0.11 或更低版本中不可行。升级到最新的 Terraform 版本,这应该会消失。

标签: sql-server azure-devops terraform terraform-provider-azure


【解决方案1】:

你可以输出 value = "${var.sql_server_enable ? azurerm_sql_server.sql_server[0].name : var.null }"。当您应用 terraform 时,您可以在输入变量“sql_server_enable”的值时输入“1”表示 true,输入“0”表示 false。

这适用于 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 希望这可以帮助你。

【讨论】:

    【解决方案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}"
    }
    

    【讨论】:

    • 请重新检查我的编辑,我将azurerm_sql_server.sql_server[*].name 更改为azurerm_sql_server.sql_server[0].name,并使用var.null 对其进行测试,尽管我没有将它用作模块,如果它有效,请告诉我。你的 terraform 版本是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 2015-05-03
    • 2013-01-03
    • 2014-03-20
    相关资源
    最近更新 更多