Demonstração de como configurar o onboarding de novos usuários no vRealize Automation 8.x – parte 2
O VMware Aria Automation (antes conhecido como VMware vRealize Automation – vRA) fornece uma extensa plataforma onde serviços podem ser disponibilizados como parte de uma experiência de catálogo. Pensando em novos usuários, o acesso ao vRA e as devidas permissões são geralmente concedidas por um administrador, porém, em organizações maiores, é interessante pensar nos próprios usuários solicitando o acesso aos serviços e, assim, manter a carga administrativa longe da equipe de operações, desta forma, este time pode ter mais tempo para pensar em automações e melhorias voltadas ao negócio.
O vRA não possui este recurso pronto para uso, porém, a ideia deste artigo é justamente demonstrar uma forma interessante de implementar isso. Para não ficar muito extenso, dividi o artigo em 3 partes:
Parte 1 – Configuração do Identity & Access Management e Cloud Assembly
Parte 2 – Configuração das actions e workflow no Orchestrator (você está aqui)
Parte 3 – Configuração do Service Broker
É necessário criar três actions: a primeira fará a autenticação via API (vraAuth), a segunda irá executar as ações no projeto de onboarding existente (patchProjectVra) e a terceira será responsável por trazer os nomes de todos os projetos do vRA no menu suspenso no formulário (getAllProjectsVra).
Aqui vamos criar a action de autenticação. Vá até o Orchestrator > Library > Actions > New Action. Defina o nome de sua preferência, configure os inputs para o servidor do vRA e credenciais de acesso.
O código é este. Fique a vontade para altera-lo conforme sua necessidade.
import requests import json def handler(context, inputs): # get fresh token res1 = requests.post(inputs['vraServer'] + '/csp/gateway/am/api/login?access_token', verify=False, headers={'Content-Type': 'application/json'}, json={'username': inputs['vraUser'], 'password': inputs['vraPass']}) token = json.loads(res1.content)['refresh_token'] # get bearer token res2 = requests.post(inputs['vraServer'] + '/iaas/api/login', verify=False, headers={'Content-Type': 'application/json'}, json={'refreshToken': token}) token2 = json.loads(res2.content) bearer = token2['tokenType'] + " " + token2['token'] return bearer
Agora iniciamos a configuração da segunda action. Importante garantir que todos os inputs sejam configurados corretamente.
Este é o código. Perceba que não tem nenhuma informação sobre a conexão com a API, faremos isso daqui a pouco utilizando variáveis na configuração do workflow.
import requests import json def handler(context, inputs): user = inputs['currentUser'] datamodify = { # add user to project "modify": [ { "email": user, "type": "user" } ] } dataremove = { # remove user from onboarding project "remove": [ { "email": user, "type": "user" } ] } # get project ID using the project name (from dropdown menu) res1 = requests.get(inputs['vraServer'] + "/project-service/api/projects?$filter=name%20eq%20'" + inputs['projectName'] + "'", verify=False, headers={'Content-Type': 'application/json', 'Authorization': inputs['vraToken']}) projectid = json.loads(res1.content)['content'][0]['id'] # add user to an existing project res2 = requests.patch(inputs['vraServer'] + '/project-service/api/projects/' + projectid + '/principals', json=datamodify, verify=False, headers={'Content-Type': 'application/json', 'Authorization': inputs['vraToken']}) adduserproject = json.loads(res2.content) #print(user + ' added to project ' + inputs['projectName']) # remove user from project res3 = requests.patch(inputs['vraServer'] + '/project-service/api/projects/' + inputs['projectidTemp'] + '/principals', json=dataremove, verify=False, headers={'Content-Type': 'application/json', 'Authorization': inputs['vraToken']}) removeuserproject = json.loads(res3.content) #print(user + ' removed from project ' + inputs['projectidTemp'])
Por fim, mas não menos importante, vamos configurar a última action. Diferente das outras, esta não fará parte do workflow, pois o papel dela é preencher o menu suspenso do formulário.
import requests import json def handler(context, inputs): # get fresh token res = requests.post(inputs['vraServer'] + '/csp/gateway/am/api/login?access_token', verify=False, headers={'Content-Type': 'application/json'}, json={'username': inputs['vraUser'], 'password': inputs['vraPass']}) token = json.loads(res.content)['refresh_token'] # get bearer token res2 = requests.post(inputs['vraServer'] + '/iaas/api/login', verify=False, headers={'Content-Type': 'application/json'}, json={'refreshToken': token}) token2 = json.loads(res2.content) bearer = token2["tokenType"] + " " + token2["token"] # get all vRA projects res3 = requests.get(inputs['vraServer'] + '/iaas/api/projects', verify=False, headers={'Content-Type': 'application/json', 'Authorization': bearer}) projects = json.loads(res3.content)['content'] result = [] i = 0 while (len(projects) > i): #print(projects[i]['name']) # log result.append(projects[i]['name']) i = i+1 return result
Agora iniciaremos a configuração do workflow. Ainda em Orchestrator, navegue até Library > Workflow > New Workflow. Defina o nome e em Schema adicione dois Action elements: um para o vRAauth e outro para o patchProjectVra.
Garanta que as variáveis estão criadas corretamente. As variáveis vraServer, vraUser, vraPass e projectidTemp precisam receber valores manualmente. O ID do projeto de onboarding que você copiou na etapa anterior, pode colocar no valor da variável projectidTemp.
Configure também os inputs dentro do workflow.
Valide os inputs e outputs de cada action antes de seguir. Esta é a primeira action, responsável pela autenticação via API. A saída desta action é o token (variável vraToken).
Agora os inputs e outputs da segunda action, aquela que irá fazer o trabalho propriamente dito. Esta não tem saída, apenas entradas.
Salve o workflow e lembre-se que não é esperado que este workflow funcione diretamente no Orchestrator, pois criamos algumas dependências com o Service Broker (custom form). Enfim, tudo o que precisavamos fazer no Orchestrator terminou. Na próxima parte iremos continuar as configurações no Service Broker.
Até mais!