Envio de webhook no Discord quando novo recurso é criado no vRealize Automation 8.x
Estes dias escrevi aqui como enviar mensagem de e-mail quando um novo recurso é criado. Basedo naquele artigo, quero demonstrar aqui como seria enviar um webhook para o Discord. A lógica é identica, muda apenas o código da ABX.
Sem mais delongas começaremos pelo código. Eu peguei o modelo de envio de webhook do Eduardo Pereira. Vamos criar uma nova action no vRA (Cloud Assembly > Extensibility > Library > Actions > New Action).
from urllib.request import urlopen import json from discord_webhook import DiscordWebhook, DiscordEmbed def handler(context, inputs): user = inputs['__metadata']['userName'] project = inputs['customProperties']['infoProject'] deployment = inputs['customProperties']['infoDeployment'] hostname = inputs['resourceNames'][0] ip = inputs['addresses'][0][0] size = inputs['customProperties']['flavor'] webhook = DiscordWebhook(url='https://discord.com/api/webhooks/xxxxxxxxxxxxxxxxxxx') embed = DiscordEmbed(title='Created: ' + deployment, description='%s | %s' %(user, project), color='00ff00') embed.set_author(name='Caverna Cloud', icon_url='https://br.seaicons.com/wp-content/uploads/2017/03/Homer-Simpson-04-Happy-icon.png') embed.add_embed_field(name='Hostname',value='%s' %(hostname)) embed.add_embed_field(name='IP',value='%s' %(ip)) embed.add_embed_field(name='Size',value='%s' %(size)) webhook.add_embed(embed) response = webhook.execute(embed)
Nas dependências adicione DiscordWebhook discord discord-webhook, FaaS provider On Prem e só.
Agora vamos criar uma subscription apontando para a action que acabamos de criar. O event topic será compute post provision, ou seja, queremos que o webhook seja enviado após o provisionamento do recurso. Lembre-se de habilitar o Blocking.
Pronto, vamos criar um blueprint beeeem simples só pra ver essa action em execução.
formatVersion: 1 inputs: {} resources: VM: type: Cloud.vSphere.Machine properties: image: Ubuntu 22.04 flavor: Small infoProject: ${env.projectName} infoBlueprint: ${env.blueprintName} infoDeployment: ${env.deploymentName} constraints: - tag: cluster-name:vsan networks: - network: ${resource.Network.id} assignment: static Network: type: Cloud.vSphere.Network properties: networkType: existing constraints: - tag: network-name:vmnet_100
Vou solicitar um recurso para ver a mágica acontecer. Neste caso, quando recurso chegar no ponto de post provision (após o provisionamento), a subscription irá acionar a action e o webhook será criado no Discord.
Webhook recebido com sucesso.
Se quiser é possível criar uma action para enviar um webhook quando um recurso for removido. Criei uma nova action com o mesmo código, apenas alterei a cor lateral e troquei created por removed (criativo haha). Criei uma nova subscription e em event topic defini como compute removal, ou seja, acione aquele gatilho quando o computador for removido.
E é isso aí, webhook recebido com sucesso!
A ideia aqui foi apenas demonstrar como enviar um webhook para o Discord com Python no vRA. Fique a vontade para usar este modelo e adaptar para a sua realidade.
PS: nem mencionei nada de como configurar o Discord porque além de ser rídiculo de simples, tem um monte de tutoriais por aí.
Até mais!
Apenas para esclarecer: VMware Aria Automation é o novo nome do vRealize Automation. Aqui, para fins didáticos, continuo utilizando o termo vRA.