# Recuperar VM com segurança
# Pelo ID gera dependência cíclica e, só pelo name, pode gerar conflito
# SCVMM allows more than one VM with the same name!
$VM = $null
$custom_group = Get-SCCustomProperty -VMMServer "{{ vmm_server }}" -Name "{{ field_group }}"
$custom_name_id = Get-SCCustomProperty -VMMServer "{{ vmm_server }}" -Name "{{ field_id }}"
$cloud = Get-SCCloud -VMMServer "{{ vmm_server }}" -Name "{{ cloud }}"
$vms_nuvem = Get-SCVirtualMachine -VMMServer "{{ vmm_server }}" -Cloud $cloud

foreach($vm_obj in $vms_nuvem) {
  $group = Get-SCCustomPropertyValue -InputObject $vm_obj -CustomProperty $custom_group
  if ($group.Value -eq "{{ group }}") {
    $nome_id = Get-SCCustomPropertyValue -InputObject $vm_obj -CustomProperty $custom_name_id

    # Recuperando VM correta
    if ("{{ vm_name }}" -eq $nome_id.Value){
        $VM = $vm_obj
    }
  }
}

$BusNumber = 0
$BusType = "{{ bus_type }}"

# Definindo próximo LUN livre
$RangeLun = 0..1000
$LunsOcupados = @()
$LunsOcupados += $VM.VirtualDiskDrives | Where  {$_.BusType -eq $BusType -and $_.Bus -eq $BusNumber} | Select -ExpandProperty Lun
$LunsOcupados += $VM.VirtualDVDDrives | Where  {$_.BusType -eq $BusType -and $_.Bus -eq $BusNumber} | Select -ExpandProperty Lun
$LunsOcupados = $LunsOcupados | Sort Lun
$LunLivre = $RangeLun | Where-Object {$LunsOcupados -notcontains $_} | select -First 1

# Criando disco
New-SCVirtualDiskDrive -VMMServer "{{ vmm_server }}" -VM $VM -{{ bus_type }} -Bus $BusNumber -LUN $LunLivre -VirtualHardDiskSizeMB {{ size_mb }} -{{ size_type }} -Filename "{{ file }}" -VolumeType None {{ '-Path "' + path + '"' if path else '' }} -JobVariable "job" -RunAsynchronously | Out-Null

$Resultado = [PSCustomObject]@{
    Status = 'OK'
    Guid = $job.ID
}
ConvertTo-Json -Depth 3 $Resultado
