С помощью размещенных рабочих процессов vRealize Orchestrator службу vRealize Automation Cloud Assembly можно интегрировать с решением ServiceNow для обеспечения соответствия нормативным требованиям в отношении управления ИТ-службами (ITSM).

В корпоративной среде платформа управления облаком часто интегрируется с платформой управления ИТ-службами (ITSM) и базой данных управления конфигурациями (CMDB) для соответствия нормативным требованиям. Следуя данному примеру, можно интегрировать службу vRealize Automation Cloud Assembly с решением ServiceNow для CMDB и ITSM с помощью размещенных рабочих процессов vRealize Orchestrator. При использовании интеграций и рабочих процессов vRealize Orchestrator теги возможностей могут быть особенно полезны в случаях, когда вы имеете дело с несколькими экземплярами для разных сред. Дополнительные сведения о тегах возможностей см. в разделе Использование тегов возможностей в vRealize Automation Cloud Assembly.
Примечание: Кроме того, интегрировать ServiceNow со службой vRealize Automation Cloud Assembly можно, используя сценарии действий с поддержкой расширяемости. Дополнительные сведения об интеграции с решением ServiceNow с помощью сценариев действий с поддержкой расширяемости см. в разделе Интеграция службы Cloud Assembly и ServiceNow с помощью действий с поддержкой расширяемости.

В этом примере интеграция с решением ServiceNow состоит из трех рабочих процессов высшего уровня. У каждого рабочего процесса есть свои подписки, что позволяет выполнять обновление и итерацию для каждого компонента по отдельности.

  • Точка входа подписки на событие —«Базовое ведение журнала» — идентифицирует пользователя, отправившего запрос, и виртуальную машину vCenter (при необходимости).
  • Рабочий процесс интеграции разделяет объекты и подает входные данные в технический рабочий процесс, обрабатывает журналы, свойства и обновления выходных данных.
  • Технический рабочий процесс осуществляет интеграцию нисходящих систем для API-интерфейса решения ServiceNow и создает API-интерфейс IaaS для разграничения доступа кода, непрерывной интеграции, непрерывной доставки и базы данных управления конфигурациями с дополнительными свойствами виртуальной машины за пределами полезных данных.

Необходимые условия

Процедура

  1. Создайте и сохраните в службе vRealize Orchestrator файл конфигурации, содержащий общую конфигурацию, которая используется в нескольких рабочих процессах.
  2. Сохраните маркер API-интерфейса разграничения кода доступа в том же расположении, что и файл конфигурации из шага 1.
    Примечание: Срок действия маркера API-интерфейса разграничения кода доступа ограничен.
  3. Создайте рабочий процесс в службе vRealize Orchestrator с использованием предоставленного элемента сценария. Этот сценарий ссылается на узел REST и определяет его расположение. Он также стандартизирует действия REST, в которых используется дополнительный параметр маркера, который добавляется в качестве заголовка дополнительной проверки подлинности.
    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"];

    Этот сценарий отправляет выходные значения cpuCount и memoryMB в родительский рабочий процесс и обновляет существующие свойства customProperties. Эти значения можно использовать в последующих рабочих процессах при создании базы данных управления конфигурациями (CMDB).

  4. Добавьте элемент сценария создания непрерывной интеграции базы данных управления конфигурациями ServiceNow в рабочий процесс. Этот элемент находит узел REST для ServiceNow, используя элемент конфигурации, создает операцию REST для таблицы cmdb_ci_vmware_instance, создает строку объекта содержимого на основе входных данных рабочего процесса для пост-данных и выводит возвращенное значение 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. Используя выходные данные дочернего рабочего процесса, создайте объект свойства на основе существующих значений customProperties и перезапишите свойство serviceNowSysId, используя значение, полученное из ServiceNow. Этот уникальный идентификатор используется в базе данных управления конфигурациями для маркировки удаляемого экземпляра как списанного.

Результаты

Служба vRealize Automation Cloud Assembly успешно интегрирована с системой управления ИТ-службами ServiceNow. Дополнительные сведения об использовании рабочих процессов для интеграции системы ServiceNow со службой vRealize Automation Cloud Assembly см. в разделе Расширение Cloud Assembly с помощью vRealize Orchestrator для интеграции с ServiceNow.