Cloud Assembly se puede integrar con ServiceNow mediante flujos de trabajo alojados de vRealize Orchestrator para el cumplimiento de ITSM.

El flujo de integración de ServiceNow pasa por varios servicios y API de Cloud Assembly, vSphere, vRealize Orchestrator y ServiceNow.

Los usuarios empresariales suelen integrar sus plataformas de administración de nube con una plataforma de administración de servicios de TI (IT Service Management, ITSM) y de base de datos de administración de configuración (Configuration Management Database, CMDB) para garantizar el cumplimiento. Si sigue este ejemplo, puede integrar Cloud Assembly con ServiceNow para CMDB e ITSM usando flujos de trabajo alojados de vRealize Orchestrator. Al usar integraciones y flujos de trabajo de vRealize Orchestrator, las etiquetas de capacidad resultan especialmente útiles cuando existen varias instancias para entornos diferentes. Para obtener más información sobre las etiquetas de capacidad, consulte Usar etiquetas de capacidad en Cloud Assembly.
Nota: También puede integrar ServiceNow con Cloud Assembly mediante scripts de acciones de extensibilidad. Para obtener información sobre la integración de ServiceNow mediante scripts de acciones de extensibilidad, consulte Cómo integrar Cloud Assembly con ServiceNow mediante acciones de extensibilidad.

En este ejemplo, la integración de ServiceNow se compone de tres flujos de trabajo de nivel superior. Cada flujo de trabajo tiene sus propias suscripciones para que pueda actualizar y recorrer cada componente de forma individual.

  • Punto de entrada de suscripción de eventos: registro básico, identifica el usuario solicitante y a la máquina virtual de vCenter, si procede.
  • Flujo de trabajo de integración: separa objetos, suministra entradas al flujo de trabajo técnico, y procesa las actualizaciones de registros, propiedades y salidas.
  • Flujo de trabajo técnico: integración de sistema descendente para que la API de ServiceNow cree la API IaaS de Cloud Assembly, CR y CI de CMDB con propiedades de máquinas virtuales adicionales fuera de la carga útil.

Requisitos previos

Procedimiento

  1. Cree y guarde un archivo de configuración en vRealize Orchestrator que contenga una configuración común utilizada en varios flujos de trabajo.
  2. Guarde el token de API de Cloud Assembly en la misma ubicación que el archivo de configuración del paso 1.
    Nota: El token de API de Cloud Assembly tiene caducidad.
  3. Cree un flujo de trabajo en vRealize Orchestrator con el elemento de script proporcionado. Este script hace referencia a un host de REST y lo localiza. También estandariza las acciones de REST que utilizan un parámetro opcional de un token, que se agrega como un encabezado de autorización adicional.
    var configPath = "CS"
    var configName = "environmentConfig"
    var attributeName = "CASRestHost"
    
    //get REST Host from configuration element
    var restHost = System.getModule("au.com.cs.example").getRestHostFromConfig(configPath,configName,attributeName)
    
    var ConfigurationElement = System.getModule("au.com.cs.example").getConfigurationElementByName(configName,configPath);
    System.debug("ConfigurationElement:" + ConfigurationElement);
    var casToken = ConfigurationElement.getAttributeWithKey("CASToken")["value"]
    if(!casToken){
    	throw "no CAS Token";
    }
    //REST Template
    var opName = "casLogin";
    var opTemplate = "/iaas/login";
    var opMethod = "POST";
    
    // create the REST operation:
    var opLogin = System.getModule("au.com.cs.example").createOp(restHost,opName,opMethod,opTemplate);
    
    //cas API Token
    var contentObject = {"refreshToken":casToken}
    postContent = JSON.stringify(contentObject);
    
    var loginResponse = System.getModule("au.com.cs.example").executeOp(opLogin,null,postContent,null) ;
    
    try{
    	var tokenResponse = JSON.parse(loginResponse)['token']
    	System.debug("token: " + tokenResponse);
    } catch (ex) {
    	throw ex + " No valid token";
    }
    
    //REST Template  Machine Details
    var opName = "machineDetails";
    var opTemplate = "/iaas/machines/" + resourceId;
    var opMethod = "GET";
    
    var bearer = "Bearer " + tokenResponse;
    
    var opMachine = System.getModule("au.com.cs.example").createOp(restHost,opName,opMethod,opTemplate);
    
    // (Rest Operation, Params, Content, Auth Token)
    var vmResponse = System.getModule("au.com.cs.example").executeOp(opMachine,null,"",bearer) ;
    
    try{
    	var vm = JSON.parse(vmResponse);
    } catch (ex) {
    	throw ex + " failed to parse vm details"
    }
    
    System.log("cpuCount: " + vm["customProperties"]["cpuCount"]);
    System.log("memoryInMB: " + vm["customProperties"]["memoryInMB"]);
    
    cpuCount =  vm["customProperties"]["cpuCount"];
    memoryMB = vm["customProperties"]["memoryInMB"];

    Este script envía los elementos cpuCount y memoryMB de salida al flujo de trabajo principal y actualiza las propiedades de customProperties existentes. Estos valores se pueden utilizar en flujos de trabajo posteriores al crear la CMDB.

  4. Agregue al flujo de trabajo el elemento de script para crear un elemento de configuración de CMDB de ServiceNow. Este elemento localiza el host de REST de ServiceNow mediante el elemento de configuración, crea una operación de REST para la tabla cmdb_ci_vmware_instance, crea una cadena de objeto de contenido basada en las entradas del flujo de trabajo para los datos de publicación y ofrece como salida la instancia devuelta de sys_id.
    var configPath = "CS"
    var configName = "environmentConfig"
    var attributeName = "serviceNowRestHost"
    var tableName = "cmdb_ci_vmware_instance"
    
    //get REST Host from configuration element
    var restHost = System.getModule("au.com.cs.example").getRestHostFromConfig(configPath,configName,attributeName)
    
    //REST Template
    var opName = "serviceNowCreatCI";
    var opTemplate = "/api/now/table/" + tableName;
    var opMethod = "POST";
    
    // create the REST operation:
    var opCI = System.getModule("au.com.cs.example").createOp(restHost,opName,opMethod,opTemplate);
    
    
    //cmdb_ci_vm_vmware table content to post;
    var contentObject = {};
    contentObject["name"] = hostname;
    contentObject["cpus"] = cpuTotalCount;
    contentObject["memory"] = MemoryInMB;
    contentObject["correlation_id"]=  deploymentId
    contentObject["disks_size"]=  diskProvisionGB
    contentObject["location"] = "Sydney";
    contentObject["vcenter_uuid"] = vcUuid;
    contentObject["state"] = "On";
    contentObject["owned_by"] = owner;
    
    postContent = JSON.stringify(contentObject);
    System.log("JSON: " + postContent);
    
    // (Rest Operation, Params, Content, Auth Token)
    var ciResponse = System.getModule("au.com.cs.example").executeOp(opCI,null,postContent,null) ;
    
    try{
    	var cmdbCI = JSON.parse(ciResponse);
    } catch (ex) {
    	throw ex + " failed to parse ServiceNow CMDB response";
    }
    
    serviceNowSysId = cmdbCI['result']['sys_id'];
  5. Usando el resultado del flujo de trabajo secundario, cree un objeto de propiedades mediante el elemento customProperties existente y sobrescriba la propiedad serviceNowSysId por el valor de ServiceNow. Este identificador único se utiliza en la CMDB para marcar una instancia como retirada al destruirla.

Resultados

Cloud Assembly se integra correctamente con ServiceNow para ITSM. Para obtener más información sobre la forma de usar los flujos de trabajo para integrar ServiceNow en Cloud Assembly, consulte Extender Cloud Assembly con vRealize Orchestrator para la integración de ServiceNow.