Demonstração da API do Veeam B&R no Aria Automation – Parte 2
Hoje vamos falar sobre a API do Veeam Backup & Replication, especificamente como utiliza-la em conjunto com o Aria Automation para criarmos automações interessantes. A necessidade do cliente era bem simples e clara: toda vez que um usuário solicitasse a remoção de uma máquina produtiva no portal do Aria Automation, uma automação de backup no Veeam seria acionada fazendo um último backup da máquina com retenção de 30 dias. Após o backup ser concluido com sucesso, então a máquina virtual seria removida. Esta é a segunda parte do artigo, veja a primeira parte aqui.
Se você chegou aqui, então acredito que a autenticação e criação de um job no Veeam B&R via REST API está completamente funcional. Então vamos avançar para as próximas etapas.
Agora vamos configurar o workflow que iniciará o job de backup, ou seja, quem vai de fato fazer o backup da VM antes de ser removida. Este workflow precisa receber o ID do job do workflow anterior.
var body = { "performActiveFull": true, "startChainedJobs": false }; var operation = "/api/v1/jobs/" + veeamJobId + "/start"; var method = "POST"; var request = veeamRestHost.createRequest(method, operation, JSON.stringify(body)); request.setHeader("x-api-version", veeamApiVersion); request.setHeader("Content-Type", "application/json"); request.setHeader("Accept", "application/json"); request.setHeader("Authorization", veeamToken); var response = request.execute(); var content = JSON.parse(response.contentAsString); if (content.state) { System.log("### VEEAM B&R START JOB - SUCCESS"); } else { System.log("### VEEAM B&R START JOB - FAIL | CODE: " + response.statusCode + " | DETAILS: " + response.contentAsString); }
Show. A próxima etapa é onde verificamos se o job de backup obteve sucesso. É fundamental que esta etapa seja bem testada, pois não queremos que a VM seja removida sem garantir que o backup foi concluido com sucesso. Antes da scriptable task iniciar, coloquei um timer de 2 minutos para dar um tempo da task do job de backup avançar. No código em si, coloquei um sleep que aguarda 1 minuto entre cada validação de status.
var running = true; while (running) { var operation = "/api/v1/jobs/states?idFilter=" + veeamJobId; var method = "GET"; var request = veeamRestHost.createRequest(method, operation); request.setHeader("x-api-version", veeamApiVersion); request.setHeader("Accept", "application/json"); request.setHeader("Authorization", veeamToken); var response = request.execute(); var content = JSON.parse(response.contentAsString); if (content.data[0].status == "inactive") { System.log("### VEEAM B&R GET JOB STATUS | STATUS: " + content.data[0].status + " | JOB RESULT: " + content.data[0].lastResult); jobResult = content.data[0].lastResult; running = false; } System.sleep(60000); // wait 1min }
Agora eu adicionei um item genérico de decisão, onde valido se o status do job de backup. Se o job foi executado com sucesso, então sigo termino o workflow e a máquina seguirá o seu caminho rumo a deleção. Caso contrário, deleto o job e encerro o workflow com falha, fazendo com que o processo de deleção seja parado.
if (jobResult == "Success") { System.log("### VEEAM B&R JOB RESULT - SUCCESS"); return true; } else { System.log("### VEEAM B&R JOB RESULT - FAIL"); return false; }
E por último, mas não menos importante temos o workflow de remoção do job. Importante lembrar que este workflow somente será executado em caso do job de backup não ter sido executado com sucesso.
var operation = "/api/v1/jobs/" + veeamJobId; var method = "DELETE"; var request = veeamRestHost.createRequest(method, operation); request.setHeader("x-api-version", veeamApiVersion); request.setHeader("Content-Type", "application/json"); request.setHeader("Accept", "application/json"); request.setHeader("Authorization", veeamToken); var response = request.execute(); var content = JSON.parse(response.contentAsString); if (response.statusCode == 204) { System.log("### VEEAM B&R DELETE JOB - SUCCESS"); } else { System.log("### VEEAM B&R DELETE JOB - FAIL | CODE: " + response.statusCode + " | DETAILS: " + response.contentAsString); }
Agora, no Aria Automation, basta criar uma Subscription com o tópico de evento Compute removal e associar com o seu workflow. É óbvio, mas não custa lembrar: o backup precisa ser realizado ANTES da máquina virtual ser destruida!
Na parte 1 deste artigo eu mostrei o schema do workflow principal, ou seja, visualmente como são os workflows. Abaixo mostro as imagens sobre as variáveis e inputs/outputs.
Espero que esta demonstração tenha lhe ajudado a entender o processo como um todo. É isso aí, pessoal. Até a próxima!