學習表達式就是為了以後在寫tf的時候,能夠順利,簡化的去寫。
在寫region的時候,定義ecs這些屬性的時候,都會使用到特定的語句,比如說循環,周遊,條件判斷。這些都是離不開的。
有些時候需要做條件的判斷,這個時候就需要條件表達式去完成。
region的值我定義為cn-hangzhou
output "myregion" {
value = var.region != "" ? var.region : "cn-beijing"
}
上面也就是如果我這個值不為空,我們采用的是這個var.region的值。如果這個值為空,那麼采用cn-beijing。
上面就是條件表達式的一個用法。條件表達式主要是對值進行判斷。
調試,進入console的時候,是在項目的根子產品進去
PS C:\Users\W10\Desktop\Terraform\yufa> terraform console
> var.region
"cn-hangzhou"
> var.env
tolist([
"pro",
"dev",
"uat",
])
表達式可以在這裡進行調試
> var.region != "" ? var.region : "test"
"cn-hangzhou"
可以便利的對象一個是list,還有一個是map,還有一個set集合。
上面第一行是周遊集合,或者清單,另外一個是周遊map。
variable "env" {
type = list(string)
}
env = [ "pro","dev","uat" ]
output "env" {
value = [for index,value in var.env : "${index} ${value}"]
}
#console調試的時候記得退出,然後再進去,這些取決你的初始化
> [for index,value in var.env : "${index} ${value}"]
[
"0 pro",
"1 dev",
"2 uat",
]
除了周遊list之外,還有map。
output "env_name" {
value = [for v in var.env : "${v}"]
}
output "dns_name" {
value = [for i,v in var.dns_record : "${i} ${v}"]
}
> [for v in var.env : "${v}"]
[
"pro",
"dev",
"uat",
]
> [for i,v in var.dns_record : "${i} ${v}"]
[
"dev dev.app",
"uat uat app",
]
variable "ecs_spec" {
type = list(map(string))
}
> var.ecs_spec
tolist([
tomap({
"name" = "ecs01"
"type" = "tiny"
}),
tomap({
"name" = "ecs02"
"type" = "tiny"
}),
])
> var.ecs_spec[0].name
"ecs01"
> var.ecs_spec[*].name
tolist([
"ecs01",
"ecs02",
])
動态表達式裡面[*]就行了,直接可以拿到所有的資料。這是一個動态的表達式,尤其是VPC,鏡像的id也會使用到這些。