Configurando discos no Windows utilizando o vRealize Orchestrator 8.x

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!

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *