Com as ações de extensibilidade, é possível integrar o Automation Assembler a um ITSM empresarial, como o ServiceNow.

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.
Observação: Também é possível integrar o ServiceNow ao Automation Assembler usando fluxos de trabalho do Automation Orchestrator. 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.

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 Tópicos de eventos fornecidos com o 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.
Observação: Talvez seja preciso alocar permissões adicionais à sua função do VMware Aria Automation services 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.

Pré-requisitos

  • 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"
    Observação: 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.

Procedimento

  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)

Resultados

O Automation Assembler foi integrado com êxito ao ITSM ServiceNow.

O que Fazer Depois

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)