Определение
Terraform
/OpenTofu
— это декларативный инструмент, а потому при описании ресурсов очень важно понимать последовательность их создания, для этого между ресурсами автоматически выстраиваются неявные зависимости, к слову, выполняя обход древа зависимостей, Terraform/Tofu старается по возможности распараллелить создание ресурсов, что приводит к довольно эффективному применению изменений
Например, если бы мы разворачивали код ниже, то Terraform/Tofu уже бы знал, что нужно сначала создать ресурс с виртуальной сетью и лишь после его создания добавить пул адресов в эту сеть:
resource "opennebula_virtual_network" "ceph-virtnet" {
name = "ceph-intnet"
group = "oneadmin"
permissions = "600"
bridge = "vnet0"
gateway = "192.0.2.1"
dns = "192.0.2.1 8.8.8.8"
network_mask = "255.255.255.0"
}
resource "opennebula_virtual_network_address_range" "ceph" {
virtual_network_id = opennebula_virtual_network.ceph-virtnet.id
ar_type = "IP4"
size = 250
ip4 = "192.0.2.2"
}
Обычно не нужно вмешиваться в выстраивание зависимостей, но изредка бывают случаи когда нужно определять явные зависимости, для ручного определения порядка выполнения ресурса при помощи мета-аргумента depends_on
, например:
resource "opennebula_virtual_network" "ceph-virtnet" {
name = "ceph-intnet"
group = "oneadmin"
permissions = "600"
bridge = "vnet0"
gateway = "192.0.2.1"
dns = "192.0.2.1 8.8.8.8"
network_mask = "255.255.255.0"
}
resource "opennebula_virtual_network_address_range" "ceph" {
virtual_network_id = opennebula_virtual_network.ceph-virtnet.id
ar_type = "IP4"
size = 250
ip4 = "192.0.2.2"
depends_on = [
opennebula_virtual_network.ceph-virtnet
]
}
Практика
При желании граф зависимостей можно вывести с помощью команды graph
:
tofu graph
terraform graph
Граф выводится на языке описания графов под названием DOT
, который можно легко преобразовать в изображение используя, например, приложение GraphvizOnline, для этого нужно просто:
- Выполнить
tofu graph
/terraform graph
- Скопировать вывод команды
- Вставить содержимое в GraphvizOnline и посмотреть изображение
Либо же можно воспользоваться утилитой dot
и сгенерировать изображение одной командой, выполняем и смотрим файл graph.png
:
tofu graph -type=plan | dot -Tpng >graph.png