Как избежать повторения с Terraform?

Как избежать повторения с Terraform?

Я только что начал работать с Terraform, и в качестве отправной точки я импортировал ресурсы из нашего кластера vSphere — простой тестовой среды, которую я настроил для работы с некоторыми возможностями Ansible.

Я обнаружил, что я очень много повторяюсь, и задаюсь вопросом, есть ли лучший способ сделать это. Я не уверенмодулисоответствует тому, что я ищу, а ресурсы, которые я повторяю, не идентичны, поэтому я не уверен, что прямой цикл сработает.

По сути, я ищу способ установить значения по умолчанию для ресурсов, которые я затем могу расширить/переопределить, если потребуется. Короткий вымышленный пример, демонстрирующий, чего я хочу добиться:

resource_defaults "vsphere_virtual_machine" {
  resource_pool_id = "${data.vsphere_resource_pool.pool.id}"
  datastore_id     = "${data.vsphere_datastore.datastore.id}"

  num_cpus = 2
  memory   = 1024                                                                                                      guest_id = "other3xLinux64Guest"                                                                                   
  network_interface {
    network_id = "${data.vsphere_network.network.id}"                                                                  }

  disk {
    label = "disk0"
    size  = 20
  }
}

resource "vsphere_virtual_machine" "node1" {
  name             = "terraform-test"
}

resource "vsphere_virtual_machine" "doublenet" {
  name             = "terraform-test-2"
  network_interface {
    network_id = "${data.vsphere_network.other_network.id}"
  }                                                                                                                  
}

resource "vsphere_virtual_machine" "bigdisk" {
  name             = "terraform-test-3"
  disk {
    label = "disk0"
    size  = 100
  }
}

Кто-нибудь знает, как мне добиться того, чего я пытаюсь добиться?

ОБНОВЛЕНИЕ: Теперь, когда у меня немного больше опыта работы с Terraform, модули — это именно то, что я хотел сделать. Я просто не знал, что могу передавать параметры! Я постараюсь рассказать подробнее, когда у меня появится возможность. Я недавно сделал что-то похожее, и, передав структуры данных в модуль, я смог получить похожие, но разные экземпляры для сборки, как и предполагалось.

решение1

Модули терраформингато, что вам нужно в случае дублирования. Они инкапсулировали определенные ресурсы со значениями по умолчанию, которые вы обычно используете, вы можете повторно использовать набор ресурсов с минимальным вводом вместо того, чтобы писать их снова.

TheРеестр модулей Terraformохватывает несколько готовых модулей для крупных поставщиков, где вы можете опробовать некоторые из существующих или — если ваш поставщик не поддерживается — разработать более четкую картину того, как следует использовать и проектировать модуль.

Связанный контент