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

O fluxo de integração do ServiceNow passa por vários serviços e APIs do Cloud Assembly, 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 Cloud Assembly ao ServiceNow para CMDB e ITSM usando scripts de ação de extensibilidade.
Observação: Também é possível integrar o ServiceNow ao Cloud Assembly usando fluxos de trabalho do vRealize Orchestrator. Para obter informações sobre como integrar o ServiceNow usando fluxos de trabalho, consulte Como integrar o Cloud Assembly para o ITSM ao ServiceNow usando fluxos de trabalho do vRealize 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 Cloud Assembly.

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 vRealize 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 Cloud Assembly 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)

Para obter mais informações sobre como usar ações de extensibilidade para integrar o ServiceNow no Cloud Assembly, consulte Estender o Cloud Assembly com Extensibilidade com base na ação para a integração do ServiceNow.