---
# Terraform увеличивает размер VMDK (var.hosts[i].disk_size), но не трогает
# раздел/файловую систему внутри гостя — ни для Linux (см. cit_vm/roles/resize_part),
# ни для Windows. Растягиваем системный раздел C: на весь доступный объём.
#
# Сырой PowerShell вместо community.windows.win_partition: версия коллекции на
# реальном сервере не зафиксирована в этом репозитории (ansible/collections
# провижнится отдельно), а команда ниже не зависит от версии коллекции.
- name: "Extend C: partition to fill unallocated space"
ansible.windows.win_shell: |
$ErrorActionPreference = "Stop"
$cPart = Get-Partition -DriveLetter C
$diskNumber = $cPart.DiskNumber
# ВАЖНО: Windows может расширить раздел только в СМЕЖНОЕ unallocated-
# пространство. На типовом Windows-диске после C: обычно идёт ещё один
# раздел (Recovery/WinRE) — если его не убрать, новое место после роста
# VMDK оказывается ПОСЛЕ него, а не сразу после C:, и Resize-Partition
# молча не находит, куда расти (SizeMax остаётся равен текущему размеру).
# Удаляем все разделы, идущие после C: на том же диске, перед расширением.
# Компромисс: среда восстановления (WinRE) перестаёт быть доступна — для
# тестовых disposable VM это приемлемо (аналогично уже принятому решению
# не делать sysprep/generalize).
$partsAfterC = Get-Partition -DiskNumber $diskNumber | Where-Object { $_.Offset -gt $cPart.Offset }
foreach ($p in $partsAfterC) {
Remove-Partition -DiskNumber $diskNumber -PartitionNumber $p.PartitionNumber -Confirm:$false
}
$max = (Get-PartitionSupportedSize -DriveLetter C).SizeMax
$current = (Get-Partition -DriveLetter C).Size
if ($max -gt $current) {
Resize-Partition -DriveLetter C -Size $max
Write-Output "resized"
} else {
Write-Output "already-max"
}
register: resize_result
changed_when: "'resized' in resize_result.stdout"