• Terraform expressions 表达式


    学习表达式就是为了以后在写tf的时候,能够顺利,简化的去写。

    在写region的时候,定义ecs这些属性的时候,都会使用到特定的语句,比如说循环,遍历,条件判断。这些都是离不开的。

    条件表达式


    有些时候需要做条件的判断,这个时候就需要条件表达式去完成。 region的值我定义为cn-hangzhou。

    1. output "myregion" {
    2. value = var.region != "" ? var.region : "cn-beijing"
    3. }

    上面也就是如果我这个值不为空,我们采用的是这个var.region的值。如果这个值为空,那么采用cn-beijing。

    上面就是条件表达式的一个用法,条件表达式主要是对值进行判断。

    调试,进入console的时候,是在项目的根模块进去。

    1. PS C:\Users\W10\Desktop\Terraform\yufa> terraform console
    2. > var.region
    3. "cn-hangzhou"
    4. > var.env
    5. tolist([
    6. "pro",
    7. "dev",
    8. "uat",
    9. ])

    表达式可以在这里进行调试

    1. > var.region != "" ? var.region : "test"
    2. "cn-hangzhou"

    for表达式


    可以便利的对象一个是list,还有一个是map,还有一个set集合

    上面第一行是遍历集合,或者列表,另外一个是遍历map。

    1. variable "env" {
    2. type = list(string)
    3. }
    4. env = [ "pro","dev","uat" ]
    5. output "env" {
    6. value = [for index,value in var.env : "${index} ${value}"]
    7. }
    8. #console调试的时候记得退出,然后再进去,这些取决你的初始化
    9. > [for index,value in var.env : "${index} ${value}"]
    10. [
    11. "0 pro",
    12. "1 dev",
    13. "2 uat",
    14. ]

     除了遍历list之外,还有map。

    1. output "env_name" {
    2. value = [for v in var.env : "${v}"]
    3. }
    4. output "dns_name" {
    5. value = [for i,v in var.dns_record : "${i} ${v}"]
    6. }
    1. > [for v in var.env : "${v}"]
    2. [
    3. "pro",
    4. "dev",
    5. "uat",
    6. ]
    7. > [for i,v in var.dns_record : "${i} ${v}"]
    8. [
    9. "dev dev.app",
    10. "uat uat app",
    11. ]

    splat表达式


    1. variable "ecs_spec" {
    2. type = list(map(string))
    3. }
    4. > var.ecs_spec
    5. tolist([
    6. tomap({
    7. "name" = "ecs01"
    8. "type" = "tiny"
    9. }),
    10. tomap({
    11. "name" = "ecs02"
    12. "type" = "tiny"
    13. }),
    14. ])
    15. > var.ecs_spec[0].name
    16. "ecs01"
    17. > var.ecs_spec[*].name
    18. tolist([
    19. "ecs01",
    20. "ecs02",
    21. ])

    动态表达式里面[*]就行了,直接可以拿到所有的数据。这是一个动态的表达式,尤其是VPC,镜像的id也会使用到这些。

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

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

  • 相关阅读:
    【闭眼瞎说】为什么速度越快时间越慢
    面试官:可以谈谈乐观锁和悲观锁吗
    英文翻译阿拉伯语-批量英文翻译阿拉伯语工具免费
    软考高级系统架构设计师系列案例考点专题三:数据库系统考点梳理及精讲
    SpringBoot项目之间相互引用
    前端性能优化的常见方式
    Selenium3.0基础 — 自动化测试概述
    智慧社区电动车管理解决方案
    论坛介绍 | COSCon'23 开源治理(G)
    Openlayers 中加载渲染 WMTS TMS XYZ WMS WFS 图层
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/127682827