В этом посте мы обсудим функции Terraform. Язык Terraform включает ряд встроенных функций, которые можно вызывать из выражений для преобразования и комбинирования значений. Общий синтаксис для вызовов функций — это имя функции, за которым следуют аргументы, разделенные запятыми, в круглых скобках.

<function_name>(<argument1>, <argument2>, …<argumentN>)

Далее мы собираемся объяснить функции Terraform на примерах. Мы будем использовать консоль terraform для этой демонстрации.

Функции Terraform:

Откройте terraform console
terraform console

Числовые функции

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("cloudaffairen") #возвращает 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(stringsnumbers): принимает любое количество аргументов и возвращает первый, который не является нулем или пустой строкой.
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(listmapstring): определяет длину данного списка, карты или строки.
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,cn1,2,3n") #возвращает [{"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

Выйти из консоли терраформа
exit

Полный список функций terraform смотрите ниже в документации terraform.

Let’s block ads! (Why?)

Read More

Recent Posts

Apple возобновила переговоры с OpenAI и Google для интеграции ИИ в iPhone

Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…

2 дня ago

Российская «дочка» Google подготовила 23 иска к крупнейшим игрокам рекламного рынка

Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…

3 дня ago

Google завершил обновление основного алгоритма March 2024 Core Update

Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…

3 дня ago

Нейросети будут писать тексты объявления за продавцов на Авито

У частных продавцов на Авито появилась возможность составлять текст объявлений с помощью нейросети. Новый функционал доступен в категории «Обувь, одежда,…

3 дня ago

Объявлены победители международной премии Workspace Digital Awards-2024

24 апреля 2024 года в Москве состоялась церемония вручения наград международного конкурса Workspace Digital Awards. В этом году участниками стали…

3 дня ago

Яндекс проведет гик-фестиваль Young Con

27 июня Яндекс проведет гик-фестиваль Young Con для студентов и молодых специалистов, которые интересуются технологиями и хотят работать в IT.…

4 дня ago