À l'aide des actions d'extensibilité, vous pouvez intégrer Cloud Assembly à un système ITSM d'entreprise, comme ServiceNow.

Les utilisateurs en entreprise intègrent généralement leur plate-forme Gestion du cloud à une plate-forme de gestion des services informatiques (ITSM) et de base de données de gestion des configurations (CMDB) à des fins de conformité. Dans cet exemple, vous pouvez intégrer Cloud Assembly à ServiceNow pour CMDB et ITSM à l'aide de scripts d'action d'extensibilité.
Note : Vous pouvez également intégrer ServiceNow à Cloud Assembly à l'aide des workflows vRealize Orchestrator. Pour plus d'informations sur l'intégration de ServiceNow à l'aide de workflows, reportez-vous à la section Comment intégrer Cloud Assembly pour ITSM à ServiceNow à l'aide de workflows vRealize Orchestrator.

Pour créer cette intégration, vous utilisez quatre scripts d'action d'extensibilité. Les trois premiers scripts sont lancés dans l'ordre lors du provisionnement, à l'occasion du post-événement de provision de calcul. Le quatrième script se produit à l'occasion du post-événement de suppression de calcul.

Pour plus d'informations sur les rubriques d'événements, reportez-vous à la section Rubriques d'événement fournies avec Cloud Assembly.

Obtenir les détails de la machine virtuelle

Le script Obtenir les détails de la machine virtuelle acquiert des détails supplémentaires relatifs à la charge utile (nécessaires pour la création de CI) et un jeton d'identité stocké dans Amazon Web Services Systems Manager Parameter Store (SSM). Ce script met également à jour customProperties avec des propriétés supplémentaires pour une utilisation ultérieure.

Créer une CI de CMDB ServiceNow
Le script Créer une CI de CMDB ServiceNow transmet l'URL de l'instance ServiceNow sous la forme d'une entrée et stocke l'instance dans SSM afin de répondre aux exigences de sécurité. Ce script lit également la réponse de l'identifiant d'enregistrement unique (sys_id) de la CMDB ServiceNow. Il la transmet sous la forme d'une sortie et écrit la propriété personnalisée serviceNowSysId lors de la création. Cette valeur est utilisée pour marquer la CI comme ayant été supprimée à la destruction de l'instance.
Note : Il peut être nécessaire d'octroyer des autorisations supplémentaires à votre rôle cloud automation service Amazon Web Services pour permettre à Lambda d'accéder à SSM Parameter Store.

Créer une modification ServiceNow

Ce script met fin à l'intégration du système ITSM en transmettant l'URL de l'instance ServiceNow sous la forme d'une entrée et en stockant les informations d'identification ServiceNow en tant que SSM pour répondre aux exigences de sécurité.

Créer une modification ServiceNow

Le script de mise hors service d'une CI de CMDB ServiceNow invite l'instance ServiceNow à s'arrêter et marque la CI comme étant mise hors service, en fonction de la propriété personnalisée serviceNowSysId créée dans le script de création.

Conditions préalables

  • Avant de configurer cette intégration, filtrez tous les abonnements aux événements en fonction de la propriété de modèle de cloud conditionnelle : event.data["customProperties"]["enable_servicenow"] === "true"
    Note : Cette propriété existe sur les modèles de cloud requérant une intégration ServiceNow.
  • Téléchargez et installez Python.

Pour plus d'informations sur le filtrage des abonnements, reportez-vous à la section Création d'un abonnement d'extensibilité.

Procédure

  1. Ouvrez une invite de ligne de commande à partir de votre machine virtuelle.
  2. Exécutez le script Obtenir les détails de la machine virtuelle.
    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. Exécutez l'action de création de l'élément de configuration de la 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. Exécutez le script de l'action de création.
    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)

Résultats

Cloud Assembly est correctement intégré au système ITSM ServiceNow.

Que faire ensuite

Vous pouvez supprimer à tout moment votre CI en exécutant l'action de suppression de l'élément configuration de la 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)

Pour plus d'informations sur l'utilisation des actions d'extensibilité pour intégrer ServiceNow dans Cloud Assembly, reportez-vous à la section Extension de Cloud Assembly avec l'extensibilité basée sur des actions pour l'intégration de ServiceNow.