如何在terraform中创建标量数组/列表?
myvar应该是安全组的列表如何在terraform中创建标量数组/列表?,terraform,Terraform,myvar应该是安全组的列表 variable "myvar" { default = null } 如果用户指定,则列表将与默认安全组(从数据源中拉入)连接 如果未指定,请使用默认安全组 这不起作用 local { test = var.myvar != null ? concat(tolist(data.aws_security_group.data.id), var.myvar) : tolist(data.aws_security_group.data.id) }
variable "myvar" {
default = null
}
如果用户指定,则列表将与默认安全组(从数据源中拉入)连接
如果未指定,请使用默认安全组
这不起作用
local {
test = var.myvar != null ? concat(tolist(data.aws_security_group.data.id), var.myvar) : tolist(data.aws_security_group.data.id)
}
但这确实有效:
aaa = var.myvar != null ? concat(["aaaa"], ["bbbbb","ccccccc"]) : ["aaaa"]
那么如何将字符串转换为标量数组/列表呢?似乎这就是terraform所需要的,tolist()不起作用了提出这个作为答案,但希望有一个不那么疯狂的方法
local {
test = var.myvar != null ? concat(tolist(data.aws_security_group.data.id), var.myvar) : tolist(data.aws_security_group.data.id)
}
local {
test = var.myvar != null ? flatten(concat(tolist([data.aws_security_group.data.id]), [var.myvar])) : tolist([data.aws_security_group.data.id])
}
提出这个作为答案,但希望有一个不那么疯狂的方式
local {
test = var.myvar != null ? flatten(concat(tolist([data.aws_security_group.data.id]), [var.myvar])) : tolist([data.aws_security_group.data.id])
}
这就是你要找的吗
value = var.myvar != null ? concat([data.aws_security_group.data.id], var.myvar) : [data.aws_security_group.data.id]
这就是你要找的吗
value = var.myvar != null ? concat([data.aws_security_group.data.id], var.myvar) : [data.aws_security_group.data.id]
根据给定的要求,我认为最简单的解决方案是将变量的默认值设置为
[]
,并完全避免使用条件:
variable "additional_security_group_ids" {
type = list(string)
default = []
}
locals {
security_group_ids = concat(
[data.aws_security_group.default.id],
var.additional_security_group_ids,
)
}
连接一个空列表只会产生相同的列表,因此在上面不设置变量将导致local.security\u group\u id
仅包含默认的安全组id
当缺少某个变量的值会完全禁用某些功能时,或者如果无法通过默认值方便地表示所需的逻辑,则将默认值设置为
null
非常有用,但是我总是建议在可能的情况下使用特定的默认值,因为结果对于未来的维护人员来说更容易阅读和理解。基于给定的要求,我认为最简单的解决方案是将变量的默认值设置为[]
并且完全不需要条件:
variable "additional_security_group_ids" {
type = list(string)
default = []
}
locals {
security_group_ids = concat(
[data.aws_security_group.default.id],
var.additional_security_group_ids,
)
}
连接一个空列表只会产生相同的列表,因此在上面不设置变量将导致local.security\u group\u id
仅包含默认的安全组id
当缺少某个变量的值会完全禁用某些功能时,或者如果无法通过默认值方便地表示所需的逻辑,则将默认值设置为
null
非常有用,但我总是建议在可能的情况下使用特定的默认值,因为结果对于未来的维护人员来说更容易阅读和理解。。它对我有用。我真的不知道你想要什么结果。“标量数组/列表”有点矛盾。嗯。它对我很有效。实际上我不确定你在寻找什么结果。“标量数组/列表”有点矛盾。简单得多。我没有意识到这是可能的。简单得多。我没有意识到这是可能的。