Demonstração da API do Veeam B&R no Aria Automation – Parte 2

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!

Deixe um comentário

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