Подготовка
Ознакомитесь со статьей – Terraform быстрый старт.
Выполните все действия по настройке провайдера, составлению основных конфигурационных файлов.
Добавить описание ресурсов
servergroup
resource "openstack_compute_servergroup_v2" "servergroup" {
name = "servergroup"
policies = ["affinity"]
}
В примере создаётся логическая группу серверов с именем servergroup.
В параметре policies указывается одно из правил размещения:
affinity – все экземпляры/серверы, запущенные в этой группе, будут размещены на одном вычислительном узле.
anti-affinity – все экземпляры/серверы, запущенные в этой группе, будут размещаться на разных вычислительных узлах.
soft-affinity – все экземпляры/серверы, запущенные в этой группе, будут, если возможно, размещены на одном вычислительном узле, но если это невозможно, они все равно будут перемещены вместо сбоя.
soft-anti-affinity – все экземпляры/серверы, запущенные в этой группе, будут по возможности размещаться на разных вычислительных узлах, но если это невозможно, они все равно будут перемещены вместо сбоя.
Для применения данных правил к ВМ (инстансу) виртуальный сервер должен быть включён в группу на этапе разворачивания. Если этого не сделать и создать инстанс, добавить его в группу не получится. Придётся пересоздавать ВМ. Будьте внимательны!
В блоке scheduler_hints указывается параметр группы group, в которую входит инстанс.
При этом, используя данный параметр, возможно выбрать только одну группу серверов.
resource "openstack_compute_instance_v2" "instance_win" {
name = "instance_win"
image_id = data.openstack_images_image_v2.image_name_win.id
flavor_name = "4vcpu.8ram"
metadata = {
admin_pass = "Qwe123#"
}
scheduler_hints {
group = openstack_compute_servergroup_v2.servergroup.id
}
network {
port = openstack_networking_port_v2.port2.id
}
}
Запуск развертывания
После добавления нового ресурса, стоит проверить корректность выполнения команды – terraform plan:
# openstack_compute_servergroup_v2.servergroup will be created
+ resource "openstack_compute_servergroup_v2" "servergroup" {
+ id = (known after apply)
+ members = (known after apply)
+ name = "servergroup"
+ policies = [
+ "affinity",
]
+ region = (known after apply)
}
Удостоверившись, что ресурсы планируются создаться или удалиться, в зависимости от файла состояний, можно перейти к развертыванию:
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 осторожно, во избежание непредвиденных последствий!