Terraform expressions 表达式

学习表达式就是为了以后在写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"

for表达式


可以便利的对象一个是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",
]

splat表达式


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也会使用到这些。

可读性方面[*]比*好。这样获取所有属性的信息就不需要使用for循环了。

建议在写tf的代码不要太复杂,越复杂维护困难,并且对基础设施增加了风险。

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/127682827