Como integrar o
Automation Assembler
com o ServiceNow usando ações de extensibilidade

Com as ações de extensibilidade, é possível integrar o
Automation Assembler
a um ITSM empresarial, como o ServiceNow.
  • Antes de configurar esta integração, filtre todas as assinaturas de evento com a propriedade condicional de modelo de nuvem:
    event.data["customProperties"]["enable_servicenow"] === "true"
    Essa propriedade existe em modelos de nuvem que necessitam de uma integração do ServiceNow.
  • Baixe e instale o Python.
Para obter mais informações sobre filtragem de assinaturas, consulte Criar uma assinatura de extensibilidade.
O fluxo de integração do ServiceNow passa por vários serviços e APIs do Automation Assembler, Amazon Web Services e ServiceNow.
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 scripts de ação de extensibilidade.
Também é possível integrar o ServiceNow ao
Automation Assembler
usando fluxos de trabalho do
Automation Orchestrator Client
. Para obter informações sobre como integrar o ServiceNow usando fluxos de trabalho, consulte Como integrar o Automation Assembler para o ITSM com o ServiceNow usando os fluxos de trabalho do Automation Orchestrator Client.
Para criar essa integração, serão usados quatro scripts de ação de extensibilidade. Os três primeiros scripts são iniciados em sequência durante o provisionamento no provisionamento de processamento após o evento. O quarto script é disparado na remoção de processamento após evento.
Para obter mais informações sobre tópicos de eventos, consulte Event topics provided with Automation Assembler.
Os quatro scripts de ação de extensibilidade têm diferentes níveis de prioridade. O nível mais alto de prioridade é dado para os scripts de ação de ação de extensibilidade de CI do CMDB Obter Detalhes da VM e Desativar Serviço Agora.
Obter Detalhes da VM
O script Obter Detalhes da VM adquire detalhes adicionais de payload necessários para a criação de CI e um token de identidade, que é armazenado no
Amazon Web Services
Systems Manager Parameter Store (SSM). Além disso, esse script atualiza
customProperties
com propriedades adicionais para uso posterior.
Criar CI do CMDB do ServiceNow
O script Criar CI do CMDB do ServiceNow passa a URL da instância do ServiceNow como uma entrada e armazena a instância no SSM para atender aos requisitos de segurança. Esse script também lê a resposta do identificador de registro exclusivo do CMDB do ServiceNow (sys_id). Ele o transmite como saída e grava a propriedade personalizada
serviceNowSysId
durante a criação. Esse valor é usado para marcar a CI como desativada quando a instância é destruída.
Talvez seja preciso alocar permissões adicionais à sua função do
Serviços do VMware Aria Automation
na
Amazon Web Services
para permitir que o Lambda acesse o SSM Parameter Store.
Criar Alteração do ServiceNow
Esse script conclui a integração do ITSM passando a URL da instância do ServiceNow como uma entrada e armazenando as credenciais do ServiceNow como SSM para atender aos requisitos de segurança.
Criar Alteração do ServiceNow
O script de desativação de CI do ServiceNow solicita que o ServiceNow pare e marque a CI como desativada com base na propriedade personalizada
serviceNowSysId
que foi criada no script de criação.
  1. Abra um prompt de linha de comando na Máquina Virtual.
  2. Execute o script Obter Detalhes da VM.
    from botocore.vendored import requests import json import boto3 client = boto3.client('ssm','ap-southeast-2') def handler(context, inputs): baseUri = inputs['url'] casToken = client.get_parameter(Name="casToken",WithDecryption=True) url = baseUri + "/iaas/login" headers = {"Accept":"application/json","Content-Type":"application/json"} payload = {"refreshToken":casToken['Parameter']['Value']} results = requests.post(url,json=payload,headers=headers) bearer = "Bearer " bearer = bearer + results.json()["token"] deploymentId = inputs['deploymentId'] resourceId = inputs['resourceIds'][0] print("deploymentId: "+ deploymentId) print("resourceId:" + resourceId) machineUri = baseUri + "/iaas/machines/" + resourceId headers = {"Accept":"application/json","Content-Type":"application/json", "Authorization":bearer } resultMachine = requests.get(machineUri,headers=headers) print("machine: " + resultMachine.text) print( "serviceNowCPUCount: "+ json.loads(resultMachine.text)["customProperties"]["cpuCount"] ) print( "serviceNowMemoryInMB: "+ json.loads(resultMachine.text)["customProperties"]["memoryInMB"] ) #update customProperties outputs = {} outputs['customProperties'] = inputs['customProperties'] outputs['customProperties']['serviceNowCPUCount'] = int(json.loads(resultMachine.text)["customProperties"]["cpuCount"]) outputs['customProperties']['serviceNowMemoryInMB'] = json.loads(resultMachine.text)["customProperties"]["memoryInMB"] return outputs
  3. Execute a ação de criação do item de configuração do CMDB.
    from botocore.vendored import requests import json import boto3 client = boto3.client('ssm','ap-southeast-2') def handler(context, inputs): snowUser = client.get_parameter(Name="serviceNowUserName",WithDecryption=False) snowPass = client.get_parameter(Name="serviceNowPassword",WithDecryption=True) table_name = "cmdb_ci_vmware_instance" url = "https://" + inputs['instanceUrl'] + "/api/now/table/{0}".format(table_name) headers = {'Content-type': 'application/json', 'Accept': 'application/json'} payload = { 'name': inputs['customProperties']['serviceNowHostname'], 'cpus': int(inputs['customProperties']['serviceNowCPUCount']), 'memory': inputs['customProperties']['serviceNowMemoryInMB'], 'correlation_id': inputs['deploymentId'], 'disks_size': int(inputs['customProperties']['provisionGB']), 'location': "Sydney", 'vcenter_uuid': inputs['customProperties']['vcUuid'], 'state': 'On', 'sys_created_by': inputs['__metadata']['userName'], 'owned_by': inputs['__metadata']['userName'] } results = requests.post( url, json=payload, headers=headers, auth=(snowUser['Parameter']['Value'], snowPass['Parameter']['Value']) ) print(results.text) #parse response for the sys_id of CMDB CI reference if json.loads(results.text)['result']: serviceNowResponse = json.loads(results.text)['result'] serviceNowSysId = serviceNowResponse['sys_id'] print(serviceNowSysId) #update the serviceNowSysId customProperty outputs = {} outputs['customProperties'] = inputs['customProperties'] outputs['customProperties']['serviceNowSysId'] = serviceNowSysId; return outputs
  4. Execute o script de ação de criação.
    from botocore.vendored import requests import json import boto3 client = boto3.client('ssm','ap-southeast-2') def handler(context, inputs): snowUser = client.get_parameter(Name="serviceNowUserName",WithDecryption=False) snowPass = client.get_parameter(Name="serviceNowPassword",WithDecryption=True) table_name = "change_request" url = "https://" + inputs['instanceUrl'] + "/api/now/table/{0}".format(table_name) headers = {'Content-type': 'application/json', 'Accept': 'application/json'} payload = { 'short_description': 'Provision CAS VM Instance' } results = requests.post( url, json=payload, headers=headers, auth=(snowUser['Parameter']['Value'], snowPass['Parameter']['Value']) ) print(results.text)
O
Automation Assembler
foi integrado com êxito ao ITSM ServiceNow.
Quando desejar, será possível desativar sua CI usando a ação de desativação do item de configuração do CMDB:
from botocore.vendored import requests import json import boto3 client = boto3.client('ssm','ap-southeast-2') def handler(context, inputs): snowUser = client.get_parameter(Name="serviceNowUserName",WithDecryption=False) snowPass = client.get_parameter(Name="serviceNowPassword",WithDecryption=True) tableName = "cmdb_ci_vmware_instance" sys_id =inputs['customProperties']['serviceNowSysId'] url = "https://" + inputs['instanceUrl'] + "/api/now/"+tableName+"/{0}".format(sys_id) headers = {'Content-type': 'application/json', 'Accept': 'application/json'} payload = { 'state': 'Retired' } results = requests.put( url, json=payload, headers=headers, auth=(inputs['username'], inputs['password']) ) print(results.text)