Usando fluxos de trabalho hospedados do Automation Orchestrator, é possível integrar o Automation Assembler ao ServiceNow para conformidade de ITSM.
Os usuários corporativos normalmente integram sua plataforma de gerenciamento de nuvem a uma plataforma de gerenciamento de serviços de TI (ITSM) e a um database de gerenciamento de configuração (CMDB) para conformidade. Seguindo este exemplo, é possível integrar o
Automation Assembler ao ServiceNow para CMDB e ITSM usando fluxos de trabalho hospedados do
Automation Orchestrator. Durante o uso das integrações e dos fluxos de trabalho do
Automation Orchestrator, as tags de capacidade serão especialmente úteis se houver várias instâncias para ambientes diferentes. Para obter mais informações sobre tags de capacidade, consulte
Como usar tags de capacidade no Automation Assembler.
Neste exemplo, a integração do ServiceNow é composta por três fluxos de trabalho de alto nível. Cada fluxo de trabalho tem suas próprias assinaturas para que você possa atualizar e iterar cada componente individualmente.
- O log básico do ponto de entrada de assinatura de eventos identifica o usuário solicitante e a VM do vCenter, se aplicável.
- Fluxo de trabalho de integração — separa objetos e alimenta as entradas no fluxo de trabalho técnico, gerencia as atualizações de log, propriedade e saída.
- Fluxo de trabalho técnico — integração de sistema downstream para API ServiceNow para criar a API da IaaS de IC do CMDB, CR e Automation Assembler com propriedades de máquina virtual fora do payload.
Procedimento
- Crie e salve um arquivo de configuração no Automation Orchestrator que contenha a configuração comum usada em vários fluxos de trabalho.
- Salve o token de API do Automation Assembler no mesmo local, como o arquivo de configuração da Etapa 1.
Observação: O token de API do
Automation Assembler tem validade.
- Crie um fluxo de trabalho no Automation Orchestrator com o elemento de script fornecido. Este script faz referência e localiza um host REST. Ele também padroniza as ações REST que usam um parâmetro opcional de um token, que é adicionado como um cabeçalho de autorização extra.
var configPath = "CS"
var configName = "environmentConfig"
var attributeName = "CASRestHost"
//get REST Host from configuration element
var restHost = System.getModule("au.com.cs.example").getRestHostFromConfig(configPath,configName,attributeName)
var ConfigurationElement = System.getModule("au.com.cs.example").getConfigurationElementByName(configName,configPath);
System.debug("ConfigurationElement:" + ConfigurationElement);
var casToken = ConfigurationElement.getAttributeWithKey("CASToken")["value"]
if(!casToken){
throw "no CAS Token";
}
//REST Template
var opName = "casLogin";
var opTemplate = "/iaas/login";
var opMethod = "POST";
// create the REST operation:
var opLogin = System.getModule("au.com.cs.example").createOp(restHost,opName,opMethod,opTemplate);
//cas API Token
var contentObject = {"refreshToken":casToken}
postContent = JSON.stringify(contentObject);
var loginResponse = System.getModule("au.com.cs.example").executeOp(opLogin,null,postContent,null) ;
try{
var tokenResponse = JSON.parse(loginResponse)['token']
System.debug("token: " + tokenResponse);
} catch (ex) {
throw ex + " No valid token";
}
//REST Template Machine Details
var opName = "machineDetails";
var opTemplate = "/iaas/machines/" + resourceId;
var opMethod = "GET";
var bearer = "Bearer " + tokenResponse;
var opMachine = System.getModule("au.com.cs.example").createOp(restHost,opName,opMethod,opTemplate);
// (Rest Operation, Params, Content, Auth Token)
var vmResponse = System.getModule("au.com.cs.example").executeOp(opMachine,null,"",bearer) ;
try{
var vm = JSON.parse(vmResponse);
} catch (ex) {
throw ex + " failed to parse vm details"
}
System.log("cpuCount: " + vm["customProperties"]["cpuCount"]);
System.log("memoryInMB: " + vm["customProperties"]["memoryInMB"]);
cpuCount = vm["customProperties"]["cpuCount"];
memoryMB = vm["customProperties"]["memoryInMB"];
Esse script envia a saída cpuCount e memoryMB para o fluxo de trabalho principal e atualiza as propriedades das customProperties existentes. Esses valores podem ser usados em fluxos de trabalho subsequentes ao criar o CMDB.
- Adicione o elemento de script Criar IC do ServiceNow CMDB ao seu fluxo de trabalho. Esse elemento localiza o host REST do ServiceNow usando o item de configuração, cria uma operação REST para a tabela cmdb_ci_vmware_instance, cria uma cadeia de caracteres de objeto de conteúdo com base em entradas do fluxo de trabalho para postar dados e gera o sys_idretornado.
var configPath = "CS"
var configName = "environmentConfig"
var attributeName = "serviceNowRestHost"
var tableName = "cmdb_ci_vmware_instance"
//get REST Host from configuration element
var restHost = System.getModule("au.com.cs.example").getRestHostFromConfig(configPath,configName,attributeName)
//REST Template
var opName = "serviceNowCreatCI";
var opTemplate = "/api/now/table/" + tableName;
var opMethod = "POST";
// create the REST operation:
var opCI = System.getModule("au.com.cs.example").createOp(restHost,opName,opMethod,opTemplate);
//cmdb_ci_vm_vmware table content to post;
var contentObject = {};
contentObject["name"] = hostname;
contentObject["cpus"] = cpuTotalCount;
contentObject["memory"] = MemoryInMB;
contentObject["correlation_id"]= deploymentId
contentObject["disks_size"]= diskProvisionGB
contentObject["location"] = "Sydney";
contentObject["vcenter_uuid"] = vcUuid;
contentObject["state"] = "On";
contentObject["owned_by"] = owner;
postContent = JSON.stringify(contentObject);
System.log("JSON: " + postContent);
// (Rest Operation, Params, Content, Auth Token)
var ciResponse = System.getModule("au.com.cs.example").executeOp(opCI,null,postContent,null) ;
try{
var cmdbCI = JSON.parse(ciResponse);
} catch (ex) {
throw ex + " failed to parse ServiceNow CMDB response";
}
serviceNowSysId = cmdbCI['result']['sys_id'];
- Usando a saída do fluxo de trabalho secundário, crie um objeto de propriedades usando o customProperties existente e substitua a propriedade serviceNowSysId pelo valor do ServiceNow. Esse ID exclusivo é usado no CMDB para marcar uma instância como desativada na destruição.