Cloud Assembly se puede integrar con ServiceNow mediante flujos de trabajo alojados de vRealize Orchestrator para el cumplimiento de ITSM.
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.
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.
Procedimiento
- Cree y guarde un archivo de configuración en vRealize Orchestrator que contenga una configuración común utilizada en varios flujos de trabajo.
- 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.
- 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.
- 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'];
- 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.