エック
エック

Reputation: 65

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

I created sql with enable/disable options with var.sql_server_enable, but I have a problem about output. If the var.sql_server_enable is 0, the azurerm_sql_server.sql_server.name is going to be null and I get the following error.

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'

Upvotes: 0

Views: 211

Answers (2)

Nancy Xiong
Nancy Xiong

Reputation: 28274

You could output value = "${var.sql_server_enable ? azurerm_sql_server.sql_server[0].name : var.null }". When you terraform apply, you could type "1" for true, "0" for false when you input values for variable "sql_server_enable".

This works for me with Terraform v0.12.6 + provider.azurerm v1.32.1, you can upgrade it if you need.

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 }"
 }

Result1 enter image description here Result2 enter image description here Hope this could help you.

Upvotes: 1

エック
エック

Reputation: 65

Thanks for the answer, but sql_server_name_output variable is used on the other module. It needs string value. Then i use var.null rather than null. After i follow your suggestion, I get another error below. Do you have any other suggestion?

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

The other resource that needs azurerm_sql_server.sql_server is below.

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}"
}

Upvotes: 0

Related Questions