Функции Terraform

Автор оригинала: Debjeet
  • Перевод


В этом посте мы обсудим функции 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("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 или новее). Спецификация.


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.

Средняя зарплата в IT

120 000 ₽/мес.
Средняя зарплата по всем IT-специализациям на основании 5 825 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
Реклама
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Комментарии 6

    0

    Перевод неполного пересказа документации. А смысл? Просто перечислить функции?

      0

      Лучше поста про функции terraform не нашел. Может плохо искал. В документации не так хорошо описано.

        0
        В документации не так хорошо описано.
        серьезно?

        lower(string): преобразует все буквы в заданной строке в нижний регистр.

        upper(string): преобразует все буквы в заданной строке в верхний регистр.

        slice(list, startindex, endindex): извлекает несколько последовательных элементов из списка

        max(N1,N2,..Nn): берет одно или несколько чисел и возвращает наибольшее число из набора.

        min(N1,N2,..Nn): принимает одно или несколько чисел и возвращает наименьшее число из набора.
        т.е. вот это по-вашему хорошее описание, а в офф доке — плохое?
          +1

          Наверное, вы правы. В доке неплохо написано.

      0
      Полный список функций terraform смотрите ниже в документации terraform.
      а в чем глубокий смысл самой статьи?

      Я бы еще мог понять, если бы приводились примеры не стандартного использования этих функций или их комбинаций, а так…
        0

        Большая надежда на Terraform CDK. Тогда этот скудный набор будет не нужен, можно будет пользоваться всеми возможностями выбранного вами языка.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое