Определение
Для тестирования выражений в Terraform/Tofu есть интерактивная консоль, которую можно вызвать через tofu console
/terraform console
Очень удобная штука для проверки того, что даст на выходе выражение не прибегая к output и тестовым прогонам
Пример для подсчета числа узлов из сети формата <IP>:<MASK>
:
tofu console
> pow(2, 32 - split("/", "172.16.0.0/20")[1]) - 2
4094
>pow(2, 32 - split("/", "10.0.0.0/8")[1]) - 2
16777214
Можно передать переменную при помощи -var 'NAME=VALUE'
, файл с переменными через -var-file=FILENAME
или, если файл имеет расширение <name>.auto.tfvars
, они будут автоматически включены в консоль (как и при запуске любых других команд Terraform/Tofu):
Важно учитывать, что переданные переменные должны быть описаны в соответствующих .tf
файлах
Практика
Проще всего использовать в директории со всеми файлами Terraform/Tofu, для полной имитации работы в файлах .tf
:
# Смотрим значение первой переменной
> var.one_digit
"5"
# Смотрим значение второй переменной
> var.two_digit
"50"
# Ищем наибольшее
> max(var.one_digit, var.two_digit)
50
# Вычисляем сумму
> sum([var.one_digit, var.two_digit])
55
# Приведенная ниже функция дописывает в строку значение с сохранением ведущего нуля для двузначных значений (00, 01, 02, .. , 99)
# Проверяем для однозначного числа
> "yay-10${var.one_digit >= 0 && var.one_digit < 10 ? join("",["0",tostring(var.one_digit)]) : var.one_digit}"
"yay-1005"
# Проверяем для двузначного числа
> "yay-10${var.two_digit >= 0 && var.two_digit < 10 ? join("",["0",tostring(var.two_digit)]) : var.two_digit}"
"yay-1050"
# Читаем содержимое файла text (по умолчанию использует относительный путь к файлам)
> file(text)
"Hello!"
Можно даже передавать через пайп на stdin, например:
echo "max(1, 2, 3)" | tofu console
3
# Не забываем экранировать спец-символы обратным слэшом
echo "base64encode(\"Hello World\")" | tofu console
"SGVsbG8gV29ybGQ="