Определение

Для тестирования выражений в 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="