Я только начал играть с 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 то, что вы хотите в случае дублирования. Они инкапсулировали определенные ресурсы со значениями по умолчанию, которые вы обычно используете, вы можете повторно использовать набор ресурсов с минимальным вводом вместо их повторной записи.
В Реестр модулей Terraform охватывает несколько готовых модулей для более крупных провайдеров, где вы можете опробовать некоторые существующие или - если ваш провайдер не поддерживается - разработать лучшее изображение того, как модуль должен использоваться и проектироваться.