我的 variables.tfvars 中有以下代码:
variable "is_premium_service_bus_required" {
description = "When set to 1, premium service bus will be created"
type = "string"
default = "0"
}
variable "service_bus_type_cloud" {
description = "Type of service bus to be created, value can only be standard or premium"
type = "string"
}
以下代码用于创建 azure 资源:
resource "azurerm_servicebus_namespace" "premium-ffdac-cloud-servicebus" {
count = "${var.is_premium_service_bus_required}"
name = "${terraform.workspace}-ffdac-cloud-sbus"
location = "west europe"
resource_group_name = "fusson"
sku = "Premium"
capacity = "1"
}
resource "azurerm_servicebus_namespace" "ffdac-cloud-servicebus" {
name = "${terraform.workspace}-ffdac-cloud-servicebus"
location = "west europe"
resource_group_name = "fusson"
sku = "Standard"
}
可以看出,我们通过设置变量值来操纵 Azure 上资源的创建: is_premium_service_bus_required 为 0(未创建)或 1(已创建)
我有以下局部变量:
locals {
standard_service_bus_cloud_connection_string = "${azurerm_servicebus_namespace.ffdac-cloud-servicebus.default_primary_connection_string};TransportType=Amqp"
}
locals {
premium_service_bus_cloud_connection_string = "${azurerm_servicebus_namespace.premium-ffdac-cloud-servicebus.default_primary_connection_string};TransportType=Amqp"
}
它只负责操作默认连接字符串并在末尾添加协议。
我们有以下代码,它根据“service_bus_type_cloud”的值确定,应该为“service_bus_cloud_connection_string”变量分配什么值,该变量稍后将在不同的 terraform 文件中使用。
locals {
service_bus_type_cloud_names = {
"premium" = "${local.premium_service_bus_cloud_connection_string}"
"standard" = "${local.standard_service_bus_cloud_connection_string}"
}
cloud_connection_string_default = "${local.standard_service_bus_cloud_connection_string}"
service_bus_cloud_connection_string = "${lookup(local.service_bus_type_cloud_names, var.service_bus_type_cloud, local.cloud_connection_string_default)}"
}
现在的问题是,当 "is_premium_service_bus_required" 的值设置为 "0" 时,高级服务总线 azure 服务没有创建并且本地变量 "premium_service_bus_cloud_connection_string" 值为空,我们最终得到以下错误:
Error: Error running plan: 1 errors occurred:
* local.premium_service_bus_cloud_connection_string: local.premium_service_bus_cloud_connection_string: Resource 'azurerm_servicebus_namespace.premium-ffdac-cloud-servicebus' not found for variable 'azurerm_servicebus_namespace.premium-ffdac-cloud-servicebus.default_primary_connection_string'
有没有办法绕过这个错误或重写逻辑的更好方法?我们正在运行 Terraform 版本 0.11,因此这里提到的条件运算符不能用作使用以下代码:
locals {
service_bus_cloud_connection_string = "${var.service_bus_type_cloud == "premium" ? "${azurerm_servicebus_namespace.premium-ffdac-cloud-servicebus.default_primary_connection_string};TransportType=Amqp" : "${azurerm_servicebus_namespace.ffdac-cloud-servicebus.default_primary_connection_string};TransportType=Amqp"}"
}
将评估两个值表达式,即使只返回一个,它似乎是一个在 0.12 中修复的错误,如此处所示