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!






