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!


