vRA – Cloud Template 101 – Múltiplas VMs e discos

vRA – Cloud Template 101 – Múltiplas VMs e discos

Após implantar o VMware vRealize Automation e fazer as configurações iniciais, chegamos no momento de configurar os cloud templates e nesta série quero compartilhar alguns exemplos interessantes do que podemos fazer. Uma pergunta recorrente é sobre múltiplos discos em múltiplas VMs e hoje vou demonstrar algumas formas de fazer isso.

Para começarmos de uma forma mais simples, veremos um exemplo de como configurar vários discos em uma única VM. Neste exemplo não temos nenhuma informação para o usuário inserir, estamos simulando um cloud template que irá prover uma VM com 2 discos, sendo um de 5GB e outro 10GB. Obs: estes discos são adicionais, pois o disco do sistema operacional é criado automaticamente baseado no template.

formatVersion: 1
inputs: {}
resources:
  VM:
    type: Cloud.vSphere.Machine
    properties:
      image: Ubuntu 22.04
      flavor: Small
      constraints:
        - tag: compute:vsan
      networks:
        - network: ${resource.Network.id}
          assignment: static
      storage:
        constraints:
          - tag: storage:tier1
      attachedDisks:
        - source: ${resource.Disk_1.id}
        - source: ${resource.Disk_2.id}
  Disk_1:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 5
  Disk_2:
    type: Cloud.vSphere.Disk
    properties:
      capacityGb: 10
  Network:
    type: Cloud.vSphere.Network
    properties:
      networkType: existing
      constraints:
        - tag: network:vmnet_100

Para deixamos este cloud template um pouco mais dinâmico, poderiamos permitir que o usuário escolha o tamanho do disco 1 adicionando um input, por exemplo.

inputs:
  TamanhoDisk_1:
    type: integer
    title: Tamanho do Disco (GB)
    description: Digite o tamanho em GB do Disco 1

Precisamos criar a referência deste input no Disk_1.

Disk_1:
   type: Cloud.vSphere.Disk
   properties:
     capacityGb: ${input.TamanhoDisk_1}

Agora vamos deixar um pouco mais interessante. Vamos criar um cloud template com 2 (ou mais) VMs e 2 discos adicionais de 10GB cada. O único input será a quantidade de instâncias (VMs).

formatVersion: 1
inputs:
  count:
    type: integer
    title: Instâncias
    description: Digite a quantidade de instâncias desejada
    default: 2
resources:
  VM:
    type: Cloud.vSphere.Machine
    allocatePerInstance: true
    properties:
      image: Ubuntu 22.04
      flavor: Small
      count: ${input.count}
      constraints:
        - tag: compute:vsan
      networks:
        - network: ${resource.Network.id}
          assignment: static
      storage:
        constraints:
          - tag: storage:tier1
      attachedDisks: ${map_to_object(slice(resource.Disk[*].id, 2*count.index, 2*(count.index + 1)), "source")}
  Disk:
    type: Cloud.vSphere.Disk
    allocatePerInstance: true
    properties:
      capacityGb: 10
      count: ${2*input.count}
  Network:
    type: Cloud.vSphere.Network
    properties:
      networkType: existing
      constraints:
        - tag: network:vmnet_100

O cloud template começa a ficar mais legal, mas ainda não é o ideal, pois não sabemos exatamente qual a necessidade de tamanho e quantidade de discos do usuário. Neste caso, vamos permitir que o usuário escolha a quantidade e tamanho dos discos e de brinde ainda poderá escolher a controladora 🙂

formatVersion: 1
inputs:
  instance:
    type: integer
    title: Instâncias
    maximum: 5
    minimum: 1
  DiskTable:
    type: array
    title: Discos adicionais
    description: Até 5 discos extras por instância
    minItems: 0
    maxItems: 5
    items:
      type: object
      properties:
        size:
          type: integer
          title: Tamanho do disco
          minimum: 1
          maximum: 100
        SCSIController:
          type: string
          title: SCSI Controller
          enum:
            - SCSI_Controller_0
            - SCSI_Controller_1
            - SCSI_Controller_2
            - SCSI_Controller_3
resources:
  Disk:
    type: Cloud.vSphere.Disk
    allocatePerInstance: true
    properties:
      capacityGb: '${(count.index < length(input.DiskTable) ? input.DiskTable[count.index].size : input.DiskTable[(count.index % length(input.DiskTable))].size)}'
      count: ${length(input.DiskTable) * input.instance}
      SCSIController: '${(count.index < length(input.DiskTable) ? input.DiskTable[count.index].SCSIController : input.DiskTable[(count.index % length(input.DiskTable))].SCSIController)}'
  VM:
    type: Cloud.vSphere.Machine
    allocatePerInstance: true
    properties:
      image: Ubuntu 22.04
      flavor: Small
      count: ${input.instance}
      constraints:
        - tag: compute:vsan
      networks:
        - network: ${resource.Rede.id}
          assignment: static
      attachedDisks: ${map_to_object(slice(resource.Disk[*].id, length(input.DiskTable)*count.index, length(input.DiskTable)*(count.index+1)), "source")}
  Rede:
    type: Cloud.vSphere.Network
    properties:
      networkType: existing
      constraints:
        - tag: network:vmnet_100

É isso aí, pessoal. Várias opções para você utilizar como exemplo para as suas necessidades. Valeu e 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 *