Инструменты DevOps#
Для упрощения работы с конфигурацией IDMC, в дистрибутиве поставляется набор скриптов для Jenkins jobs. Эти скрипты предназначены для управления конфигурациями и ресурсами в системе IDM (Identity Management). Скрипты обеспечивают автоматизацию загрузки, настройки, резервного копирования и вывода из эксплуатации ресурсов.
Скрипты расположены в дистрибутие бинарных файлов IDMC, в директории <distrib>/package/conf/data/idmc/templates/jenkinsJobs/.
Файлы#
Файл |
Описание |
|---|---|
|
Изменение меток нод IDM |
|
Изменение паролей ресурсов |
|
Загрузка ресурсов из Nexus/Git/Vault |
|
Мастер-сущность инструмента Jenkins (Jenkins job) для оркестрации загрузки |
|
Резервное копирование ресурса |
|
Вывод ресурса из эксплуатации |
|
Восстановление ресурса из бэкапа |
|
Конфигурационный файл job |
|
Переопределение параметров задач |
|
Шаблон отчета вывода из эксплуатации |
|
Шаблон задачи вывода из эксплуатации |
Change Node Labels#
Файл: changeNodeLabels.groovy
Назначение#
Скрипт для изменения меток (labels) нод в IDM Engine. Позволяет управлять распределением задач между нодами кластера.
Параметры#
Параметр |
Тип |
Описание |
|---|---|---|
|
Choice |
Стенд для деплоя (из параметра |
|
String |
Путь секрета Vault (namespace/vaultkey/key) для доступка job в IDM |
|
String |
URL стенда idmx-engine |
|
Boolean |
Использовать mTLS для стенда |
|
Boolean |
Режим только для просмотра (без изменений) |
|
Boolean |
Прямое назначение меток (переопределение конфигурации). Если |
|
String |
Список нод и меток в формате: |
Формат параметра Labels#
<диапазон нод>@<метка>:<лимит>,<другая метка>:<лимит>;<другой диапазон>@<другая метка>:<лимит>
Пример: 1-3@focal-task:2 — ноды 1,2,3 получают метку focal-task с лимитом потоков 2.
Если лимит потоков не указан - узел будет обрабатывать столько задач с указанной меткой, сколько разрешает конфигурация ноды (по умолчанию 10).
Сброс меток#
При указании списка нод и меток можно вместо метки указать опцию reset. Это сбросит метки с указанного диапазона нод на состояние по умолчанию. Например:
0@reset - с ноды под номером 0 будут сброшены метки.
Режимы работы#
Также при указании списка нод, меток и потоков можно использовать ключевые слова. Они указываются через ,, и для них так же нужно указать количество потоков через :. Доступны следующие режимы:
none- данный режим указывает, что если на узел пришла задача (task) без метки, то такая задача будет обрабатываться указанным количеством потоков.node- данный режим указывает, что если на узел пришла задача, в метке которой указано название (имя экземпляра в Kubernetes/Openshift) ноды, такая задача будет обрабатываться указанным количеством потоков.
Например:
1-3@focal-task,node:2 - такая строка установит на ноды 1, 2, 3 лимит на задачи с меткой focal-task равный лимиту ноды (по умолчанию 10), а на задачи, имеющие метку с именем коды - лимит в 2 потока.
Конфигурация#
Использует config.patchNodes из YAML-конфигурации для определения нод и меток.
Change Resources Passwords#
Файл: changeResourcesPasswords.groovy
Назначение#
Изменение паролей для ресурсов в IDM. Получает секреты из Vault и обновляет конфигурацию ресурсов.
Параметры#
Параметр |
Тип |
Описание |
|---|---|---|
|
Choice |
Список каталогов в Git (каталог со стендозависимыми параметрами) |
|
Multi-Select |
Список ресурсов для обновления (из параметра |
|
String |
Путь к секретам в Vault для доступа job в IDM |
|
String |
URL стенда idmx-engine |
|
Boolean |
Использовать ли mTLS при подключении к IDM |
Процесс работы#
Получение списка ресурсов из Git/Bitbucket.
Загрузка секретов из Vault.
Поиск ресурсов в IDM по имени.
Обновление паролей через REST API (PATCH запрос).
Конфигурация ресурсов#
resourceSecrets:
- name: "AD/Exchange-PD10" # имя, отображаемое для выбора в конфигурации job
oid: "10000000-0000-0000-0000-100000000300" # oid ресурса в IDM
stands: "dev8" # стенды, на которых нужно заменить пароли у данного ресурса. Перечисляются через запятую, например "dev1,dev2,dev3"
secretValues:
- vaultKey: "ZXhhbXBsZV9hcGlfa2V5" # имя секрета в Vault для доступа к ресурсу
xmlPath: "connectorConfiguration/configurationProperties/password" # путь к параметру, в котором хранится пароль в ресурсе (параметр пароля у учетных записей ресурса)
Load Resources From Nexus Git Vault#
Файл: loadResourcesFromNexusGitVault.groovy
Назначение#
Основной скрипт для загрузки конфигураций ресурсов и задач из различных источников (Nexus, Git, Vault).
Параметры#
Параметр |
Тип |
Описание |
|---|---|---|
|
Boolean |
Источник загрузки конфигурации. Если |
|
String |
Ветка репозитория, из которой будет выполняться загрузка, если |
|
Multi-Select |
Конфигурации для загрузки (scripts, base, system, connectorhost, и т.д.) |
|
String |
Исключаемые объекты (через запятую). Фильтрация происходит по указываемым словам, из загрузки будут исключаться все объекты, название которых содержит хотя бы одно указанное слово. |
|
Choice |
Используемый Nexus (release/ci) |
|
Choice |
Версия дистрибутива IDM в Nexus |
|
Choice |
Каталог в Git (стенд) |
|
String |
Путь к секретам выбранного стенда в Vault |
|
String |
Путь до файла с переопределенными параметрами задач. Путь указывается относительно файла job. |
|
Boolean |
Выполнять ли удаление существующих ресурсов перед загрузкой |
|
Boolean |
Дожидаться ли завершения задач, запущенный на стенде в момент запуска job |
|
Boolean |
Удалять ли задачи по имени. Если |
|
Boolean |
Загружать ли ресурсы. Если |
|
Boolean |
Загружать ли задачи. Если |
|
Boolean |
Загружать таблицу FOSBYCOS. Если |
|
Boolean |
Использовать ли mTLS при подключении |
Этапы выполнения#
Check engine availability — проверка доступности IDM engine.
Checkout configs repo — скачивание параметров из Bitbucket.
Loading fosbycos table — загрузка таблиц соответствий (опционально).
Checkout/Download templates — загрузка шаблонов из Git или Nexus.
Parametrise downloaded xml configs — замена параметров в шаблонах.
Execute init scripts — выполнение предзагрузочных скриптов.
Load base post-init objects — загрузка базовых конфигураций.
Backup and delete old resources — резервное копирование и удаление старых объектов.
Loading resource and tasks — загрузка ресурсов и задач.
Update Confluence page — обновление страницы в Confluence (опционально).
Поддерживаемые типы объектов#
resources.
tasks.
roles.
connectorHosts.
genericObjects.
orgs.
lookupTables.
Master Job From Nexus Git Vault#
Файл: masterJobFromNexusGitVault.groovy
Назначение#
Мастер-сущность инструмента Jenkins (Jenkins job) для оркестрации загрузки конфигураций на несколько стендов. Запускает дочерние job loadResourcesFromNexusGitVault для каждого стенда.
Параметры#
Параметр |
Тип |
Описание |
|---|---|---|
|
Choice |
Стенд для деплоя |
|
Choice |
Используемый Nexus |
|
Choice |
Версия дистрибутива IDM |
Конфигурация загружаемых ресурсов#
Для конфигурирования данной job следует заполнить следующие параметры в job_config.yaml:
loadedResources:
Openshift_1_dev8: # стенд, который будет отображаться в standId
- name: "Resources" # имя блока с конфигурацией для запуска дочерней job
configs: "base,system" # здесь и ниже - конфигурация дочерней job, аналогично разделу 3. Load Resources From Nexus Git Vault
excludedObjects: "company"
engine: "dev8"
deleteBeforeUpload: true
waitTaskCompletion: true
factLoadResources: true
factLoadTasks: true
- name: "Resources-delta" # имя другого блока с конфигурацией для запуска дочерней job
configs: "connectorhost,exchange"
engine: "dev8"
Процесс работы#
Итерация по конфигурации
loadedResources.Запуск remote job с передачей параметров через
triggerRemoteJob.Сбор статуса выполнения каждого этапа.
Формирование общего описания сборки.
Resource Backup#
Файл: resourceBackup.groovy
Назначение#
Комплексное резервное копирование ресурса и всех связанных объектов (пользователи, роли, проекции, организации, задачи).
При сохранении ресурса, задач, каталогов ролей, первичных ролей и ролей ФА job выводит в лог информацию о сохраняемых объектах и запрашивает подтверждение выполнения операции. В лог job выводится дополнительная информация о сохраняемом ресурсе:
Имя и oid каталога ролей;
Имя и oid задач из параметра
tasksToBackup;Имя и oid ресурса;
Имя и oid первичной роли;
Имя и oid роли функционального администратора.
Также при сохранении job проверяет, что сохраняемые каталоги ролей и задачи принадлежат сохраняемому ресурсу (каталог имеет атрибут extension/resourceOid=<oid ресурса>, задачи имеют ссылку на ресурс <resourceOid>). Если в списке задач или каталогов для сохранения указаны не принадлежащие ресурсу задачи или каталоги - job завершится с ошибкой.
Обратите внимание.
Во время резервного копирования ресурса будут сохраняться только те задачи, которые указаны в
tasksToBackup, а не все связанные с ресурсом.
Для работы job требуются права на использование:
groovy.util.XmlParser setFeature java.lang.String boolean.
groovy.util.Node groovy.Util.Node java.lang.Object java.util.Map.
groovy.util.XmlUtil.
groovy.util.Node append groovy.util.Node.
groovy.xml.XmlUtil serialize groovy.util.Node.
Параметры#
Параметр |
Тип |
Описание |
|---|---|---|
|
Choice |
Стенд |
|
String |
URL стенда |
|
Boolean |
Использовать ли mTLS при подключении к IDM |
|
String |
Имя секрета Jenkins для подключения к IDM |
|
String |
OID ресурса для бэкапа |
|
String |
OID каталога ролей |
|
String |
Список OID задач для сохранения, через запятую |
|
Boolean |
Переводить ли ресурс в режим maintenance перед бэкапом |
|
Boolean |
Сохранять ли ссылки на ресурс у пользователей, на которых был назначен данный ресурс |
|
Boolean |
Сохранять ли ссылки на проекции пользователей в данном ресурсе |
|
Boolean |
Сохранять ли роли, импортированные из ресурса |
|
Boolean |
Сохранять ли ссылки на ресурс из других ролей |
|
Boolean |
Сохранять ли организации из ресурса |
|
Boolean |
Сохранять ли задачи |
|
Boolean |
Сохранять ли проекции из БД IDM |
|
Boolean |
Сохранять ли роли функциональных администраторов ресурса |
|
Boolean |
Сохранять ли каталог ролей |
|
Boolean |
Сохранять ли сам ресурс |
Структура резервной копии#
backup/
├── projections/ # Проекции (shadows)
├── roles/ # Роли
├── resources/ # Ресурсы
├── catalogs/ # Каталоги ролей
├── orgs/ # Организации
├── tasks/ # Задачи
└── bulkActionsBackups/ # Отчеты
Объекты в резервной копии выгружаются в формате XML, и могут быть загружены в IDM через импорт, либо при помощи job Resource Resume.
Отчеты (CSV)#
usersWithResourceAssignment.csv— пользователи, на которых был назначен ресурс.usersWithLinkRefToResource.csv— пользователи с ссылками на проекции в ресурсе.resourceRoles.csv— роли, импортированные из ресурса.rolesWithResourceLinks.csv— роли с ссылками на ресурс.resourceOrgs.csv— организации из ресурса.tasks.csv— задачи.backupdProjections.csv— проекции.editedFARoles.csv— роли функциональных администраторов.catalogRoles.csv— роли из каталога.
Архивы#
backup_resource_<oid>_backup_<timestamp>.zip— полный бэкап.backup_resource_<oid>_report_<timestamp>.zip— отчеты.
Resource Decomissing Job#
Файл: resourceDecomissingJob.groovy
Назначение#
Безопасный вывод ресурса из эксплуатации. Создает и выполняет задачу на удаление всех связей ресурса.
Перед созданием задачи в IDM job запросит подтверждение выполнения операции и выводит в лог дополнительную информацию о выводимом из эксплуатации ресурсе:
Имя и oid каталога ролей;
Имя и oid задач из параметра;
Имя и oid ресурса.
Также при удалении объектов job проверяет, что удаляемые каталоги ролей и задачи принадлежат удаляемому ресурсу (каталог имеет атрибут extension/resourceOid=<oid ресурса>, задачи имеют ссылку на ресурс <resourceOid>). Если в списке задач или каталогов для удаления указаны не принадлежащие ресурсу задачи или каталоги - job завершится с ошибкой.
Перед удалением job запросит подтверждение операции второй рукой (в интерфейсе Jenkins).
Обратите внимание.
Во время вывода ресурса из эксплуатации будут удаляться только те задачи, которые указаны в
tasksToDelete, а не все связанные с ресурсом.
Параметры#
Параметр |
Тип |
Описание |
|---|---|---|
|
Choice |
Стенд |
|
String |
URL стенда |
|
Boolean |
Использовать ли mTLS при подкоючении к IDM |
|
String |
Имя секрета Jenkins c eчетными данными для доступа job к IDM |
|
String |
OID ресурса |
|
String |
OID каталога ролей |
|
String |
Список OID задач для удаления, через запятую |
|
Boolean |
Переводить ли ресурс в maintenance перед удалением |
|
Boolean |
Удалять ли ссылки у пользователей |
|
Boolean |
Удалять ли ссылки на проекции |
|
Boolean |
Удалять ли роли ресурса |
|
Boolean |
Удалять ли ссылки из ролей |
|
Boolean |
Удалять ли организации |
|
Boolean |
Удалять ли задачи |
|
Boolean |
Удалять ли проекции |
|
Boolean |
Отключать ли роли функциональных администраторов |
|
Boolean |
Удалять ли каталог ролей |
|
Boolean |
Удалять ли ресурс |
Процесс работы#
Валидация параметров — проверка OID и конфигурации.
Загрузка задачи — создание задачи на вывод из эксплуатации.
Согласование — требуется подтверждение от другого пользователя.
Мониторинг выполнения — отслеживание статуса задачи.
Загрузка отчета — создание отчета о выполнении.
Шаблоны#
task-resource-decommissioning.xml.tmpl— шаблон задачи.report-resource-decommissioning.xml.tmpl— шаблон отчета.
Переменные в шаблонах#
name— имя задачи/отчета.taskIdentifier— идентификатор задачи.description— описание с информацией о ресурсе.resourceOid— OID ресурса.approverUser— пользователь подтвердивший.
Resource Resume#
Файл: resourceResume.groovy
Назначение#
Восстановление ресурса из резервной копии, созданной скриптом resourceBackup.groovy.
Для работы job требуются права на использование:
groovy.util.XmlParser setFeature java.lang.String boolean.
groovy.util.Node groovy.Util.Node java.lang.Object java.util.Map.
groovy.util.XmlUtil.
groovy.util.Node append groovy.util.Node.
groovy.xml.XmlUtil serialize groovy.util.Node.
Параметры#
Параметр |
Тип |
Описание |
|---|---|---|
|
StashedFile |
Файл бэкапа |
|
Choice |
Стенд |
|
String |
URL стенда |
|
Boolean |
Использовать ли mTLS |
|
String |
Имя секрета Jenkins с учетными данными для доступа job в IDM |
|
Boolean |
Восстановить ли ресурс |
|
Boolean |
Восстановить ли каталог ролей |
|
Boolean |
Восстановить ли проекции |
|
Boolean |
Восстановить ли роли |
|
Boolean |
Восстановить ли организации |
|
Boolean |
Восстановить ли ссылки на роли |
|
Boolean |
Восстановить ли ссылки на организации |
|
Boolean |
Восстановить ли задачи |
|
Boolean |
Запустить ли пересчет пользователей |
|
Boolean |
Создать ли отчет о работе job |
* - Для корректной работы job, в архиве резервной копии должны существовать те данные, которые восстанавливаются данной job. Например, если параметр UploadRolesCatalogRun=true, то в архиве резервной копии должны быть файлы каталогов. Если файлы в резервной копии отсутствуют - job не восстановит их на стенд IDM.
Этапы восстановления#
Unzip backup — распаковка архива бэкапа.
Upload resource — загрузка ресурса.
Upload roles catalog — загрузка каталога ролей.
Upload projections — загрузка проекций.
Upload roles — загрузка ролей.
Upload orgs — загрузка организаций.
Restore roles links — восстановление ссылок на роли.
Restore orgs — восстановление ссылок на организации.
Restore tasks — загрузка задач (статус waiting).
Recompute users — пересчет пользователей.
Create report — создание отчета.
Отчеты#
restoredRolesReport.csv— восстановленные роли.restoredOrgsReport.csv— восстановленные организации.restoredProjectionsReport.csv— восстановленные проекции.restoredTasksReport.csv— восстановленные задачи.restoredRolesCatalogReport.csv— восстановленные каталоги.restoredRolesLinksReport.csv— восстановленные ссылки на роли.restoredResourceLinksReport.csv— восстановленные ссылки на ресурсы.
Конфигурационный файл#
Файл: job_config.yaml
Основные секции#
Общие настройки#
nodeLabel: "efs"
configYamlPath: "testJobs/job_config.yaml"
jobDaysToKeep: 15
jobNumToKeep: 5
Nexus конфигурация#
nexusBase:
release:
urlNexus: "https://"
repoName: "sbt_PROD"
groupId: "sbt_PROD.CI90000229_idm.idmc"
artifactId: "IDMC-cfg"
ci:
urlNexus: "https://"
repoName: "maven"
Git конфигурация#
git:
credentialsId: "tuz"
credentialsPwdId: "ci_tuz"
urlConfigs: "ssh://"
branch: "master"
type: "/bitbucket-cd"
Vault конфигурация#
vault:
engineVersion: 1
vaultCredentialId: "ga-SecMan"
vaultNamespace: "DEV"
vaultUrl: "http://"
vaultCerts:
pkiPath: "PKI/issue/role"
certCN: "client.mydomain.ru"
certTTL: "24h"
IDM стенды#
midpoint:
acc1:
vaultSecrets: "A/IFT/IDMC"
credentialsId: "credVaultUsernamePasswd"
url: "https://"
mtls: false
type: "IFT"
Секреты ресурсов#
resourceSecrets:
- name: "AD/Exchange"
oid: "10000000-0000-0000-0000-100000000300"
stands: "dev"
secretValues:
- vaultKey: "ZXhhbXBsZV9hcGlfa2V5"
xmlPath: "connectorConfiguration/configurationProperties/password"
Загружаемые конфигурации#
loadedConfigs: "scripts,base,system,connectorhost,departments,employees,focal,..."
excludedObjects: "company"
Мастер-сущность инструмента Jenkins (Jenkins job) конфигурация#
loadedResources:
Openshift_1_dev8:
- name: "Resources"
configs: "base,system"
excludedObjects: "company"
engine: "dev8"
deleteBeforeUpload: true
waitTaskCompletion: true
Patch Nodes (для changeNodeLabels)#
patchNodes:
dev8:
- name: "Focal Task"
range: "3"
mode: "set"
label: "focal-task:2"
Confluence интеграция#
confluence:
pageUpdate: false
url: "https://"
space: "IDM"
pageId: "1551234609943"
history: 5
Файл переопределения задач#
Файл: tasks_override.yaml
Назначение#
Переопределение параметров для конкретных задач по OID.
Структура#
xmlTags: "schedule,executionState"
<oid задачи>:
<параметр>: <значение>
schedule: |
<recurrence>recurring</recurrence>
<cronLikePattern>* 12 * * *</cronLikePattern>
executionState: waiting
Примеры#
Изменение расписания выполнения задач.
Изменение статуса выполнения (runnable/waiting).
Настройка параметров нод для focal tasks.
Конфигурация механизмов повторных попыток.