Заметки к релизу 1.1.0
1. Что нового
-
Добавлена поддержка механизма Resource Taint при частичном создании ресурсов (подробнее см.Terraform Resource Taint).
-
Поддержка параметров HA виртуальной машины:
-
High Availability -
Lease storage domain -
Resume Behaviour
-
-
Поддержка параметра
Delete ProtectedВМ; корректная реакция на флагDelete Protectedпри попытке удалить ВМ. -
Добавлено управление параметром
backupнативных дисков виртуальной машины -
Добавлена ранняя валидация изменения, потенциально приводящих к перезагрузке. Теперь изменения, требующие перезагрузки, проверяются на валидность перед тем, как ВМ выключится.
Подробная информация представлена на вкладке Документация релиза 1.1.0.
3. Terraform Resource Taint
3.1. Общее описание
В Terraform 1.1.0 добавлена поддержка Taint-ресурсов, создание которых не было завершено корректно. Метка taint применяется только на этапе создания ресурса. Если ресурс создается некорректно и оказывается неполноценным, его статус отмечается как tainted. Ресурсы с таким статусом при последующем применении манифеста (apply) будут автоматически удалены и созданы заново.
Возможно вручную отменить статус Tainted, выполнив команду:
terraform untaint zvirt_vm.this
Где zvirt_vm это тип ресурса, а this это его название.
|
3.2. Пример использования
В качестве примера, используем манифест:
resource "zvirt_vm" "this" {
cluster_id = data.zvirt_cluster.this.id
template_id = data.zvirt_template.this.id
name = "vm_test_taint"
power_state = "down"
disk_attachment {
alias = "does_not_exist"
interface = "virtio"
size = 20 * 1024 * 1024 * 1024
}
}
В данном манифесте проиходит попытка поиска несуществующего нативного диска.
При создании ресурса возникнет ошибка, следующего вида:
│ Error: Error Creating VM
│
│ with zvirt_vm.this,
│ on main.tf line 1, in resource "zvirt_vm" "this":
│ 1: resource "zvirt_vm" "this" {
│
│ Could not create VM: failed to process disk attachments for VM 63d5dda3-b739-481e-b47f-b9bd40045254: failed to find native disk attachment with alias does_not_exist: native disk with alias does_not_exist not found
Данный ресурс будет иметь статус tainted.
{
"mode": "managed",
"type": "zvirt_vm",
"name": "this",
"provider": "provider[\"terraform-registry.orionsoft.ru/orionsoft/zvirt\"]",
"instances": [
{
"status": "tainted", // Cтатус ресурса Tainted
"schema_version": 0,
"attributes": {...},
"sensitive_attributes": [],
"identity_schema_version": 0,
"dependencies": [
"data.zvirt_cluster.this",
"data.zvirt_template.this"
]
}
]
}
После выполнения команды terraform plan, такой ресурс будет заменён и ВМ будет создана заново:
Terraform will perform the following actions:
# zvirt_vm.this is tainted, so must be replaced
-/+ resource "zvirt_vm" "this" {
...
}
Plan: 1 to add, 0 to change, 1 to destroy.
Чтобы избежать повторного создания виртуальной машины, достаточно скорректировать имя диска в манифесте на правильное значение и применить команду terraform untaint для соответствующего ресурса.
terraform untaint zvirt_vm.this
Теперь в выводе команды terraform plan, Terraform не предложит пересоздание всей виртуальной машины. Вместо этого виртуальная машина будет обновлена, и все ранее неприменённые параметры будут учтены в процессе обновления VM.
# zvirt_vm.this will be updated in-place
~ resource "zvirt_vm" "this" {
id = "63d5dda3-b739-481e-b47f-b9bd40045254"
name = "vm_test_taint"
~ status = "tainted" -> (known after apply)
# (16 unchanged attributes hidden)
+ disk_attachment {
+ active = true
+ alias = "boot"
+ interface = "virtio"
+ size = 21474836480
}
}
Plan: 0 to add, 1 to change, 0 to destroy.