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

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

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.

A ideia aqui é demonstrar como eu construi esta automação passo a passo. Antes de mais nada, vamos ver um resumo das automações que foram necessárias para atingir o objetivo em questão:

  • Obter o token do Veeam B&R;
  • Criar um job de backup baseado na máquina que será removida;
  • Iniciar o job de backup;
  • Garantir que o job de backup foi executado com sucesso;
  • Se houve sucesso na execução do job, então remover a máquina virtual, caso contrário, deletar o job e não remover a máquina.

Abaixo temos uma imagem do workflow principal (chamado de Veeam Last Chance) para entendermos com detalhes do que estou falando.

Lembre-se que esta automação é uma demonstração e/ou um caso de uso especifico. Você pode usar a base e adequar para o seu uso. Por exemplo: é possível, com o uso do Enterprise Manager, não criar um job de backup, mas sim utilizar o VeeamZIP (a chamada REST API seria para o Enterprise Manager e não para o B&R). Outro exemplo poderia ser sobre remover o job de backup independentemente do backup ter sucesso ou não, facilitando assim a vida do time que administra a solução de backup. Enfim, existem infinitas possibilidades e tudo está baseado na necessidade 🙂

Ah, tudo o que eu usei foi a documentação oficial REST API Reference e foi bem tranquilo encontrar as chamadas, seguir os exemplos e etc.

Olhando a imagem acima, deve ter ficado claro que são vários workflows que estão dentro de um workflow principal. Recomendo criar e testar os workflows individualmente antes de seguir para o próximo. Desta forma, é possível garantir que está funcionando adequadamente.

Então vamos lá. Começando com o workflow de autenticação. Neste caso, o objetivo é obter o token do Veeam B&R utilizando a credencial. Este token será usado em todos os outros workflows, ele será a nossa autenticação para as chamadas REST API. A validade deste token é de exatamente 60 minutos.

var body = "grant_type=password&username=" + veeamUser + "&password=" + veeamPass;

var operation = "/api/oauth2/token";
var method = "POST";
var request = veeamRestHost.createRequest(method, operation, body);

request.setHeader("x-api-version", veeamApiVersion);
request.setHeader("Content-Type", "application/x-www-form-urlencoded");
request.setHeader("Accept", "application/json");

var response = request.execute();
var content = JSON.parse(response.contentAsString);

if (content.access_token) {
    veeamToken = content.token_type + " " + content.access_token;
    System.log("### VEEAM B&R TOKEN - SUCCESS");
} else {
    System.log("### VEEAM B&R TOKEN - FAIL | CODE: " + response.statusCode + " | DETAILS: " + response.contentAsString);
}

Se o workflow do token está funcionando corretamente, então podemos seguir para o próximo. Agora iremos criar o workflow que cria um job de backup no Veeam B&R. Aqui é esperado como input, um objeto do tipo máquina virtual do vCenter (VC:VirtualMachine), contendo as informações da máquina que será removida. É possível obter estas informações usando o UUID e External IDs a partir do Aria Automation. Algo similar a isso:

vcUuid = inputProperties.customProperties.vcUuid;
externalIds = inputProperties.externalIds[0];
vm = System.getModule("com.vmware.vra.xaas").findVcVmByVcAndVmUuid(vcUuid,externalIds);

Observe a imagem abaixo. Atente-se aos inputs e outputs de todos os workflows. Eles são fundamentais para garantir que tudo funcione corretamente.

var jobName = vm.name + " - LAST CHANCE";
var jobDesc = "Aria Automation - Last backup of VM " + vm.name + " before removal. Retention of 30 days. Removed by " + userName;
var VmObjectName = vm.name;
var VmObjectId = vm.id;
var vcenterName = vm.sdkId.split("/")[0];

var body = {
    "name": jobName,
    "description": jobDesc,
    "type": "Backup",
    "isHighPriority": false,
    "virtualMachines": {
        "includes": [
            {
                "type": "VirtualMachine",
                "hostName": vcenterName,
                "name": VmObjectName,
                "objectId": VmObjectId,
                "platform": "VMware"
            }
        ]
    },
    "storage": {
        "backupRepositoryId": "88788f9e-d8f5-4eb4-bc4f-9b3f5403bcec",
        "backupProxies": {
            "autoSelectEnabled": true
        },
        "retentionPolicy": {
            "type": "Days",
            "quantity": 30
        },
        "gfsPolicy": {
            "isEnabled": false
        }
    },
    "guestProcessing": {
        "appAwareProcessing": {
            "isEnabled": false
        },
        "guestFSIndexing": {
            "isEnabled": false
        },
        "guestInteractionProxies": {
            "autoSelectEnabled": true
        }
    },
    "schedule": {
        "runAutomatically": false
    }
};

var operation = "/api/v1/jobs/";
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.id) {
    veeamJobId = content.id;
    System.log("### VEEAM B&R CREATE JOB - SUCCESS");
} else {
    System.log("### VEEAM B&R CREATE JOB - FAIL | CODE: " + response.statusCode + " | DETAILS: " + response.contentAsString);
}

Lembre-se que algumas informações que estão dentro da variável body são relacionadas com o meu ambiente. Por exemplo: o valor do campo backupRepositoryId. Por isso, o melhor é criar um job de teste, fazer um GET nele e obter estas informações para ajudar no seu workflow.

Recomendo fortemente que antes de seguir, você garanta que é possível se autenticar no Veeam V&R e criar um job de backup. Se isso estiver acontecendo, na segunda parte deste artigo daremos continuidade as demais configurações.

Até mais!

Deixe um comentário

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