天天看點

Terraform expressions 表達式

Terraform expressions 表達式

學習表達式就是為了以後在寫tf的時候,能夠順利,簡化的去寫。

在寫region的時候,定義ecs這些屬性的時候,都會使用到特定的語句,比如說循環,周遊,條件判斷。這些都是離不開的。

Terraform expressions 表達式

有些時候需要做條件的判斷,這個時候就需要條件表達式去完成。 

region的值我定義為cn-hangzhou 

output "myregion" {
  value = var.region != "" ? var.region : "cn-beijing"
}      
Terraform expressions 表達式

上面也就是如果我這個值不為空,我們采用的是這個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"      
Terraform expressions 表達式

可以便利的對象一個是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。

Terraform expressions 表達式
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",
]      
Terraform expressions 表達式
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也會使用到這些。