Envio de webhook no Discord quando novo recurso é criado no vRealize Automation 8.x

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *