Solicitando um item de catálogo do Aria Automation utilizando o Terraform
Antes de mais nada veja o artigo anterior sobre o provedor do vRA no Terraform. Vou assumir que você sabe sobre o que estou falando e vou direto ao assunto. Vamos começar com um blueprint simples:
formatVersion: 1
inputs:
ambiente:
type: string
title: Ambiente
description: Selecione o ambiente para deploy
#default: prod
oneOf:
- title: Produção
const: prod
- title: Desenvolvimento
const: dev
servico:
type: string
title: Serviço
description: Selecione o tipo do servidor
oneOf:
- title: Application
const: app
- title: Database
const: db
- title: Web Server
const: web
so:
type: string
title: Sistema Operacional
description: Selecione o sistema operacional
oneOf:
- title: Ubuntu 22.04
const: Ubuntu 22.04
- title: Ubuntu 22.10
const: Ubuntu 22.10
instancias:
type: integer
title: Instâncias
description: Digite a quantidade de instâncias desejada
maximum: 10
minimum: 1
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
resources:
VM:
type: Cloud.vSphere.Machine
properties:
name: '${"CAV-" + (input.ambiente == "prod" ? "P" : "D") + "-" + to_upper(input.servico) + "-"}'
image: ${input.so}
flavor: Small
servico: ${input.servico}
ambiente: ${input.ambiente}
constraints:
- tag: ${'environment:' + (input.ambiente)}
- tag: ${'service:' + (input.servico)}
networks:
- network: ${resource.rede.id}
assignment: static
attachedDisks: ${map_to_object(slice(resource.disco[*].id, length(input.discoadicional)*count.index, length(input.discoadicional)*(count.index+1)), "source")}
rede:
type: Cloud.vSphere.Network
properties:
networkType: existing
constraints:
- tag: ${'environment:' + (input.ambiente)}
- tag: ${'service:' + (input.servico)}
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}
Agora basta versionar o blueprint e publica-lo no catálogo do vRA. Garanta que o usuário utilizado pelo Terraform tenha acesso a este item de catálogo. Vamos criar o arquivo main.tf.
terraform {
required_providers {
vra = {
source = "vmware/vra"
}
}
}
provider "vra" {
url = var.url
refresh_token = var.refresh_token
insecure = var.insecure
}
data "vra_project" "this" {
name = var.project_name
}
data "vra_catalog_item" "this" {
name = var.catalog_item_name
expand_versions = true
}
resource "vra_deployment" "this" {
catalog_item_id = data.vra_catalog_item.this.id
catalog_item_version = var.catalog_item_version
project_id = data.vra_project.this.id
name = var.deployment_name
description = var.deployment_desc
inputs = {
ambiente = var.input_ambiente
servico = var.input_servico
so = var.input_so
instancias = var.input_instancias
discoadicional = jsonencode(var.input_discoadicional)
}
timeouts {
create = var.timeout_create
update = var.timeout_update
delete = var.timeout_delete
}
}
E por fim, vamos criar o arquivo variables.tf contendo todas as variáveis que são necessárias para conseguirmos fazer deploy do item de catálogo no vRA.
##### ARIA AUTOMATION (VRA) ENVIRONMENT #####
variable "url" {
type = string
default = "https://seu-vra-lindao"
}
variable "refresh_token" {
type = string
default = "xyz"
}
variable "insecure" {
type = bool
default = "true"
}
##### PROJECT AND CATALOG ITEM #####
variable "project_name" {
type = string
default = "seu-projeto"
}
variable "catalog_item_name" {
type = string
default = "seu item de catálogo"
}
variable "catalog_item_version" {
type = string
default = "versão do item de catálogo. Ex: 1.1"
}
##### DEPLYOMENT #####
variable "deployment_name" {
type = string
default = "ubuntu terraform"
}
variable "deployment_desc" {
type = string
default = "terraform test"
}
##### INPUTS #####
variable "input_ambiente" {
type = string
default = "prod"
}
variable "input_servico" {
type = string
default = "app"
}
variable "input_so" {
type = string
default = "Ubuntu 22.04"
}
variable "input_instancias" {
type = number
default = 1
}
variable "input_discoadicional" {
type = list(object({
size = number
SCSIController = string
}))
default = [
{
size = 10
SCSIController = "SCSI_Controller_1"
}
]
}
##### TIMEOUT #####
variable "timeout_create" {
type = string
default = "30m"
}
variable "timeout_update" {
type = string
default = "30m"
}
variable "timeout_delete" {
type = string
default = "30m"
}
Agora execute .\terraform.exe init e depois .\terraform.exe apply para fazermos o deploy do item de catálogo de fato.
E é isso aí, o item de catálogo foi criado com sucesso!
Até a próxima. Valeu!


