Инструменты DevOps#

Для упрощения работы с конфигурацией IDMC, в дистрибутиве поставляется набор скриптов для Jenkins jobs. Эти скрипты предназначены для управления конфигурациями и ресурсами в системе IDM (Identity Management). Скрипты обеспечивают автоматизацию загрузки, настройки, резервного копирования и вывода из эксплуатации ресурсов.

Скрипты расположены в дистрибутие бинарных файлов IDMC, в директории <distrib>/package/conf/data/idmc/templates/jenkinsJobs/.

Файлы#

Файл

Описание

changeNodeLabels.groovy

Изменение меток нод IDM

changeResourcesPasswords.groovy

Изменение паролей ресурсов

loadResourcesFromNexusGitVault.groovy

Загрузка ресурсов из Nexus/Git/Vault

masterJobFromNexusGitVault.groovy

Мастер-сущность инструмента Jenkins (Jenkins job) для оркестрации загрузки

resourceBackup.groovy

Резервное копирование ресурса

resourceDecomissingJob.groovy

Вывод ресурса из эксплуатации

resourceResume.groovy

Восстановление ресурса из бэкапа

job_config.yaml

Конфигурационный файл job

tasks_override.yaml

Переопределение параметров задач

report-resource-decommissioning.xml.tmpl

Шаблон отчета вывода из эксплуатации

task-resource-decommissioning.xml.tmpl

Шаблон задачи вывода из эксплуатации

Change Node Labels#

Файл: changeNodeLabels.groovy

Назначение#

Скрипт для изменения меток (labels) нод в IDM Engine. Позволяет управлять распределением задач между нодами кластера.

Параметры#

Параметр

Тип

Описание

standId

Choice

Стенд для деплоя (из параметра config.patchNodes файла job_config.yaml)

vaultPath

String

Путь секрета Vault (namespace/vaultkey/key) для доступка job в IDM

midpointRestUrl

String

URL стенда idmx-engine

mtlsStand

Boolean

Использовать mTLS для стенда

DRY_RUN

Boolean

Режим только для просмотра (без изменений)

MANUAL_LABELS

Boolean

Прямое назначение меток (переопределение конфигурации). Если false — значения для меток узлов будут браться из job_config.yaml, если true - из параметра Labels этой job.

Labels

String

Список нод и меток в формате: 1-3@focal-task,node:2;4@dismiss-task:2,none:2;0@reset

Формат параметра 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 и обновляет конфигурацию ресурсов.

Параметры#

Параметр

Тип

Описание

gitFolder

Choice

Список каталогов в Git (каталог со стендозависимыми параметрами)

resourcesList

Multi-Select

Список ресурсов для обновления (из параметра resourceSecrets в файле job_config.yaml)

vaultPath

String

Путь к секретам в Vault для доступа job в IDM

midpointRestUrl

String

URL стенда idmx-engine

mtlsStand

Boolean

Использовать ли mTLS при подключении к IDM

Процесс работы#

  1. Получение списка ресурсов из Git/Bitbucket.

  2. Загрузка секретов из Vault.

  3. Поиск ресурсов в IDM по имени.

  4. Обновление паролей через 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).

Параметры#

Параметр

Тип

Описание

loadFromGit

Boolean

Источник загрузки конфигурации. Если true - загрузка будет производиться из Bitbucket. Если false - загрузка будет производиться из дистрибутива

loadFromGitBranch

String

Ветка репозитория, из которой будет выполняться загрузка, если loadFromGit=true.

configs

Multi-Select

Конфигурации для загрузки (scripts, base, system, connectorhost, и т.д.)

excludedObjects

String

Исключаемые объекты (через запятую). Фильтрация происходит по указываемым словам, из загрузки будут исключаться все объекты, название которых содержит хотя бы одно указанное слово.

nexusType

Choice

Используемый Nexus (release/ci)

nexusVersion

Choice

Версия дистрибутива IDM в Nexus

gitFolder

Choice

Каталог в Git (стенд)

vaultPath

String

Путь к секретам выбранного стенда в Vault

overrideTasksFile

String

Путь до файла с переопределенными параметрами задач. Путь указывается относительно файла job.

deleteBeforeUpload

Boolean

Выполнять ли удаление существующих ресурсов перед загрузкой

waitTaskCompletion

Boolean

Дожидаться ли завершения задач, запущенный на стенде в момент запуска job

deletionTaskByName

Boolean

Удалять ли задачи по имени. Если true - задачи для удаления (при удалении существующих ресурсов) будут искаться только по имени, если false - задачи будут искаться по oid.

factLoadResources

Boolean

Загружать ли ресурсы. Если false - конфигурация конкретно ресурса не будет загружена.

factLoadTasks

Boolean

Загружать ли задачи. Если false - конфигурация конкретно задач ресурса не будет загружена.

loadFosByCos

Boolean

Загружать таблицу FOSBYCOS. Если false - конфигурация не будет загружена.

mtlsStand

Boolean

Использовать ли mTLS при подключении

Этапы выполнения#

  1. Check engine availability — проверка доступности IDM engine.

  2. Checkout configs repo — скачивание параметров из Bitbucket.

  3. Loading fosbycos table — загрузка таблиц соответствий (опционально).

  4. Checkout/Download templates — загрузка шаблонов из Git или Nexus.

  5. Parametrise downloaded xml configs — замена параметров в шаблонах.

  6. Execute init scripts — выполнение предзагрузочных скриптов.

  7. Load base post-init objects — загрузка базовых конфигураций.

  8. Backup and delete old resources — резервное копирование и удаление старых объектов.

  9. Loading resource and tasks — загрузка ресурсов и задач.

  10. Update Confluence page — обновление страницы в Confluence (опционально).

Поддерживаемые типы объектов#

  • resources.

  • tasks.

  • roles.

  • connectorHosts.

  • genericObjects.

  • orgs.

  • lookupTables.

Master Job From Nexus Git Vault#

Файл: masterJobFromNexusGitVault.groovy

Назначение#

Мастер-сущность инструмента Jenkins (Jenkins job) для оркестрации загрузки конфигураций на несколько стендов. Запускает дочерние job loadResourcesFromNexusGitVault для каждого стенда.

Параметры#

Параметр

Тип

Описание

standId

Choice

Стенд для деплоя

nexusType

Choice

Используемый Nexus

nexusVersion

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"

Процесс работы#

  1. Итерация по конфигурации loadedResources.

  2. Запуск remote job с передачей параметров через triggerRemoteJob.

  3. Сбор статуса выполнения каждого этапа.

  4. Формирование общего описания сборки.

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.

Параметры#

Параметр

Тип

Описание

clusterId

Choice

Стенд

midpointHost

String

URL стенда

mtlsStand

Boolean

Использовать ли mTLS при подключении к IDM

midpointCredentialId

String

Имя секрета Jenkins для подключения к IDM

resourceOid

String

OID ресурса для бэкапа

rolesCatalogOid

String

OID каталога ролей

tasksToBackup

String

Список OID задач для сохранения, через запятую

SwitchTheResourceToMaintenanceModeRun

Boolean

Переводить ли ресурс в режим maintenance перед бэкапом

BackupResourceReferenceFromUsersAssignmentRun

Boolean

Сохранять ли ссылки на ресурс у пользователей, на которых был назначен данный ресурс

BackupProjectionFromUsersLinkRefRun

Boolean

Сохранять ли ссылки на проекции пользователей в данном ресурсе

BackupResourceRolesRun

Boolean

Сохранять ли роли, импортированные из ресурса

BackupLinksToTheTargetResourceFromRolesRun

Boolean

Сохранять ли ссылки на ресурс из других ролей

BackupResourceOrganizationsRun

Boolean

Сохранять ли организации из ресурса

BackupTasksRun

Boolean

Сохранять ли задачи

BackupProjectionFromIDMRepositoryRun

Boolean

Сохранять ли проекции из БД IDM

BackupFunctionalAdminRolesRun

Boolean

Сохранять ли роли функциональных администраторов ресурса

BackupRolesCatalogRun

Boolean

Сохранять ли каталог ролей

BackupTheResourceRun

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, а не все связанные с ресурсом.

Параметры#

Параметр

Тип

Описание

clusterId

Choice

Стенд

midpointHost

String

URL стенда

mtlsStand

Boolean

Использовать ли mTLS при подкоючении к IDM

midpointCredentialId

String

Имя секрета Jenkins c eчетными данными для доступа job к IDM

resourceOid

String

OID ресурса

rolesCatalogOid

String

OID каталога ролей

tasksToDelete

String

Список OID задач для удаления, через запятую

SwitchTheResourceToMaintenanceModeRun

Boolean

Переводить ли ресурс в maintenance перед удалением

DeleteResourceReferenceFromUsersAssignmentRun

Boolean

Удалять ли ссылки у пользователей

DeleteProjectionFromUsersLinkRefRun

Boolean

Удалять ли ссылки на проекции

DeletingResourceRolesRun

Boolean

Удалять ли роли ресурса

RemovingLinksToTheTargetResourceFromRolesRun

Boolean

Удалять ли ссылки из ролей

RemovingResourceOrganizationsRun

Boolean

Удалять ли организации

RemovingTasksRun

Boolean

Удалять ли задачи

DeleteProjectionFromIDMRepositoryRun

Boolean

Удалять ли проекции

StoreFunctionalAdminRolesRun

Boolean

Отключать ли роли функциональных администраторов

RemovingRolesCatalogRun

Boolean

Удалять ли каталог ролей

RemovingTheResourceRun

Boolean

Удалять ли ресурс

Процесс работы#

  1. Валидация параметров — проверка OID и конфигурации.

  2. Загрузка задачи — создание задачи на вывод из эксплуатации.

  3. Согласование — требуется подтверждение от другого пользователя.

  4. Мониторинг выполнения — отслеживание статуса задачи.

  5. Загрузка отчета — создание отчета о выполнении.

Шаблоны#

  • 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.

Параметры#

Параметр

Тип

Описание

BACKUP

StashedFile

Файл бэкапа

clusterId

Choice

Стенд

midpointHost

String

URL стенда

mtlsStand

Boolean

Использовать ли mTLS

midpointCredentialId

String

Имя секрета Jenkins с учетными данными для доступа job в IDM

UploadResourceRun

Boolean

Восстановить ли ресурс

UploadRolesCatalogRun

Boolean

Восстановить ли каталог ролей

UploadProjectionsRun

Boolean

Восстановить ли проекции

UploadRolesRun

Boolean

Восстановить ли роли

UploadOrgsRun

Boolean

Восстановить ли организации

RestoreRolesLinksRun

Boolean

Восстановить ли ссылки на роли

RestoreOrgsRun

Boolean

Восстановить ли ссылки на организации

RestoreTasksRun

Boolean

Восстановить ли задачи

RecomputeUsersRun

Boolean

Запустить ли пересчет пользователей

CreateReportRun

Boolean

Создать ли отчет о работе job

* - Для корректной работы job, в архиве резервной копии должны существовать те данные, которые восстанавливаются данной job. Например, если параметр UploadRolesCatalogRun=true, то в архиве резервной копии должны быть файлы каталогов. Если файлы в резервной копии отсутствуют - job не восстановит их на стенд IDM.

Этапы восстановления#

  1. Unzip backup — распаковка архива бэкапа.

  2. Upload resource — загрузка ресурса.

  3. Upload roles catalog — загрузка каталога ролей.

  4. Upload projections — загрузка проекций.

  5. Upload roles — загрузка ролей.

  6. Upload orgs — загрузка организаций.

  7. Restore roles links — восстановление ссылок на роли.

  8. Restore orgs — восстановление ссылок на организации.

  9. Restore tasks — загрузка задач (статус waiting).

  10. Recompute users — пересчет пользователей.

  11. 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.

  • Конфигурация механизмов повторных попыток.