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!