Подготовка
Ознакомитесь со статьей – Terraform быстрый старт.
Выполните все действия по настройке провайдера, составлению основных конфигурационных файлов.
Добавить описание ресурсов
Для реализации возможности размещения инстанса (ВМ) на разных хостах виртуализации (Анти-аффинити правило), необходимо выполнить следующее:
- В ресурсе
openstack_compute_instance_v2добавляется блокscheduler_hints; different_host– конструкция, описывающая ID инстансов, которые должны находиться на разных хостах относительно друг друга и “не пересекаться”;
При создании новых ресурсов ID инстансов (c2f9cd3e-68c0-46c7-8aeb-927ecb41ce6e) заранее не известны, в связи с этим необходимо получать ID из ресурса, создающего другую ВМ openstack_compute_instance_v2.instance_win.id
- Значений может быть множество, указываются в массиве через запятую.
openstack_compute_instance_v2Пример создания 3-х инстансов (в первом примере используется конструкция анти-аффинити):
resource "openstack_compute_instance_v2" "instance" {
name = "instance"
image_name = "Ubuntu 22.04"
flavor_name = "4vcpu.8ram"
key_pair = openstack_compute_keypair_v2.keypair.name
scheduler_hints {
different_host = [openstack_compute_instance_v2.instance_win.id,openstack_compute_instance_v2.instance_win2.id]
}
network {
port = openstack_networking_port_v2.port.id
}
}
resource "openstack_compute_instance_v2" "instance_win" {
name = "instance_win"
image_name = "MS Windows 11"
flavor_name = "4vcpu.8ram"
metadata = {
admin_pass = "Qwe123#"
}
network {
port = openstack_networking_port_v2.port2.id
}
}
resource "openstack_compute_instance_v2" "instance_win2" {
name = "instance_win2"
image_name = "MS Windows 11"
flavor_name = "4vcpu.8ram"
metadata = {
admin_pass = "Qwe123#"
}
network {
port = openstack_networking_port_v2.port3.id
}
}
Запуск развертывания
После добавления нового ресурса, стоит проверить корректность выполнения команды – terraform plan:
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
+ create
# openstack_compute_instance_v2.instance will be created
Удостоверившись, что ресурсы планируются создаться или удалиться, в зависимости от файла состояний, можно перейти к развертыванию:
terraform apply
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
Подтвердите выполнение командой yes.
Ресурсы создадутся, и информация будет добавлена в новый файл состояний.
Если какие-то ресурсы удалены из кода, но они присутствуют в файле состояния, то они будут удалены!
Применяйте команду terraform plan осторожно, во избежание непредвиденных последствий!