HCL
HCL(HashiCorp Configuration Language)作为核心语言
配置文件支持两种格式:
- HCL(HashiCorp Configuration Language), 文件名以 .tf 结尾
- JSON, 文件名以 .tf.json 结尾
表达式
条件表达式
|
|
for 表达式
|
|
for 表达式创建对象
|
|
splat 表达式
比用 for 表达式更简洁的循环方式
内置函数
Terraform 语言包括许多内置函数, 可以从表达式中调用这些函数来转换;
function(arg1,arg2)
数值类
计算函数
max(12, 54, 3)
min(12, 54, 3)
ceil(5.2) –> 6 # 向上取整
floor(4.5) –> 4 # 向下取整
pow(3, 2) –> 9 # 计算指数幂
abs(number)
log(16, 2) –> 4 # 除
parseint() # 进制转换, 解析字符串数字 为对应进制的整数
parseint(“100”, 10)
parseint(“FF”, 16) –> 255
parseint(“aA”, 62) –> 656
示例
|
|
字符串
format() 按指定格式拼接字符串 format(“Hello, %s!”, “Terraform”)
lower()
upper()
title(“hello world”) # 首字母大写
join() 用分隔符将字符串列表拼接为一个字符串; join(", “, [“a”, “b”, “c”])
split() 将字符串按分隔符拆分为列表
substr() 从字符串中截取子串 substr(“hello world”, 0, 5)
replace() 替换字符串中的内容
chomp(“hello\r\n”) –> hello
endswith(string, suffix)
trimspace(“a b c”) –> “abc” # 清理空格
trimprefix(“dev-server”, “dev-”) –> server # 清除前面的字符
trimsuffix(“user.txt”, “.txt”) –> user # 清除后面的字符
|
|
set-map
element() 通过索引获取列表中的某个元素 element([“a”, “b”, “c”], 1)
length() 获取列表、映射或字符串的长度 length([“a”, “b”, “c”])
lookup(map,key,default) 在映射中查找键的值,若不存在则返回默认值 lookup({a=“A”, b=“B”}, “c”, “C”)
keys() 返回映射的所有键组成的列表 keys({a=1, b=2})
values(map) 创建map中value的list
merge(map1,map2,map3) 合并多个映射或对象, 相同key会被最后覆盖 merge({a=1}, {b=2})
flatten() 将嵌套的列表展开为单层列表 flatten([[“a”], [“b”, “c”]])
alltrue() 判断元素中都是 true
anytrue() 判断元素中存在 true
chunklist(list, size) 按照指定size拆分list
compact(list) 去除list中的空元素
concat(list1, list2) 合并两个list
contains(list, value) 判断元素是否存在list中
distinct(list) 去除list中的重复元素
list[index] 根据index获取list中的元素
index(list, value) 返回value元素的index
sort([“z”, “b”, “a”]) # 排序
toset() # 将字符串列表转换为集合, 会丢弃 顺序 并删除重复元素
示例
|
|
正则
regex() # regex("[0-9]+”, “env42-prod”)
regexall() # 多次
编码和加解密
base64decode()
base64encode()
base64gzip()
csvdecode
jsondecode
jsonencode
textdecodebase64
textencodebase64
urlencode
yamldecode
yamlencode
brypt
bash64sha256
bash64sha512
filebase64sha256
filemd5
filesha1
filesha256
md5
sha1
sha256
sha512
uuid
uuidv5
路径和文件名
bashpath
dirname
pathexpand
basename
file() 读取文件的内容 value = file("${path.module}/config.json")
fileexists
fileexists
filebase64
templatefile() 动态渲染模板
templatefile
|
|
时间
formatdate
plantimestamp
timeadd
timecmp
timestamp
ip
cidrhost
cidrnetmask
cidrsubnet() # 子网计算
cidrsubnets()
cidrsubnet 从 CIDR 生成子网
cidrsubnet(原始网段, 掩码, 子网步长)
default = cidrsubnet(“172.20.0.0/16”, 8, 36) # 最终等于 172.20.36.0/24
理解
- 172.20.0.0/16
- 16+8=24
- 将 “172.20.0.0/16” 拆成 24 个子网
- 使用第 36 个子网
cidrsubnet(“10.0.0.0/16”, 8, 1) –> “10.0.1.0/24”
cidrsubnet(“10.0.0.0/16”, 8, 2) –> “10.0.2.0/24”
技巧
展开参数 …
把列表中的值作为多个参数传给函数时,可以在列表后加 …
|
|