Utilizzando le azioni di estendibilità è possibile integrare Cloud Assembly con una ITSM aziendale, come ServiceNow.

Il flusso di integrazione di ServiceNow passa attraverso diversi servizi e API di Cloud Assembly, Amazon Web Services e ServiceNow.
In genere gli utenti aziendali integrano la propria piattaforma di gestione del cloud con una piattaforma di gestione dei servizi IT (ITSM, IT Service Management) e un database di gestione della configurazione (CMDB, Configuration Management Database) a scopo di conformità. Seguendo questo esempio è possibile integrare Cloud Assembly con ServiceNow per CMDB e ITSM utilizzando gli script dell'azione di estendibilità.
Nota: È inoltre possibile integrare ServiceNow con Cloud Assembly utilizzando i workflow di vRealize Orchestrator. Per informazioni sull'integrazione di ServiceNow tramite workflow, vedere Come integrare Cloud Assembly per ITSM con ServiceNow utilizzando i workflow di vRealize Orchestrator.

Per creare questa integrazione, si utilizzano quattro script dell'azione di estendibilità. I primi tre script vengono avviati in sequenza durante il provisioning, nell'evento successivo al provisioning della risorsa di elaborazione. Il quarto script viene attivato nell'evento successivo alla rimozione della risorsa di elaborazione.

Per ulteriori informazioni sugli argomenti degli eventi, fare riferimento a Argomenti degli eventi forniti con Cloud Assembly.

I quattro script dell'azione di estendibilità hanno livelli di priorità diversi. Il livello di priorità più alto è assegnato per gli script dell'azione di estendibilità Recupera dettagli della macchina virtuale e Ritira CI CMDB di ServiceNow.

Recupera dettagli della macchina virtuale

Lo script Recupera dettagli della macchina virtuale acquisisce ulteriori dettagli del payload, necessari per la creazione di CI e un token di identità archiviato in Amazon Web Services Systems Manager Parameter Store (SSM). Inoltre, questo script aggiorna customProperties con proprietà aggiuntive per un uso successivo.

Crea CI CMDB di ServiceNow
Lo script Crea CI CMDB di ServiceNow passa l'URL dell'istanza di ServiceNow come input e archivia l'istanza in SSM per soddisfare i requisiti di sicurezza. Questo script legge anche la risposta dell'identificatore univoco del record CMDB di ServiceNow (sys_id). Lo passa come output e scrive la proprietà personalizzata serviceNowSysId durante la creazione. Questo valore viene utilizzato per contrassegnare CI come ritirato quando l'istanza viene eliminata.
Nota: È possibile che sia necessario allocare autorizzazioni aggiuntive al ruolo vRealize Automation services Amazon Web Services per consentire a Lambda di accedere a SSM Parameter Store.

Crea modifica ServiceNow

Questo script completa l'integrazione di ITSM passando l'URL dell'istanza di ServiceNow come input e archiviando le credenziali di ServiceNow come SSM per soddisfare i requisiti di sicurezza.

Crea modifica ServiceNow

Lo script Ritira CI CMDB di ServiceNow richiede l'interruzione di ServiceNow e contrassegna CI come ritirato in base alla proprietà personalizzata serviceNowSysId creata nello script di creazione.

Prerequisiti

  • Prima di configurare questa integrazione, filtrare tutte le sottoscrizioni agli eventi con la proprietà condizionale del modello cloud: event.data["customProperties"]["enable_servicenow"] === "true"
    Nota: Questa proprietà è presente nei modelli cloud che richiedono un'integrazione di ServiceNow.
  • Scaricare e installare Python.

Per ulteriori informazioni su come filtrare le sottoscrizioni, vedere Creazione di una sottoscrizione di estendibilità.

Procedura

  1. Aprire un prompt della riga di comando dalla macchina virtuale.
  2. Eseguire lo script Recupera dettagli della macchina virtuale.
    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. Eseguire l'azione di creazione dell'elemento di configurazione 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. Eseguire lo script dell'azione di creazione.
    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)

risultati

Cloud Assembly è stato integrato correttamente con ITSM ServiceNow.

Operazioni successive

Quando desiderato, è possibile ritirare CI utilizzando l'azione di ritiro dell'elemento di configurazione 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)

Per ulteriori informazioni su come utilizzare le azioni di estendibilità per integrare ServiceNow in Cloud Assembly, vedere Estensione di Cloud Assembly con l'estendibilità basata su azione per l'integrazione di ServiceNow.