• 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的代码不要太复杂,越复杂维护困难,并且对基础设施增加了风险。

  • 相关阅读:
    虚拟人产业面临的挑战
    使用Proxyman抓取Android的https请求
    基于Python网络爬虫的二手房数据采集及可视化分析项目源码+使用教程+爬虫+报告PPT+详细注释(高分毕业设计)+全部数据
    Netty源码研究笔记(4)——EventLoop系列
    LeetCode--代码详解 146.LRU缓存
    VMware虚拟化基础操作实战(基于ESXi6.7 操作系统安装CentOS7.5)
    天龙八部科举答题问题和答案(全5/8)
    ATF源码篇(八):docs文件夹-Components组件(7)固件配置框架
    .NET GC
    设计模式 - 解释器模式
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/127682827