Utilizando o Orchestrator para configurar o balanceador de carga do NSX
Esses dias eu escrevi um artigo sobre como criar máquinas com balanceador de carga do NSX utilizando o vRA 8 nativamente, ou seja, bastava configurar o NSX no vRA, arrastar os elementos para o blueprint e sucesso! O que acontece é que não é possível interagir com 100% das propriedades do balanceador de carga do NSX apenas utilizando o blueprint do vRA e eventualmente será necessário usar um workflow do Orchestrator para ajudar o vRA a entregar o que é necessário. Neste caso, preciso alterar os valores do SNAT Translation Mode dentro de server pool, passando de Automap para IP Pool adicionando o IP do load balancer que acabou de ser criado pelo vRA.
Então vamos lá. Para isso, faremos uso de um workflow do Orchestrator (vRO), onde iremos alterar as configurações utilizando REST API em Javascript. Primeiro passo é criar um workflow para a autenticação no NSX. Não vou demonstrar como fazer isso aqui, pois já expliquei neste artigo. Eu chamei este workflow de Get NSX Token.
Depois disso, vamos criar o workflow que de fato será chamado pela subscription. Este workflow irá se chamar Configura NSX LB SNAT. Preste bastante atenção nas variáveis e nos inputs.
Agora na aba Schema, vamos de fato ao código.
A primeira parte é a scriptable task chamada de get-properties, onde vamos basicamente obter o ID e endereço IP do pool do NSX load balancer que foi criado pelo vRA.
// get ID from NSX LB pool var regex = /"([^"]+)"/; var match = inputProperties.customProperties.loadBalancerPoolExternalIds.match(regex); idLbVip = match[1]; // get IP from NSX LB pool ipvip = inputProperties.addresses[0]; ipLbVip = ipvip.toString();
Depois você pode adicionar o workflow Get NSX Token para autenticar no NSX e podemos fazer as chamadas necessárias.
Agora, mais uma scriptable task chamada de get-lb-pool-config, onde iremos obter as informações atuais contidas no pool. A ideia é alterar apenas o que está relacionado com o SNAT Translation.
var request = nsxHost.createRequest("GET", "/policy/api/v1/infra/lb-pools/" + idLbVip); request.setHeader("vmware-api-session-id", token); var response = request.execute(); var content = JSON.parse(response.contentAsString); var modificacao = { "ip_addresses": [ { "ip_address": ipLbVip } ], "type": "LBSnatIpPool" }; var conteudoatual = []; conteudoatual = content; conteudoatual.snat_translation = modificacao; lbPoolConfig = JSON.stringify(conteudoatual);
E por fim a última scriptable task chamada de configure-snat-lb-pool. Aqui é onde vamos de fato alterar a configuração de SNAT Translation do pool do load balancer.
var request = nsxHost.createRequest("PATCH", "/policy/api/v1/infra/lb-pools/" + idLbVip, lbPoolConfig); //JSON.stringify(body) request.contentType = "application/json"; request.setHeader("vmware-api-session-id", token); var response = request.execute(); System.log("STATUS ---> " + response.statusCode); //log
Chega de código. Agora só precisamos associar o workflow com uma subscription do Cloud Assembler. O event topic será load balancer post provision.
E é isso, toda vez que uma nova máquina for criada e o event topic load balancer post provision for acionado, automaticamente o nosso workflow Configura NSX LB SNAT irá rodar e alterar as configurações de SNAT Translation do pool do load balancer do NSX.
Até a próxima!