Настройка политик в схеме автоматизации
Данный раздел описывает использование политик в схеме автоматизации на примере практической задачи. Описана настройка скрипта автоматизации, его вызов с помощью политики в схеме автоматизации и запуск по расписанию посредством экземпляра политики.
Содержание раздела:
Пример решаемой задачи
С помощью политики можно автоматически создавать новые сущности в системе согласно заранее заданным условиям и расписанию.
Предварительные условия
В схему домена Аудиты и контроль с идентификатором evo.compliance.audit, которая использовалась в практикуме по настройке схем расчетов, добавлена сущность Мероприятие по устранению замечаний с идентификатором Activity. В системе ежедневно создается и завершается большое количество аудитов.
Задача
Требуется автоматически создавать мероприятия по устранению замечаний для завершенных аудитов, имеющих замечания.
Метод решения задачи
Можно настроить политику в схеме автоматизации, которая будет автоматически создавать мероприятия по устранению замечаний согласно заданным условиям и расписанию запусков. Достаточно одной политики в том числе для обработки большого количества аудитов, список которых периодически обновляется.
Политика создания мероприятий по устранению замечаний может выглядеть следующим образом:
-
Условие: статус аудита — Завершен и количество замечаний по аудиту больше 0.
-
Действие: запуск скрипта, создающего мероприятия по устранению замечаний.
-
Расписание запусков: ежедневно в 00:00.
Этапы решения задачи:
Создание скрипта автоматизации
При срабатывании политики в схеме автоматизации выполняются действия: запуск скриптов, плейбуков или расчетов.
|
В данном разделе рассмотрен запуск простого сценария автоматизации, для которого требуется только один скрипт. Вы можете настроить более сложную логику автоматизации, комбинируя различные действия при настройке политики. |
Скрипт создания мероприятия по устранению замечания для заданного аудита может выглядеть следующим образом:
id: create_activity_for_audit
name: Скрипт создания мероприятия по устранению замечаний
type: script
version: 1.0.0
tags: [audit, automation]
status: stable
author: John Doe <johndoe@example.com>
source: !deno |
import * as sdk from '@playbooks/sdk'
import { type Context } from '@expertise/policy_batch_action_handler_executor'
export async function main() {
// Получение контекста выполнения, содержащего в том числе название аудита, для которого необходимо создать мероприятие.
const context: Context = JSON.parse(get_context())
// Извлечение названия аудита из контекста выполнения.
const audit_name = JSON.parse(context.objects[0].values).name
// Составление названия мероприятия из префикса, заданного через переменную экземпляра политики, и названия аудита.
const activity_name = context.policy.context.audit_prefix + " " + audit_name
// Проверка, что мероприятие для данного аудита ранее не создавалось.
// 1. Составление условия: "название мероприятия равно названию текущего мероприятия".
const condition = {
name: { $eq: activity_name }
}
// 2. Преобразование условия в формат, требуемый методом sdk.cms.list().
const filter = { conditions: JSON.stringify(condition) }
// 3. Выполнение поиска мероприятий, у которых название совпадает с текущим.
const existing_activities = await sdk.cms.list({
domainId: "evo.compliance.audit",
entityId: "Activity",
filter: filter
})
// 4. Если мероприятие с таким именем уже существует, выполнение скрипта останавливается, чтобы не создавать дубликаты.
if (existing_activities.length) {
console.log("Мероприятие для текущего аудита уже создано, выполнение скрипта завершается.")
return
}
// Создание объекта типа Map для передачи на вход методу sdk.cms.create().
const map_for_create = new Map<string, string>([
["name", activity_name]
])
// Создание нового мероприятия с помощью метода sdk.cms.create().
try {
const new_activity = await sdk.cms.create({
domainId: "evo.compliance.audit",
entityId: "Activity",
values: map_for_create
})
// Отладочный вывод свойств созданного мероприятия.
console.log("Новое мероприятие:")
console.log(new_activity)
} catch (e) {
// Вывод ошибки в лог запуска, если произошла ошибка при создании мероприятия.
console.log("Ошибка, мероприятие не создано!")
console.log(e)
}
}
Интерпретация примера
-
При запуске скрипта необходимо получить контекст его выполнения, в том числе информацию об объекте (аудите), который обрабатывается в рамках запуска политики, и контекстные переменные. Настройка контекстных переменных описана в разделе Создание экземпляра политики.
-
Название создаваемого мероприятия составляется из значения контекстной переменной
audit_prefixи названия аудита, который обрабатывается в рамках запуска политики.Например, переменная
audit_prefixимеет значениеУстранить замечания по аудиту:, а название аудита —Аудит системы от 30.10.2025. Тогда созданное мероприятие получит название:Устранить замечания по аудиту: Аудит системы от 30.10.2025. -
Чтобы не создавать мероприятия повторно, если они уже существуют в системе, предусмотрена следующая проверка:
-
С помощью метода API
listзапрашивается список мероприятий, имеющих то же название, что и создаваемое мероприятие. -
Если такие мероприятия уже существуют (длина полученного списка больше 0), выполнение скрипта завершается без создания мероприятия.
-
-
Если мероприятие не было ранее создано в системе, создается новое мероприятие с помощью метода API
create. -
В лог запуска скрипта записываются либо свойства созданного мероприятия, либо сообщение об ошибке, если создать мероприятие не удалось.
Добавление политики в схему автоматизации
Добавьте в схему автоматизации evo.compliance.audit.automation политику, вызывающую скрипт create_activity_for_audit для завершенных аудитов с количеством замечаний больше нуля. Политика может выглядеть следующим образом:
policies:
- id: create_activity_for_finished_audit_with_issues
name: Создать мероприятие по устранению замечаний, если по завершенному аудиту есть замечания
entity: evo.compliance.audit/Audit
conditions:
- type: expression
expression: 'equalText({field:status}, "Завершен")'
- type: expression
expression: '{field:numOfIssues} > 0'
actions:
- type: playbook
playbook: create_activity_for_audit
Интерпретация примера
Политика create_activity_for_finished_audit_with_issues содержит:
-
Два условия, которые должны выполниться одновременно (логическое И):
-
Статус аудита — Завершен. Используется функция библиотеки math.js
equalText. -
Количество замечаний аудита больше нуля.
-
-
Действие — запуск скрипта
create_activity_for_audit.
Создание экземпляра политики
Настройте запуск созданной политики раз в сутки. Для этого:
-
Перейдите в раздел управления экземплярами политик.
-
Создайте экземпляр политики, указав для него следующие свойства:
-
Идентификатор схемы автоматизации —
evo.compliance.audit.automation. -
Идентификатор политики —
create_activity_for_finished_audit_with_issues. -
Необходимый идентификатор организации.
-
Тип запуска — по расписанию.
-
Периодичность запуска — cron-выражение
0 0 * * *(каждый день в 00:00).Чтобы составить cron-выражение, можно воспользоваться генератором, например, nettools.club/ru/crontools. -
Контекстная переменная
audit_prefixсо значениемУстранить замечания по аудиту:. -
Статус — включена.
-
Теперь политика будет запускаться каждые сутки в 00:00 и создавать мероприятия по устранению замечаний для закрытых аудитов в выбранной организации.
Примеры иных задач, решаемых с помощью политик в схемах автоматизации
В данном разделе представлен базовый пример использования политик в схемах автоматизации. С помощью политик можно решать задачи таких классов, как:
-
Автоматическое изменение свойств объектов.
-
Автоматическое создание связей между объектами.
-
Запуск расчетов для объектов.
-
Массовое выполнение логики, заданной с помощью скриптов и плейбуков, для различных объектов.
Была ли полезна эта страница?