Obtendo informações do deployment utilizando workflows do vRealize Orchestrator 8.x

Obtendo informações do deployment utilizando workflows do vRealize Orchestrator 8.x

Quando executamos alguma ação utilizando a extensibilidade do vRA (ABX) conseguimos obter as informações do deployment com facilidade, porém, muitas pessoas ficam em dúvida em como executar a mesma ação com os workflows do vRO. Neste artigo demonstro como é simples, na verdade, é muito similar ao que fazemos no ABX. Então vamos lá.

Primeiramente vamos configurar um input chamado inputProperties com o tipo Properties. É importante lembrar que neste caso o nome importa, qualquer outro nome não irá funcionar.

Depois disso, basta adicionar o input configurado anteriormente dentro da scriptable task desejada.

Aqui vou demonstrar o mesmo código em três scriptable tasks diferentes, sendo uma com JavaScript, outra com PowerShell e a última com Python. No exemplo vou imprimir na tela o nome da VM e o endereço IP.

Segue abaixo o código para cada uma das scriptable tasks.

JavaScript

System.log("Aqui esta o nome da VM: " + inputProperties.resourceNames)
System.log("Aqui esta o IP: " + inputProperties.addresses[0])

PowerShell

function Handler($context, $inputs) {
    write-host "Aqui esta o nome da VM: " $inputs.inputProperties.resourceNames[0]
    write-host "Aqui esta o IP: " $inputs.inputProperties.addresses[0][0]
}

Python

import json
def handler(context, inputs):
    print("Aqui esta o nome da VM: " + inputs['inputProperties']['resourceNames'][0])
    print("Aqui esta o IP: " + inputs['inputProperties']['addresses'][0][0])

Agora é só criar uma subscription e adicionar o event topic desejado (aqui vamos usar o Compute Provision) e associar com o workflow.

Escolha um blueprint qualquer e manda bala. Depois, podemos ver a execução do workflow e já é possível observar o inputProperties com todas as informações do deployment que acabamos de criar. 

E como mandamos imprimir em tela o nome da VM e o endereço IP, foi exatamente isso que aconteceu 🙂 Temos 3x a mesma informação, uma em cada linguagem suportada pelo workflow do vRO.

Vamos falar sobre o desempenho? Não! Apenas tenha em mente que o JavaScript é nativo, enquanto o PowerShell e Python não, ou seja, é esperado que códigos em JavaScript sejam executados mais rapidamente.

Atualização 24/03/2023

Dependendo a quantidade de informações que você pretende enviar entre os workflows, é possível que existam várias variáveis e isso pode te consumir um bom tempo para criar-las e associa-las como input ou output nos diversos workflows. Para facilitar, é possível utilizar um array para armazenar tudo isso. Neste exemplo criei uma variável chamada meuarray do tipo array. Segue o código:

getip = inputProperties.addresses[0]
ip = getip.toString()

var meuarray = new Array {
    vmName: inputProperties.resourceNames[0],
    ip: ip,
    image: inputProperties.customProperties.image,
    os: inputProperties.customProperties.softwareName,
    osType: inputProperties.customProperties.osType,
    flavor: inputProperties.customProperties.flavor,
    environment: inputProperties.customProperties.environment,
    deploymentName: inputProperties.customProperties.infoDeployment,
    projectName: inputProperties.customProperties.infoProject,
    blueprintName: inputProperties.customProperties.infoBlueprint,
    userName: System.getContext().getParameter('__metadata_userName'),
    eventTopicId: System.getContext().getParameter('__metadata_eventTopicId')
}

// log
System.log("#-----------------------------------------#")
System.log("------> NAME: " + meuarray[0].vmName)
System.log("------> IP: " + meuarray[0].ip)
System.log("------> IMAGE: " + meuarray[0].image)
System.log("------> OS: " + meuarray[0].os)
System.log("------> OS TYPE: " + meuarray[0].osType) 
System.log("------> FLAVOR: " + meuarray[0].flavor)
System.log("------> SERVER TYPE: " + meuarray[0].serverType)
System.log("------> ENVIRONMENT: " + meuarray[0].environment)
System.log("------> DEPLOYMENT NAME: " + meuarray[0].deploymentName)
System.log("------> PROJECT: " + meuarray[0].projectName)
System.log("------> BLUEPRINT: " + meuarray[0].blueprintName)
System.log("------> USER: " + meuarray[0].userName)
System.log("------> EVENT TOPIC: " + meuarray[0].eventTopicId)
System.log("#-----------------------------------------#")

Apenas para esclarecer: VMware Aria Automation é o novo nome do vRealize Automation, o mesmo vale para o antigo vRealize Orchestrator, que agora se chama VMware Aria Automation Orchestrator. Aqui, para fins didáticos, continuo utilizando os termos vRA e vRO.

É 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 *