当我的Terraform模板中的元组为空时,如何获取默认值?
我有一个当我的Terraform模板中的元组为空时,如何获取默认值?,terraform,Terraform,我有一个locals块,如下所示: locals { database_server_name = var.createDatabaseServer ? azurerm_postgresql_server.region[0].name : var.postgresqlServerName } 不幸的是,Terraform似乎想要评估元组(区域[0]),尽管并非在所有场景中都必须: Error: Invalid index on terraform/region/03-database
locals
块,如下所示:
locals {
database_server_name = var.createDatabaseServer ? azurerm_postgresql_server.region[0].name : var.postgresqlServerName
}
不幸的是,Terraform似乎想要评估元组(区域[0]
),尽管并非在所有场景中都必须:
Error: Invalid index
on terraform/region/03-database.tf line 34, in locals:
34: database_server_name = var.createDatabaseServer ? azurerm_postgresql_server.region[0].name : var.postgresqlServerName
|----------------
| azurerm_postgresql_server.region is empty tuple
如果在元组为空的情况下可以使用默认值(
var.postgresqlServerName
),是否有任何方法可以实现上面我想要的功能?可能会将逻辑从本地取出并有条件地创建资源。您在其中使用本地。数据库\u服务器\u名称
可以包含每个的计数
或(可以包含其他逻辑):
也许可以将逻辑从本地取出,有条件地创建资源。您在其中使用本地。数据库\u服务器\u名称
可以包含每个的计数
或(可以包含其他逻辑):
仅从您共享的信息来看,尚不清楚var.createDatabaseServer
和azurerm\u postgresql\u server.region
是如何关联的,因此也不清楚在不合适的情况下,什么可能导致对条件的第一个表达式求值
话虽如此,你也许可以通过直接测试你所期望的情况是否属实,而不是通过测试另一个变量来推断,从而得到你想要的答案:
locals {
database_server_name = (
length(azurerm_postgresql_server.region) > 0 ?
azurerm_postgresql_server.region[0].name :
var.postgresql_server_name
)
}
通过直接测试azurerm\u postgresql\u server.region中有多少元素,可以避免条件和第一个表达式不一致的情况。仅从您共享的信息不清楚var.createDatabaseServer
和azurerm\u postgresql\u server.region
是相关的,因此不清楚在条件表达式的第一个表达式不合适的情况下,是什么导致对其求值
话虽如此,你也许可以通过直接测试你所期望的情况是否属实,而不是通过测试另一个变量来推断,从而得到你想要的答案:
locals {
database_server_name = (
length(azurerm_postgresql_server.region) > 0 ?
azurerm_postgresql_server.region[0].name :
var.postgresql_server_name
)
}
通过直接测试azurerm\u postgresql\u server.region中有多少个元素,可以避免条件和第一个表达式不一致的情况。您可能会在使用splat运算符时遇到问题。它符合旧的DSL语法,但可以正常工作。您可能无法使用splat运算符*
解决方法。它符合旧的DSL语法,但可以工作。