Reputation: 65
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
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
Result2
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