Reservando endereço IP no IPAM interno do Aria Automation 8.x
Hoje vamos ver uma automação no Orchestrator para efetuar reservas de IP no IPAM interno do Aria Automation. Sim, concordo que esta opção deveria existir nativamente via GUI, mas como não é o caso, podemos cria-la baseado na opção existente na API.
Um cliente me apresentou a necessidade de reservar alguns endereços IP que seriam utilizados para servidores que estão fora do Aria Automation e uma vez que não é possível alterar o Range IP associado com uma rede em uso, a forma que encontramos foi reservar alguns endereços IP dentro do Range existente para que ele pudesse utilizar para os outros servidores sem afetar as solicitações futuras do Automation.
O procedimento em si é bastante simples. Segue abaixo o resultado final e na sequência o passo a passo de como fazer. Booooora!
Antes de mais nada, precisaremos de algumas actions que serão utilizadas em conjunto com actions que vamos criar aqui. Então, siga este artigo para cria-las previamente: Exemplo de como utilizar chamadas REST API nas actions do Orchestrator.
Vamos para a primeira action. Ela chamada de getAllNetworkIpRangeNames e tem o return type do tipo string com o checkbox do array selecionado, pois serão retornados multiplas opções. Ela é responsável por listas todos os IP ranges existentes no Automation. Apenas isso, um simples dropdown menu.
// get vRA Rest Host var vraRestHost = System.getModule('conza.library').getRestHost('vRA'); // get vRA token var token = System.getModule('conza.library').getVraToken(); // get all network ip ranges var operation = "/iaas/api/network-ip-ranges?$top=1000" var method = "GET"; var request = vraRestHost.createRequest(method, operation); request.contentType = "application/json"; request.setHeader("Authorization", token); var response = request.execute(); var content = JSON.parse(response.contentAsString); //System.log(response.statusCode); var allRanges = content.content; var result = []; for (i = 0; i < allRanges.length; i++) { //System.log(allipranges[i].name); result.push(allRanges[i].name); } return result;
A segunda action foi chamada de getNetworkIpRangeScopeByName e ela exibe o tipo do IP Range (IPv4 ou IPv6) e detalha o IP de inicio e fim, ou seja, serve apenas para ajudar o usuário. O return type é string e o input foi chamado de ipRangeName do tipo string também. Como este é um campo informativo, você pode configura-lo como read only.
// get vRA Rest Host var vraRestHost = System.getModule('conza.library').getRestHost('vRA'); // get vRA token var token = System.getModule('conza.library').getVraToken(); // get all network ip ranges var operation = "/iaas/api/network-ip-ranges?$top=1000" var method = "GET"; var request = vraRestHost.createRequest(method, operation); request.contentType = "application/json"; request.setHeader("Authorization", token); var response = request.execute(); var content = JSON.parse(response.contentAsString); //System.log(response.statusCode); var allRanges = content.content; for (i = 0; i < allRanges.length; i++) { //System.log(allipranges[i].name); if (allRanges[i].name == ipRangeName) { var result = "Version: " + allRanges[i].ipVersion + " | Scope: " + allRanges[i].startIPAddress + " - " + allRanges[i].endIPAddress; } } return result;
A terceira a última action é a responsável por encontrar o ID do Range IP baseado no nome escolhido no drop down menu. Esta action pode ficar invisivel para o usuário. O nome ficou getNetworkIpRangeIdByName e existe um input chamado ipRangeName do tipo string.
// get vRA Rest Host var vraRestHost = System.getModule('conza.library').getRestHost('vRA'); // get vRA token var token = System.getModule('conza.library').getVraToken(); // get all network ip ranges var operation = "/iaas/api/network-ip-ranges?$top=1000" var method = "GET"; var request = vraRestHost.createRequest(method, operation); request.contentType = "application/json"; request.setHeader("Authorization", token); var response = request.execute(); var content = JSON.parse(response.contentAsString); //System.log(response.statusCode); var allRanges = content.content; for (i = 0; i < allRanges.length; i++) { //System.log(allipranges[i].name); if (allRanges[i].name == ipRangeName) { var result = allRanges[i].id; } } return result;
Agora vamos para o workflow em si. Chamei ele de Reserve IP Address, adicionei um workflow para obter o token do vRA (Aria Automation) e um scriptable task com o código que fará a reserva do endereço IP no Range IP que for selecionado. Se atente aos inputs.
var body = { "description": description, "ipAddresses": [reservedIp] }; var operation = "/iaas/api/network-ip-ranges/" + rangeIpId + "/ip-addresses/allocate?apiVersion=2021-07-15"; var method = "POST"; var request = vraRestHost.createRequest(method, operation, JSON.stringify(body)); request.contentType = "application/json"; request.setHeader("Authorization", bearerToken); var response = request.execute(); var content = JSON.parse(response.contentAsString); System.log("---> STATUS CODE: " + response.statusCode);
Agora você pode escolher se publica este workflow como um item de catálogo no catálogo de serviços ou se irá utiliza-lo apenas no Orchestrator diretamente. A escolha é sua!
É isso aí, pessoal. Se não funcionar, volta e tenta de novo 🙂 Abraço e até a próxima!