Интеграция службы Automation Assembler и ServiceNow с помощью действий с поддержкой расширяемости
Automation Assembler
и ServiceNow с помощью действий с поддержкой расширяемостиИспользуя действия с поддержкой расширяемости, службу
Automation Assembler
можно интегрировать с корпоративными решениями для управления ИТ-службами (ITSM), такими как ServiceNow.
- Перед настройкой интеграции отфильтруйте все подписки на события с помощью условного свойства облачного шаблона:event.data["customProperties"]["enable_servicenow"] === "true"Облачные шаблоны, которым требуется интеграция с ServiceNow, включают в себя этой свойство.
- Загрузите и установите Python.
Дополнительные сведения о фильтрации подписок см. в разделе Создание подписки с поддержкой расширяемости.

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

Получение сведений о ВМ
Сценарий «Получение сведений о ВМ» получает дополнительные сведения о полезных данных, необходимые для создания непрерывной интеграции, и маркер идентификации из
Amazon Web Services
Systems Manager Parameter Store (SSM). Кроме того, этот сценарий обновляет раздел customProperties
, добавляя в него дополнительные свойства для дальнейшего использования. Создание непрерывной интеграции базы данных управления конфигурациями в ServiceNow
Сценарий «Создание непрерывной интеграции базы данных управлениям конфигурациями в ServiceNow» передает URL-адрес экземпляра ServiceNow в качестве входных данных и сохраняет экземпляр в SSM для соответствия требованиям безопасности. Этот сценарий также считывает ответ уникального идентификатора записи базы данных управления конфигурациями ServiceNow (sys_id). Он передает этот ответ в качестве выходного значения и записывает настраиваемое свойство
serviceNowSysId
в процессе создания. Это значение используется для того, чтобы пометить непрерывную интеграцию как списанную при удалении экземпляра. Может потребоваться выделение дополнительных разрешений для роли
VMware Aria Automation services
Amazon Web Services
, чтобы разрешить Lambda доступ к SSM Parameter Store. Создание изменения в ServiceNow
Этот сценарий завершает интеграцию ITSM путем передачи URL-адреса экземпляра ServiceNow в качестве входных данных и сохранения учетных данных ServiceNow в качестве SSM в соответствии с требованиями безопасности.
Создание изменения в ServiceNow
Сценарий списания непрерывной интеграции базы данных управления конфигурациями в ServiceNow приводит к остановке ServiceNow и помечает непрерывную интеграцию как списанную в соответствии с настраиваемым свойством
serviceNowSysId
, созданным сценарием создания интеграции. - Откройте командную строку на виртуальной машине.
- Запустите сценарий «Получение сведений о ВМ».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
- Запустите действие по созданию элемента конфигурации 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
- Запустите сценарий действия «Создание».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)
Служба
Automation Assembler
успешно интегрирована с системой управления ИТ-службами ServiceNow.
При необходимости эту непрерывную интеграцию можно пометить как списанную, используя действие списания элемента конфигурации 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)