
In diesem Beitrag werden wir die Terraform-Funktionen diskutieren. Die Terraform-Sprache enthält eine Reihe integrierter Funktionen, die Sie aus Ausdrücken aufrufen können, um Werte zu transformieren und zu kombinieren. Die allgemeine Syntax für Funktionsaufrufe ist der Name der Funktion, gefolgt von den durch Kommas getrennten Argumenten in Klammern.
<function_name>(<argument1>, <argument2>, …<argumentN>)
Als nächstes werden wir die Funktionen von Terraform anhand von Beispielen erläutern. Wir werden die Terraform-Konsole für diese Demo verwenden.
Terraform-Funktionen:
Öffnen Sie die Terraform-Konsole
terraform console
Numerische Funktionen
abs(number): .
abs(-19.86)
# 19.86
ceil(number): ,
ceil(7.1)
# 8
floor(number): ,
floor(7.1)
# 7
log(number, base): log .
log(16,2)
# 4
max(N1,N2,..Nn): .
max(3,2,6,8.8,7)
# 8.8
min(N1,N2,..Nn): .
min(3,2,6,8.8,7)
# 2
pow(number,power): , .
pow(8,2)
# 64
signum(number): , -1 1 .
signum(-4)
# -1
signum(4)
# 1
chomp("string"): .
chomp("cloudaffaire\n")
# cloudaffaire
(** \ n )
format(spec, values...):
format("Welcome, to %s", "CloudAffaire")
# Welcome, to CloudAffaire
format("The year is %d", 2019)
# The year is 2019
format("%4.4f+", 3.86)
# 3.8600+
formatlist(spec, values...): formatlist
. , .
formatlist("www.%s.com",list("azure","aws","google"))
# [www.azure.com,www.aws.com,www.google.com]
indent(num_spaces, string): , , .
indent(8,"hi, \n welcome \n to \n cloudaffaire")
#1st line hi has no indentaton
join(separator, list): , .
join(".",list("www","google","com"))
# www.google.com
lower(string): .
lower("CLOUDAFFAIRE")
# cloudaffaire
upper(string): .
upper("cloudaffaire")
# CLOUDAFFAIRE
replace(string, substring, replacement): ,
.
replace("www.google.com","google","cloudaffaire")
# www.cloudaffaire.com
split(separator, string): , .
split(".","www.google.com")
# ["www","google","com"]
strrev(string): . , Unicode.
strrev("google")
#: elgoog
( terraform 0.12 )
substr(string, offset, length): .
substr("www.google.com",4,6)
# google
title(string): .
title("welcome to cloudaffaire")
# Welcome To Cloudaffaire
trimspace(string): .
trimspace(" hello, all ")
# "hello, all
"
chunklist(list, chunk_size): , .
chunklist(list("a","b","c","d","e","f"),3)
# [["a","b","c"],["d","e","f"]]
coalesce(strings\numbers): , .
coalesce("",1,"a")
# 1
coalescelist(list1, list2,… listn): .
coalescelist(list(),list("a","b","c"),list("d","e"))
# ["a","b","c",]
compact(list(string)): .
compact(list("a","","c","","d"))
# ["a","c","d"]
concat(list1, list2,… listn): .
concat(list("a","b"),list("c","d"),list("e","f"))
# ["a","b","c","d","e","f"]
contains(list, value): , .
contains(list("a","b","c"),"a")
# true
contains(list("a","b","c"),"d")
# false
distinct(list): .
distinct(list("a","b","b","c"))
# ["a","b","c",]
element(list, index): .
element(list("a","b","c"),2)
# c #index start from 0
index(list, value): .
index(list("a","b","c"),"b")
# 1
flatten(list(list1,list2,..,listn)): , .
flatten(list(list("a","b"),list("c"),list(),list("d","e")))
# ["a","b","c","d","e",]
keys(map): , .
keys(map("name","debjeet","sex","male"))
# ["name","sex",]
length(list\map\string): , .
length(list("a","b"))
# 2
length("debjeet")
# 7
length(map("name","debjeet","sex","male"))
# 2
list(): , .
list("a","b","c")
# ["a","b","c",]
lookup(map, key, default): , . , .
lookup(map("name","debjeet","sex","male"),"sex","not found!")
# male
lookup(map("name","debjeet","","male"),"gender","not found!")
# not found!
map("key1","value1","key2","value2",...,"keyn","valuen"): ,
.
map("name","debjeet","sex","male")
# {"name" = "debjeet" "sex" = "male"}
matchkeys(valueslist, keyslist, searchset): , ,
.
matchkeys(list("a","b","c"),list("one","two","three"),list("two"))
# b
matchkeys(list("a","b","c"),list("one","two","three"),list("one"))
# a
matchkeys(list("a","b","c"),list("one","two","three"),list("three"))
# c
merge(map1,map2,..,mapn):
.
merge(map("a","one"),map("b","two"),map("c","three"))
# {"a" = "one" "b" = "two" "c" = "three"}
reverse(list): .
, , .
reverse(list("a","b","c"))
#: ["c","b","a",]
( terraform 0.12 )
setintersection(sets...): , , .
setintersection(list("a","b"),list("b","c"),list("b","d"))
# ["b",]
( terraform 0.12 )
setproduct(sets...): , .
setproduct(list("a","b"),list("c","d"))
# [["a","c"],["a","d"],["b","c"],["b","d"],]
( terraform 0.12 )
setunion(sets...): , .
, .
setunion(list("a","b"),list("c","d"))
# ["a","b","c","d",]
( terraform 0.12 )
slice(list, startindex, endindex):
slice(list("zero","one","two","three"),1,3)
# ["one","two"]
sort(list): , .
sort(list("d","c","a","b"))
# ["a","b","c","d",]
transpose(): , .
transpose(map("a",list("one","two"),"b",list("three","four")))
# {"four"=["b",] "one"=["a",] "three"=["b",] "two"=["a",]}
values(map): , .
values(map("name","debjeet","sex","male"))
# ["debjeet","male",]
zipmap(keyslist, valueslist): .
zipmap(list("name","sex"),list("debjeet","male"))
# {"name" = "debjeet" "sex" = "male"}
base64encode(string): Base64 .
base64encode("cloudaffaire")
# Y2xvdWRhZmZhaXJl
base64gzip(string): gzip, Base64.
base64gzip("cloudaffaire")
# H4sIAAAAAAAA/0rOyS9NSUxLS8wsSgUAAAD//wEAAP//38z9sQwAAAA=
base64decode(string): , Base64, .
base64decode("Y2xvdWRhZmZhaXJl")
# cloudaffaire
csvdecode(string): , CSV, , .
csvdecode("a,b,c\n1,2,3\n")
# [{"a"="1" "b"="2" "c"="3"},]
( terraform 0.12 )
jsonencode(): , JSON.
jsonencode(map("name","debjeet"))
# {"name":"debjeet"}
jsondecode(): JSON, .
jsondecode("{\"name\":\"debjeet\"}")
# {"name" = "debjeet"} ( terraform 0.12 )
urlencode(): URL .
urlencode("https://cloudaffaire.com/?s=terraform")
# https%3A%2F%2Fcloudaffaire.com%2F%3Fs%3Dterraform
dirname(string): , , .
dirname("/home/ec2-user/terraform/main.tf")
# /home/ec2-user/terraform
pathexpand(): , ~,
, .
pathexpand("~/.ssh/id_rsa")
# /home/ec2-user/.ssh/id_rsa
basename(string): , , , .
basename("/home/ec2-user/terraform/main.tf")
# main.tf
file(path):
file("/home/ec2-user/terraform/main.tf")
# content of main.tf
fileexists(path): , .
fileexists("/home/ec2-user/terraform/main.tf")
# true if main.tf exist
( terraform 0.12 )
filebase64(path): base64.
filebase64("/home/ec2-user/terraform/main.tf")
# main.tf base64. ( terraform 0.12 )
templatefile(path, vars): , .
formatdate(spec, timestamp): .
formatdate("MMM DD, YYYY", "2018-01-02T23:12:01Z")
# Jan 02, 2018
( terraform 0.12 ). https://www.terraform.io/docs/configuration/functions/formatdate.html
timeadd(timestamp, duration): , .
— , , «1,5 » «1 30 ».
: "ns", "us" (or "µs"), "ms", "s", "m", and "h".
, , "-2h5m".
timeadd("2019-05-10T00:00:00Z", "10m")
# 2019-05-10T00:10:00Z
timestamp():
timestamp()
IP
cidrhost(prefix, hostnum): IP- IP- .
cidrhost("10.0.0.0/16", 4)
# 10.0.0.4
cidrhost("10.0.0.0/16", -4)`` #
10.0.255.252`
cidrnetmask(prefix): IPv4-, CIDR, .
cidrnetmask("10.0.0.0/16")
# 255.255.0.0
cidrnetmask("10.0.0.0/24")
# 255.255.255.0
cidrsubnet(prefix, newbits, netnum): cidrsubnet IP- .
CIDR
newbits
— , .
netnum
— , , newbits
cidrsubnet("10.0.0.0/16",8,2)
# 10.0.2.0/24
cidrsubnet("10.0.0.0/24",8,1)
# 10.0.0.1/32
Verlassen Sie die Terraform-Konsole
exit
Eine vollständige Liste der Terraform-Funktionen finden Sie in der folgenden Terraform-Dokumentation.