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!


