Terraform - 函数
Functions函数
- https://developer.hashicorp.com/terraform/language/functions
- Terraform语言包括许多内置函数,可以从表达式中调用这些函数来转换。
- 函数调用的一般语法是函数名后跟括号中以逗号分隔的参数:function(arg1,arg2)
数值函数
- max() 获取最大值
- min() 获取最小值
- parseint() 解析字符串数字为对应进制的整数
字符串函数
- format() 格式化
- split() 字符串分割
- join() 字符串拼接
- replace() 替换字符串
Collection集合函数
- alltrue() 判断元素中都是true
- anytrue() 判断元素中存在true
- chunklist(list, size) 按照指定size拆分list
- compact(list) 去除list中的空元素
- concat(list1, list2) 合并两个list
- contains(list, value) 判断元素是否存在list中
- distinct(list) 去除list中的重复元素
- element(list, index) 根据index获取list中的元素
- list[index] 根据index获取list中的元素
- flatten(list,list,list) 将多层list转换成单list
- index(list, value) 返回value元素的index
- length(list) 计算list的长度
- lookup(map,key,default) 检索map的key,不存在返口default
- merge(map1,map2,map3) 合并map,相同key会被最后覆盖
- keys(map) 创建map中key的list
- values(map) 创建map中value的list
示例
output.tf
//内置数值函数
output "my_func1" {
value = {
f1 = [max(1, 2, 3), min(7, 8, 9), parseint("111", 2)],
f2 = [max([1, 2, 3]...), min([7, 8, 9]...), parseint("111", 2)]
}
}
//内置字符串函数
output "my_func2" {
value = {
f1 = format("Hello %s!", "anliven"),
f2 = join(":", ["name", "age", "title"]),
f3 = replace("a=b=c", "=", "–"),
f4 = split(",", "name,age,title")
}
}
locals {
list1 = [1, 2, 3]
list2 = [7, 8, 9, null]
list3 = ["a", "b", "c", "a", "b", "c"]
}
//内置Collection集合函数
output "my_func3" {
value = {
p1 = alltrue([true, false]) //判断元素中都是true
p2 = anytrue([]) //判断元素中存在true
p3 = chunklist(["a", "b", "c"], 2) //按照指定size拆分list
p4 = compact(local.list2) //去除list中的空元素
p5 = concat(local.list1, local.list2) //合并两个list
p6 = contains(local.list2, 9) //判断元素是否存在list中
p7 = distinct(local.list3) //去除list中的重复元素
p8 = element(local.list3, 0) //根据index获取list中的元素
p9 = flatten([[["a", "b"], []], ["c"]]) //将多层list转换成单list
p10 = index(local.list3, "c") //返回value元素的index, 返回第一个匹配的索引
p11 = length({ "a" = 1, "b" = 2 }) //计算string、list、map的长度
p12 = lookup({ a = "111", b = "222" }, "c", "what?") //检索map的key,不存在返口default
p13 = merge({ a = "b", c = "d" }, { e = "f", c = "z" }) //合并map,相同key会被最后覆盖
p14 = keys({ a = 1, c = 2, d = 3 }) //创建map中key的list
p15 = values({ a = 3, c = 2, d = 1 }) //创建map中value的list
}
}
输出结果
liven@livenan MINGW64 /d/Testing/tf-files/tf-learn-functions
$ terraform plan
Changes to Outputs:
+ my_func1 = {
+ f1 = [
+ 3,
+ 7,
+ 7,
]
+ f2 = [
+ 3,
+ 7,
+ 7,
]
}
+ my_func2 = {
+ f1 = "Hello anliven!"
+ f2 = "name:age:title"
+ f3 = "a–b–c"
+ f4 = [
+ "name",
+ "age",
+ "title",
]
}
+ my_func3 = {
+ p1 = false
+ p10 = 2
+ p11 = 2
+ p12 = "what?"
+ p13 = {
+ a = "b"
+ c = "z"
+ e = "f"
}
+ p14 = [
+ "a",
+ "c",
+ "d",
]
+ p15 = [
+ 3,
+ 2,
+ 1,
]
+ p2 = false
+ p3 = [
+ [
+ "a",
+ "b",
],
+ [
+ "c",
],
]
+ p4 = [
+ "7",
+ "8",
+ "9",
]
+ p5 = [
+ 1,
+ 2,
+ 3,
+ 7,
+ 8,
+ 9,
+ null,
]
+ p6 = true
+ p7 = [
+ "a",
+ "b",
+ "c",
]
+ p8 = "a"
+ p9 = [
+ "a",
+ "b",
+ "c",
]
}
You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
liven@livenan MINGW64 /d/Testing/tf-files/tf-learn-functions
$
行动是绝望的解药!
欢迎转载和引用,但请在明显处保留原文链接和原作者信息!
本博客内容多为个人工作与学习的记录,少数内容来自于网络并略有修改,已尽力标明原文链接和转载说明。如有冒犯,即刻删除!
以所舍,求所得,有所获,方所成。