Определение

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, для этого нужно просто:

  1. Выполнить tofu graph/terraform graph
  2. Скопировать вывод команды
  3. Вставить содержимое в GraphvizOnline и посмотреть изображение

Либо же можно воспользоваться утилитой dot и сгенерировать изображение одной командой, выполняем и смотрим файл graph.png:

tofu graph -type=plan | dot -Tpng >graph.png