Configurando discos no Windows utilizando o vRealize Orchestrator 8.x
Sabemos que o processo de adicionar discos em sistemas operacionais é dividido em duas partes: adicionar o disco em si (associar com a VM) e depois configurar o disco para que possa ser utilizado de fato (disco online, sistema de arquivos, etc). A primeira etapa é simples, o Aria Automation faz isso nativamente e pronto, o que quero demonstrar aqui é a automação da segunda parte, onde iremos utilizar um workflow no Orchestrator.
Na parte dos inputs do blueprint basta adicionar este pedaço do código:
discoadicional: type: array title: Discos adicionais description: Até 5 discos extra por instância minItems: 0 maxItems: 5 items: type: object properties: size: type: integer title: Tamanho do disco (GB) minimum: 1 maximum: 500 SCSIController: type: string title: SCSI Controller enum: - SCSI_Controller_0 - SCSI_Controller_1 - SCSI_Controller_2 - SCSI_Controller_3 Unidade: type: string title: Unidade enum: - D - E - F - G
Dentro do recurso da VM, adicione isso:
discoadicional: ${input.discoadicional}
attachedDisks: ${map_to_object(slice(resource.disco[*].id, length(input.discoadicional)*count.index, length(input.discoadicional)*(count.index+1)), "source")}
E por fim, basta adicionar este código na parte de resource do seu blueprint:
disco: type: Cloud.vSphere.Disk allocatePerInstance: true properties: capacityGb: '${(count.index < length(input.discoadicional) ? input.discoadicional[count.index].size : input.discoadicional[(count.index % length(input.discoadicional))].size)}' SCSIController: '${(count.index < length(input.discoadicional) ? input.discoadicional[count.index].SCSIController : input.discoadicional[(count.index % length(input.discoadicional))].SCSIController)}' count: ${length(input.discoadicional) * input.instancias}
O objetivo é termos um input neste estilo, onde é possível adicionar o tamanho do disco, controladora e unidade.
Toda vez que você fizer deploy de uma máquina e selecionar discos adicionais será possível observar um input chamado discoadicional. Se seguirmos o exemplo da imagem acima, veriamos esta variável com este valor:
[{“size”:11,”Unidade”:”E”,”SCSIController”:”SCSI_Controller_1″},{“size”:12,”Unidade”:”G”,”SCSIController”:”SCSI_Controller_2″}]
E segue aquele mesmo padrão para obter a variável dentro do Orchestrator:
inputProperties.customProperties.discoadicional;
Agora vamos configurar um resource element com o script PowerShell que utilizaremos para inicializar, criar partição e formatar os novos discos. Observe a variável {diskLetter}.
$disks = Get-Disk | Where-Object { $_.OperationalStatus -eq "Offline" -and $_.PartitionStyle -eq "RAW" } $diskLetter = {diskLetter} # "R","I","Z" Write-Host "# DISCOS ADICIONAIS: " $disks.number.count for ($i = 0; $i -ne $disks.number.count; $i++) { Get-Disk -Number $disks[$i].number | Initialize-Disk -PartitionStyle GPT | Out-null # initialize disk New-Partition -DiskNumber $disks[$i].number -Driveletter $diskLetter[$i] -UseMaximumSize | Out-null # create a partition Format-Volume -DriveLetter $diskLetter[$i] -FileSystem NTFS -AllocationUnitSize 65536 -Confirm:$false | Out-null # format volume Start-Sleep -Seconds 5 $status = Get-Disk -Number $disks[$i].number if ($status.HealthStatus -eq "Healthy" -and $status.OperationalStatus -eq "Online") { # check disk health and status Write-Host "- Disk " $diskLetter[$i] " OK" # log } else { Write-Host "- Disk " $diskLetter[$i] " NOT OK" # log } }
Aqui vem a parte fácil, basta criar um workflow e garantir que os inputs sejam os valores do discoadicional, resource element e a VM (VC:VirtualMachine). Então você coloca o código abaixo para preparar para o script e depois basta chamar o workflow padrão Run Script in Guest.
var data = JSON.parse(discoadicional); var diskLetter = []; for (var i = 0; i < data.length; i++) { diskLetter += '"' + data[i].Unidade + '"'; if (i != data.length -1) { diskLetter += ','; } } script = scriptResource.getContentAsMimeAttachment().content.replace("{diskLetter}", diskLetter);
Algo mais ou menos assim:
Toda vez que você criar uma máquina com discos adicionais este workflow irá preparar o script baseado na escolha das letras (unidades do disco), logar na VM e executar via PowerShell.
É isso aí, pessoal. Até a próxima!