Met uitbreidbaarheidsacties kunt u Cloud Assembly integreren met zakelijk ITSM, zoals ServiceNow.

De ServiceNow-integratiestroom doorloopt verschillende Cloud Assembly-, Amazon Web Services- en ServiceNow-services en -API's.
Zakelijke gebruikers integreren voor compliance doorgaans hun cloudbeheerplatform met een IT Service Management- (ITSM) en Configuration Management Database-platform (CMDB). In het volgende voorbeeld kunt u Cloud Assembly met ServiceNow voor CMDB en ITSM integreren door uitbreidbaarheidsactiescripts te gebruiken.
Opmerking: U kunt ServiceNow ook met Cloud Assembly integreren door vRealize Orchestrator-werkstromen te gebruiken. Zie Hoe integreer ik Cloud Assembly voor ITSM met ServiceNow met behulp van vRealize Orchestrator-werkstromen voor informatie over het integreren van ServiceNow door werkstromen te gebruiken.

Om deze integratie te maken, gebruikt u vier uitbreidbaarheidsactiescripts. De eerste drie scripts worden tijdens het inrichten sequentieel geïnitialiseerd bij de post-gebeurtenis voor het inrichten van de berekening. Het vierde script wordt geactiveerd bij de post-gebeurtenis voor het verwijderen van de berekening.

Zie De gebeurtenisonderwerpen van Cloud Assembly voor meer informatie over gebeurtenisonderwerpen.

De vier uitbreidbaarheidsactiescripts hebben verschillende prioriteitsniveaus. Het hoogste prioriteitsniveau wordt gegeven voor de uitbreidbaarheidsactiescripts 'VM-gegevens ophalen' en 'Service Now CMDB CI buiten gebruik stellen'.

VM-gegevens ophalen

Het script VM-gegevens ophalen haalt aanvullende gegevens van de lading op die vereist zijn voor het maken van CI en een identiteitstoken dat is opgeslagen in Amazon Web Services Systems Manager Parameter Store (SSM). Verder werkt dit script customProperties bij met aanvullende eigenschappen voor later gebruik.

ServiceNow CMDB CI maken
Het script ServiceNow CMDB CI maken geeft de URL van de ServiceNow-instantie als invoer door en slaat de instantie in SSM op om aan de beveiligingsvereisten te voldoen. Dit script leest ook het unieke record-id-antwoord van ServiceNow CMDB (sys_id). Het geeft dit door als uitvoer en schrijft de aangepaste eigenschap serviceNowSysId tijdens het maken. Deze waarde wordt gebruikt om de CI als Buiten gebruik gesteld te markeren wanneer de instantie is vernietigd.
Opmerking: Er moeten mogelijk aanvullende rechten aan uw vRealize Automation services Amazon Web Services-rol worden toegewezen om Lambda toegang tot de SSM Parameter Store te geven.

ServiceNow-wijziging maken

Dit script voltooit de ITSM-integratie door de URL van de ServiceNow-instantie als invoer door te geven en de ServiceNow-verificatiegegevens als SSM op te slaan om aan de beveiligingsvereisten te voldoen.

ServiceNow-wijziging maken

Het ServiceNow-script voor het buiten gebruik stellen van CMDB vraagt ServiceNow om te stoppen en markeert de CI als buiten gebruik gesteld op basis van de aangepaste eigenschap serviceNowSysId die in het aanmaakscript is gemaakt.

Voorwaarden

  • Voordat u deze integratie configureert, filtert u alle gebeurtenisabonnementen met de voorwaardelijke cloudsjablooneigenschap: event.data["customProperties"]["enable_servicenow"] === "true"
    Opmerking: Deze eigenschap bestaat in cloudsjablonen die een ServiceNow-integratie vereisen.
  • Download en installeer Python.

Zie Een uitbreidbaarheidsabonnement maken voor meer informatie over het filteren van abonnementen.

Procedure

  1. Open een opdrachtregelprompt vanaf uw virtuele machine.
  2. Voer het script VM-gegevens ophalen uit.
    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. Voer de actie voor het maken van een CMDB-configuratie-item uit.
    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. Voer het script voor de aanmaakactie uit.
    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)

resultaten

Cloud Assembly is geïntegreerd met ITSM ServiceNow.

Volgende stappen

Indien gewenst kunt u uw CI buiten gebruik stellen door gebruik te maken van de actie voor het buiten gebruik stellen van het CMDB-configuratie-item:
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)

Voor meer informatie over hoe u uitbreidbaarheidsacties kunt gebruiken om ServiceNow in Cloud Assembly te integreren, raadpleegt u Extending Cloud Assembly with Action Based Extensibility for ServiceNow Integration.