Подготовка окружения EVPT на ВМ#

Общие предусловия установки EVPT на ВМ#

  1. Установить пакеты или проверить, что пакеты установлены: Java, Unzip, Ansible (необходимо установить на сервер, с которого будет производиться установка).

  2. Создать пользователей установки (например,scheduler) и дать им права на чтение и запись соответствующих директорий установки/логов/данных.

  3. Создать системные и пользовательские сервисы обслуживания. Создавать необходимо согласно инструкции из подраздела по «Создание системных и пользовательских сервисов обслуживания для EVPT».

  4. Создание сертификатов по инструкции.

  5. Убедиться, что получены дистрибутивы компонента. Состав дистрибутивов описан в разделе Состав дистрибутива и информация о дистрибутиве EVPT.

Предусловия установки с помощью Jenkins Job#

  1. Должен быть настроен доступ в Jenkins и созданы необходимые сущности в нем. Подробнее в разделе Установка EVPT на ВМ, подраздел «Автоматическая установка EVPT с использованием Jenkins».

  2. Должен быть доступ в Nexus и туда должен быть помещен дистрибутив EVPT.

  3. Должен быть доступ в BitBucket и создан в нем проект для помещения скриптов развертывания из дистрибутива (./EVPT-scripts-[version]-distrib.zip), подробнее в подразделе «Получение скриптов развертывания Ansible для EVPT».

Получение скриптов развертывания Ansible для EVPT#

Скачать и разархивировать дистрибутив ./EVPT-scripts-[version]-distrib.zip, содержащий ansible роли (каталог Ansible) и Jenkins скрипты (каталог Pipeline).

  • При установке с помощью ansible: поместить содержимое директории Ansible на сервер, с которого будет производиться установка.

  • При установке через Jenkins: поместить директории Ansible и Pipeline в корень Git-репозитория, данный репозиторий указать в настройках Jenkins job.

Создание системных и пользовательских сервисов обслуживания для EVPT#

Для автоматического перезапуска EVPT в случае перезагрузки сервера и корректной работы скриптов Ansible необходимо создать системные или пользовательские сервисы обслуживания.

Пререквизиты для создания системных сервисов обслуживания#

Выдайте права пользователям (например,scheduler) на запуск, остановку и редактирование сервиса. Для этого под пользователем root добавьте строки в файл /etc/sudoers:

Для EVPT:

   scheduler ALL= NOPASSWD: /bin/systemctl start scheduler
   scheduler ALL= NOPASSWD: /bin/systemctl stop scheduler
   scheduler ALL= NOPASSWD: /bin/systemctl status scheduler
   scheduler ALL= NOPASSWD: /bin/systemctl restart scheduler
   scheduler ALL= NOPASSWD: /bin/systemctl enable scheduler
   scheduler ALL= NOPASSWD: /bin/systemctl disable scheduler
   scheduler ALL= NOPASSWD: /bin/systemctl daemon-reload
   scheduler ALL= NOPASSWD: /bin/sudoedit /etc/systemd/system/scheduler.service

Пререквизиты для создания пользовательских сервисов обслуживания#

Добавьте вашего пользователя (далее scheduler) в список исключений, чтобы пользовательский сервис приложения не завершался принудительно. Для этого под пользователем root:

  1. Для пользователя необходимо включить linger:

sudo loginctl enable-linger scheduler
  1. Дайте возможность пользовательским сервисам работать как долговременные, выполнив команды:

systemctl restart systemd-logind
loginctl enable-linger scheduler

Автоматическое создание системных и пользовательских сервисов обслуживания#

Для автоматического создания сервисов обслуживания и пользовательских сервисов необходимо для начала заполнить настройки inventory из подраздела «Настройка inventory для EVPT». Затем:

  1. Выберите соответствующий playbook в Jenkins job, в параметре «playbook»:

    • scheduler_system_service - создание системного сервиса обслуживания EVPT,

    • scheduler_user_service.yml - создание пользовательского сервиса обслуживания EVPT,

  2. Выберите сервер (host), параметр «only_on_host».

  3. Запустите работу Jenkins Job.

  4. Проверьте статус Jenkins Job, для успешной работы должно быть - Finished: SUCCESS.

Ручное создание системного сервиса обслуживания#

Под пользователем scheduler выполните следующие действия:

  1. Создайте файл сервиса. Для этого выполните команду sudo /bin/sudoedit /etc/systemd/system/scheduler.service.

  2. Будет создан файл scheduler.service, наполните его следующим содержимым:

[Unit]
Description=Scheduler service
After=local-fs.target network.service

[Service]
WorkingDirectory=<Полный путь до директории в которую будет установлен EVPT>
Type=simple
User=scheduler
ExecStart=<Полный путь до директории в которую будет установлен EVPT>/bin/scheduler run -c {{ scheduler_vm.installdir }}/conf/batch.conf
ExecStop=<Полный путь до директории в которую будет установлен EVPT>/bin/scheduler stop
LimitNOFILE=512000
LimitNPROC=512000
Restart=on-failure
RestartSec=30

[Install]
WantedBy=default.target

Где {{ scheduler_vm.installdir }} - Полный путь до директории в которую будет установлен EVPT.

  1. Для инициализации сервиса выполните команду sudo systemctl daemon-reload.

Ручное создание пользовательского сервиса обслуживания#

Под пользователем scheduler выполните следующие действия:

  1. Создайте файл сервиса ~/.config/systemd/user/scheduler.service со следующим содержимым:

[Unit]
Description=Scheduler service

[Service]
WorkingDirectory=<Полный путь до директории в которую будет установлен EVPT>
Type=simple
ExecStart=<Полный путь до директории в которую будет установлен EVPT>/bin/scheduler run -c {{ scheduler_vm.installdir }}/conf/batch.conf
ExecStop=<Полный путь до директории в которую будет установлен EVPT>/bin/scheduler stop
LimitNOFILE=512000
LimitNPROC=512000
Restart=on-failure
RestartSec=30

[Install]
WantedBy=default.target

Где {{ scheduler_vm.installdir }} - Полный путь до директории в которую будет установлен EVPT.

  1. Для инициализации сервиса выполните команду sudo systemctl --user daemon-reload.

Описание процесса удаления системных и пользовательских сервисов обслуживания в документе: «Руководство администратора» в разделе «Удаление системных и пользовательских сервисов обслуживания».

Настройка inventory для EVPT на ВМ#

  1. Создать директорию в папке inventories Git-репозитория, задать название директории и параметры.

Пример настроек находится в папке !EXAMPLE_VM! (внутри папки Inventories).

  1. В созданной папке должны содержаться следующие элементы:

group_vars/all — директория, в которой лежат файл vars и файл vault;

ssl - директория с сертификатами;

inventory - файл, где прописываются группы host, на которых будут выполняться playbooks.

Пример структуры репозитория:

├── ...
├── files
├── inventories
│   ├── !EXAMPLE_VM!
│   │   ├── group_vars
│   │   │   └── all
│   │   │       ├── vars.yml
│   │   │       └── vault.yml
│   │   ├── inventory
│   │   │
│   │   └── ssl
│   │       └── vaultclient.jks
│   │
│   ├── [новая директория]
│   │   ├── group_vars
│   │   │   └── all
│   │   │       ├── vars.yml
│   │   │       └── vault.yml
│   │   ├── inventory
│   │   │
│   │   └── ssl
│   │       └── vaultclient.jks
├── roles
│   │   ...
├── ansible.cfg
├── ***.yml
├──...
  1. добавить в файл inventory список серверов, на которые будет производиться установка:

localhost ansible_connection=local

[scheduler_vm]
hostname-1.my.host
hostname-2.my.host
  1. Перейти к заполнению файлов в директории group_vars/all. Файл vars.yml заполнить по аналогии с имеющимися примерами vars.yml в папке !EXAMPLE_VM!.

Ознакомиться с примером заполненного файла vars.yml можно в подразделе «Пример заполненного файла vars.yml».

  1. Продолжить заполнение файлов в директории group_vars/all. Файл vault.yml содержит пароли в зашифрованном виде.

Шифровать пароли можно используя механизм ansible-vault. Ознакомиться с инструкцией можно в разделе Использование утилиты «ansible-vault» для шифрования паролей.

  1. Подложить используемые сертификаты в директорию ssl.

Создание Jenkins Job для автоматической установки EVPT#

Настройка credentials для Ansible-Vault#

  1. Создать файл с паролем, с помощью которого при автоматической установке будут расшифровываться пароли, зашифрованные через ansible-vault в параметрах vars выбранного inventory.

NewFile

  1. Зайти в Jenkins в свой проект, перейти во вкладку «Credentials», далее выбрать ваш проект:

Jenkins

  1. Открывается страница, где необходимо выбрать «Global credentials (unrestricted)»:

Jenkins

  1. Далее перейти во вкладку «Add Credentials»:

Jenkins

  1. После перехода будут доступны поля для заполнения:

  • «Kind» — в выпадающем списке выбрать параметр Secret file;

  • «File» — загрузить созданный файл с паролем;

  • «ID» — указать наименование, которое придумываете самостоятельно (данный ID необходимо будет указать в Jenkins Job в параметре vault_cred);

  • «Description» — необязательное поле, в котором можно добавить описание.

  1. Нажать кнопку Create — Credentials для Vault созданы:

Jenkins

Создание Jenkins Job для установки#

  1. Содержимое дистрибутива ./EVPT-scripts-[version]-distrib.zip поместить в Git-репозиторий.

  2. Выбрать в Jenkins New Item для создания нового Jenkins Job:

NewItem

2.1. Добавить название создаваемого Jenkins Job. Нельзя использовать в названии русские буквы, спецсимволы (название может быть любым, например, scheduler_VM).

2.2. Выбрать Pipeline и нажать кнопку «ОК»:

NewItem_create

2.3. На появившейся странице необходимо заполнить поля в блоке Pipeline:

  • Изменить значение параметра „Definition“ на «Pipeline script from SCM»;

  • Изменить значение параметра SCM на «Git»;

  • Заполнить параметр „Repository URL“, в параметре указать путь до вашего Git-репозитория;

  • Заполнить параметр „Credentials“, в параметре указать ваши Credentials с правами на чтение;

  • В параметре „Branches to build“ выбрать ветку, в которой находятся скрипты;

  • В параметре „Script Path“ указать путь до groovy-скрипта: «Pipeline/scheduler_vm.groovy»;

  • Убедиться, что НЕ стоит галочка Lightweight checkout.

  1. Сохранить получившийся Jenkins Pipeline.

  2. На появившейся странице в меню боковой панели выбрать «Собрать сейчас». Запускается первоначальная сборка:

Now

  1. Необходимо обновить страницу.

  2. Затем выбрать в меню боковой панели «Собрать с параметрами»:

Params

  1. На появившейся странице необходимо заполнить следующие параметры и нажать кнопку «Собрать»:

  • jenkins_slave – имя агента Jenkins для сборки;

  • ansible_version – указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins.

  1. Необходимо обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».

  2. Появится страница со всем списком настраиваемых параметров, отвечающих за установку EVPT.

Параметры для установки на ВМ:

  • job_config_renew – отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);

  • inventory – имя inventory для установки;

  • nexusUrl – указать ссылку на переданный дистрибутив компонента EVPT ./EVPT-bin-[version]-distrib.zip;

  • emailto – указать почту, на которую придет рассылка о статусе установки компонента;

  • playbook– выбрать необходимый сценарий установки. Где:

    • scheduler_vm.yml – устанавливает компонент EVPT;

    • prerequirements.yml — playbook для автоматической настройки пререквизитов: устанавливает необходимые пакеты, модифицирует лимиты, настройки сети, прописывает sudo права для использования сервисов и создает директории установки/логов/данных;

    • reencrypt_passwords.yml – перешифровывает пароли;

    • <название сервиса>_system_service.yml – устанавливает system service для указанного компонента;

    • <название сервиса>_user_service.yml – устанавливает user service для указанного компонента.

  • tags – cписок тегов. При пустом значении выполняется установка или обновление EVPT:

    • backup_create — создание резервного копирования;

    • backup_remove — удаление резервного копирования;

    • backup_restore — восстановление из резервного копирования;

    • distribute — распаковка дистрибутива на конечных хостах;

    • install — запуск блока установки;

    • restart – перезапуск компонента;

    • start — запуск компонента;

    • status — статус компонента;

    • stop — остановка компонента;

    • uninstall – удаление evpt.

  • select_all_hosts – отвечает за выполнение playbook на всех host из выбранного inventory;

  • only_on_host – отвечает за выполнение playbook на выбранных host;

  • custom_vault_password – отвечает за ручной ввод пароля для Ansible Vault;

  • jenkins_slave — выбор Jenkins slave;

  • jdk_tool — указание Jenkins Tool с нужной версией JDK, конкретное значение необходимо получить у администратора Jenkins;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;

  • nexus_user_cred — Jenkins username with password credential ID для выкачивания дистрибутива. При задании secman_url – полный путь в HashiCorp Vault до пользователя и пароля. Например: {Jenkins *vault app role* credential ID для получения секретов из SecMan}|path/to/nexus:{user},{password}.

  • vault_cred — Jenkins secret file credential ID со строкой для расшифровки паролей (ansible vault) (несколько через запятую). При задании secman_url – полный путь в HashiCorp Vault до пароля. Например: {Jenkins *vault app role* credential ID_1}|/path/to/vault:{password_1}, {Jenkins *vault app role* credential ID_2}|/path/to/vault:{password_2}. В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например, myVaultBase64.

  • server_ssh_cred – указать Jenkins ssh key Credential ID для подключения к серверам. При задании параметра secman_url — указать полный путь в Hashicorp Vault до секрета. Например {Jenkins *vault app role* credential ID для получения секретов из Hashicorp Vault}|/.../KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myPrivateKeyBase64;

  • secman_url — URL для подключения к HashiCorp Vault.

  • ssl_verify — проверяем, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo, inventories_branch, inventories_path — необязательные параметры. Позволяют указать inventory в стороннем репозитории.

Успешным результатом работы Jenkins job будет запущенный EVPT на hosts, указанных в inventory.

Создание Jenkins Job db_action#

Задание Jenkins db_action используется для настройки базы данных.

  1. Выбрать в Jenkins New Item для создания нового Jenkins Job:

NewItem

1.1. Выбрать Pipeline и нажать кнопку ОК:

NewItem_create

1.2. На появившейся странице необходимо заполнить поля в блоке Pipeline поля:

  • Изменить значение параметра «Definition» на Pipeline script from SCM;

  • Изменить значение параметра «SCM» на Git;

  • Заполнить параметр «Repository URL», в параметре указать путь до вашего Git-репозитория;

  • Заполнить параметр «Credentials», в параметре указать ваши сredentials с правами на чтение;

  • В параметре «Branches to build» выбрать ветку, в которой находятся скрипты;

  • В параметре «Script Path» указать путь до groovy-скрипта Pipeline/db_action.groovy;

  • Убедиться, что НЕ стоит галочка Lightweight checkout.

  1. Сохранить получившийся Jenkins Pipeline.

  2. На появившейся странице в меню боковой панели выбрать «Собрать сейчас». Запустится первоначальная сборка:

Now

  1. Необходимо обновить страницу.

  2. Выбрать в меню боковой панели «Собрать с параметрами»:

Params

  1. На появившейся странице необходимо заполнить следующие параметры и нажать кнопку «Собрать»:

  • job_config_renew — отвечает за обновление Jenkins Job. Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true).

Если параметры не появились, то в настройках необходимо самостоятельно добавить приведенные параметры.

  1. Необходимо обновить страницу и после окончания работы Jenkins Job снова нажать «Собрать с параметрами».

  2. Появится страница со всем списком настраиваемых параметров:

  • job_config_renew — перенастройка задания Jenkins. Данный параметр используется, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path;

  • inventory — имя inventory для установки;

  • nexusUrl — полный путь до дистрибутива (можно указать несколько через запятую);

  • db_action — выбор действия, которое необходимо выполнить: update;

  • jenkins_slave — выбор jenkins slave;

  • jdk_tool — указание Jenkins Tool с нужной версией JDK, конкретное значение необходимо получить у администратора Jenkins;

  • ansible_branch — используется для работы с несколькими ветками скриптов развертывания. Работает только при значении Branch Specifier (blank for „any“) равным ${ansible_branch};

  • ansible_version — указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива компонента из Nexus. Чтобы получить username и password для Nexus из SecMan, необходимо заполнить параметр secman_url в формате: JenkinsCredID |SecManPath:SecManKeys|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID c реквизитами для подключения к SecMan;

    • SecManPath — путь к секретам в SecMan;

    • SecManKeys — имена полей для username и password в SecMan (через запятую);

    • SecManParams — параметры для подключения к SecMan (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password|engineVersion:2

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей ansible vault (можно указывать несколько через запятую). Чтобы получить ansible vault password из SecMan, необходимо заполнить параметр secman_url в формате: JenkinsСredID|SecManPath:SecManKey|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID с реквизитами для подключения к SecMan;

    • SecManPath — путь к секрету в SecMan;

    • SecManKey — имя поля для ansible vault password в SecMan;

    • SecManParams — параметры для подключения к SecMan (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|» (в качестве пароля можно использовать не строку, а файл в base64 формате и секрет в SecMan с именем, оканчивающимся на «Base640», например: myVaultBase64). Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password|engineVersion:2

      • SecManAppRoleCred1|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password1,SecManAppRoleCred2|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password2

      • SecManAppRoleCred1|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password1|engineVersion:2,SecManAppRoleCred2|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password2|engineVersion:2

  • secman_url — URL для подключения к HashiCorp Vault;

  • ssl_verify — проверка, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

  • inventories_path — путь до inventories от корня репозитория.

Пример заполненного файла vars.yml для EVPT#

Установка на ВМ#

Ниже представлен полный список значений по умолчанию, которые при необходимости можно переопределить в своем inventory.

Базовый файл#

Базовый файл — файл Ansible/inventories/!EXAMPLE_VM!/group_vars/all/vars.yml, содержащий минимум настроек для корректной установки приложения.

Пример заполненного базового файла vars.yml:

scheduler_vm:
  installdir: /opt/scheduler # Абсолютный путь на конечном сервере до приложения
  logdir: /opt/scheduler/logs # Абсолютный путь до дирeктории с логами
  batch: # Блок для настройки scheduler
    host: 0.0.0.0  # Хост на котором будет развернут scheduler
    healthCheck: 8089 # Порт для проверки работоспособности scheduler
    port: 8888 # Ожидаемый порт для проверки запуска приложения
    useAkka: false # Включение кластера
    ssl: # Блок настроек ssl
      enabled: false # Включение/выключение ssl
      truststore.location: ssl/scheduler.jks # путь до хранилища truststore
      truststore.password: __PLACEHOLDER__  # пароль от truststore
      keystore.location: ssl/scheduler.jks # путь до хранилища keystore
      keystore.password: __PLACEHOLDER__ # пароль от keystore
      key.password: __PLACEHOLDER__ # пароль для сертификата

При необходимости раскомментировать нужные блоки.

Расширенный файл настроек#

Расширенный файл — файл Ansible/roles/scheduler_vm/defaults/main.yml. Представляет из себя пример всех изменяемых настроек со значениями «по умолчанию». Любую из указанных настроек можно перенести в свой vars.yml для переопределения ее значения.

Пример всех изменяемых настроек со значением «по умолчанию». Любую из указанных настроек можно перенести в свой inventory для переопределения ее значения. При использовании HashiCorp Vault необходимо выбрать один из вариантов получения сертификатов. Ниже представлен вариант выпуск сертификата через «PKI Engine HashiCorp Vault». Тип алгоритма аутентификации и необходимые учетные данные требуется запросить у Администратора HashiCorp Vault. Данный файл подразумевает включение всех блоков для работы с EVPT:

# авторизация под другим пользователем и его паролем
ansible_become: 1 # Использование данного механизма при установке. Доступные значения: 0 и 1. Если 1 — при авторизации на сервере, представляемся другим пользователем. Установка будет производиться под пользователем, указанным в параметре *ansible_become_user* ниже. Значение по умолчанию: 0 (не используем данный механизм)
ansible_become_method: su # Способ представления пользователя в Linux. Доступные значения: su или sudo. При использовании sudo - можно не запрашивать пароль пользователя. Значение по умолчанию: sudo.
ansible_become_flags: --login # Дополнительные ключи для режима su
ansible_become_user: <имя пользователя> # Пользователь, под которым будет производиться установка. Например, kafka. В таком случае, в параметре ansible_user указывается пользователь, под которым осуществляется вход на сервер.
ansible_become_pass: <пароль пользователя> # Пароль пользователя, под которым будет производиться установка (Например, kafka).
scheduler_vm: # на виртуалке
  distr: scheduler.zip # путь до приложения относительно /files
  installdir: /opt/scheduler # абсолютный путь на конечном сервере до приложения
  logdir: /opt/scheduler/logs # абсолютный путь до дирeктории с логами
  # filelogmode: 640 # права на доступ к лог файлам, если не задано, то 640
  # backup_installdir_to: /path/to/backup # директория для сохранения бекапа installdir
  logname: scheduler # наименование файла логов
  loglevel: info # уровень логирования (error, debug, info, warn)
  service_name: scheduler # имя сервиса
  encoding_configs: # конфигурация шифрования паролей
    security.encoding.key: file:./conf/encrypt.pass # путь до файла с секретом используемое для расшифровки пароля
    security.encoding.class: ru.sbt.ss.password.BaseEncryptor # значение не изменяется. Используемый класс для расшифровки пароля
  batch: # блок для настройки scheduler
    host: 0.0.0.0  # Хост на котором будет развернут scheduler
    healthCheck:
      port: 8089 # Порт для проверки работоспособности scheduler
      changeLoggersAvailable: false # Возможность изменения уровня незаданных в logback логеров
      changeRootAvailable: false # Возможность изменения уровня root логера
    port: 8888 # Ожидаемый порт для проверки запуска приложения
    useAkka: false # включение кластера
    ssl:
      enabled: false # включение/выключение ssl
#      truststore.location: ssl/scheduler.jks # путь до хранилища truststore
#      truststore.password: __PLACEHOLDER__  # пароль от truststore
#      keystore.location: ssl/scheduler.jks # путь до хранилища keystore
#      keystore.password: __PLACEHOLDER__ # пароль от keystore
#      key.password: __PLACEHOLDER__ # пароль для сертификата
#      vault.address: https://vault.address # HashiCorp Vault URL
#      vault.pki.role.name: test1 # имя роли в PKI Engine
#      vault.pki.common.name: EVPC # common name для генерации сертификатов
#      vault.auth.type: approle # тип аутентификации. Доступные значения: approle, token, password, cert. Значение по умолчанию: approle
#      vault.auth.role.id: role.id # role ID для типа аутентификации approle
#      vault.auth.secret.id: secret.id # secret ID для типа аутентификации approle
#      vault.tls.enable: "true" # включение/выключение TLS
#      vault.tls.keystore.location: ssl/vaultclient.jks # путь до keystore
#      vault.tls.keystore.password: password # пароль keystore
#      vault.tls.key.password: password # пароль ключа key
#      vault.tls.truststore.location: ssl/vaultclient.jks # путь до truststore
#      keystore.mode: 600 # Права для keystore хранилища
#      truststore.mode: 600 # Права для truststore хранилища
#      vault.tls.truststore.password: password # парол truststore
#      vault.engine.version: 1 # версия API для key-value машины. Значение по умолчанию: 1
#      vault.secret.path: kv1/interceptor # секретный путь для ключа, keystore и truststore паролей
#      vault.secret.key: key # secret key для пароля ключа
#      vault.secret.keystore: keystore # secret key для keystore пароля
#      vault.secret.truststore: truststore # secret key для truststore пароля
#      vault.pem.trust.path: kv1/kvtrust
#      vault.pem.trust.aliases: ca1, ca2

  telemetry: # Конфигурация для Open Telemetry
#    config:
#      file_format: "0.1"
#      resource:
#        attributes:
#          service.name: "<имя сервиса>"
#      propagators: [ tracecontext ]
#      tracer_provider:
#        processors:
#          - simple:
#              exporter:
#                otlp:
#                  endpoint: http://<host>:<port>
#        sampler:
#          always_on: { }

  pekko: # блок включения кластера
    port: 8001 # порт для подклчения в кластере
  quartz: # блок подключения к БД
    enabled: false #  подключение к БД
    database:
      url: jdbc:postgresql://hostname:5432/database # база для подключения
      username: scheduleruser # пользователь для подключения к БД
      password: __PLACEHOLDER__ # пароль для подключения к БД
#  Настройки хранилища (storage)
#  storage:
#    type: kafka # Тип хранилища
#    bootstrap.servers: "localhost:9092" # Адреса серверов Kafka
#    group.id: "test-group" # Идентификатор группы
#    auto.offset.reset: "earliest" # Поведение при сбросе смещения
#    topic: "test" # Имя используемого топика
# Настройки хранилища для компактного топика (storage)
#  storage:
#    type: compactKafka # Тип хранилища
#    topic: "test" # Имя используемого топика
#    timeout: 10000 # Таймаут для клиента Кафки
#    bootstrap.servers: "localhost:9092" # Адреса серверов Kafka
#    group.id: "test-group" # Идентификатор группы
#    auto.offset.reset: "earliest" # Поведение при сбросе смещения

# Настройки лог-файлов
#  log_total_size_cap: 2GB # общий размер всех архивных файлов, если не задано, то бесконечно
#  log_history: 5 # время в днях для хранения логов
#  max_file_size: 50MB # максимальный размер лог файла

# Дополнительные настройки логирования для отдельных библиотек
#  logback_custom_loggers:
#    - name: org.apache.kafka # пример, библиотека kafka
#      level: INFO
#      kafka: false
#      custom_file_appender: # Настройки кастомного appender для класса
#        name: example # название лог файла (обязательное поле)
#        max_file_size: 50MB # максимальный размер лог файла
#        log_history: 5 # время в днях для хранения логов
#        custom_dir: /opt/Apache/scheduler-custom # директория для хранения логов, по умолчанию - scheduler_vm.logdir
#        log_total_size_cap: 2GB # общий размер всех архивных файлов, если не задано, то бесконечно
#        filelogmode: 640 # права на доступ к лог файлам, если не задано, то 640

  logback_kafka_appender: # настройка логирования в Kafka
    enable: false # включение механизма отправки логов в Kafka через logback
    topic: evpt_topic # топик для отправки логов
    never_block: true # блокировка работы приложения при недоступности Kafka (по умолчанию - блокируется, при true недоставленные сообщения в kafka отбрасываются)
    discarding_threshold: 20 # процент свободного места в очереди отправки сообщений при достижении которого будут удаляться сообщения уровня TRACE, DEBUG, INFO
    queue_size: 512 # размер очереди для отправки в Кафку
    retries: 3 # Количество переиницилизации продьюсера, если параметр не задан, по умолчанию значение 3
    interval: 1000 # Интервал между переиницилизациями, по умолчанию 1000 мс. Задается в мс.
    multiplier: 1 # Множитель интервала переинициализации, по умолчанию значение 1.
    producer_configs: # настройка Kafka продюсера
      bootstrap.servers: kafka-host-1:9093,kafka-host-2:9093 # bootstrap подключения к Apache Kafka вида host:port,host2:port2
      security.protocol: SSL # тип протокола подключения. Значение по умолчанию: SSL
      ssl.keystore.location: /opt/scheduler/ssl/scheduler.jks # путь до хранилища сертификатов, для подключения к Kafka
      ssl.keystore.password: _PLACEHOLDER_ # пароль от keystore
      ssl.truststore.location: /opt/scheduler/ssl/scheduler.jks # путь до truststore
      ssl.truststore.password: _PLACEHOLDER_ # пароль от truststore
      ssl.endpoint.identification.algorithm: "" # обязательный параметр. Значение не изменять. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka

  #      # При использовании Vault
  #      ssl.keystore.location: ${dollar}{vault:ssl.keystore.location}
  #      ssl.keystore.password: ${dollar}{vault:ssl.keystore.password}
  #      ssl.key.password: ${dollar}{vault:ssl.key.password}
  #      ssl.truststore.location: ${dollar}{vault:ssl.truststore.location}
  #      ssl.truststore.password: ${dollar}{vault:ssl.truststore.password}
  #      ssl.keystore.mode: 600 # Права для keystore хранилища
  #      ssl.truststore.mode: 600 # Права для truststore хранилища
  #      ssl.endpoint.identification.algorithm: ""
  #      ssl.engine.factory.class: ru.sbt.ss.kafka.VaultSslEngineFactory
  #      ssl.vault.properties.file: conf/vault.properties
  #      ## переопределяем необходимые параметры
  #      ssl.vault.pki.common.name: EVPT-logback
  #      ssl.keystore.location: ssl/vault-logback-keystore.jks
  #      ssl.truststore.location: ssl/vault-logback-truststore.jks

  #  vault_configs_file: # Настройки подключения к Vault, помещаются в файл из параметра vault.properties.file
  #    security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Класс шифрования паролей
  #    security.encoding.key: file:ssl/secret.pass # Путь до файла с ключом шифрования
  #    ssl.vault.address: https:/host:port # Адрес vault-сервера
  #    ssl.vault.namespace: "" # Используемое пространство в vault
  #    ssl.vault.tls.enable: "true" # Включение/выключение безопасного подключения к vault
  #    ssl.vault.tls.keystore.location: ssl/vault-client.jks
  #    ssl.vault.tls.keystore.password: "{{ jks_password }}"
  #    ssl.vault.tls.key.password: "{{ jks_password }}"
  #    ssl.vault.tls.truststore.location: ssl/vault-client.jks # Хранилище доверенных сертификатов для безопасного подключения к vault
  #    ssl.vault.tls.truststore.password: "{{ jks_password }}"  # Пароль от хранилища доверенных сертификатов
  #    ssl.endpoint.identification.algorithm: "" # Отключение проверки хостнейма в сертификате
  #    ssl.vault.auth.type: approle # Тип аутентификации
  #    ssl.vault.auth.role.id: role.id # Role ID для типа аутентификации approle
  #    ssl.vault.auth.secret.id: secret.id # Secret ID для типа аутентификации approle
  #    ssl.vault.pki.mount: "pki" # Путь до API движка выпуска сертификатов в Vault pki
  #    ssl.vault.pki.role.name: default # Имя роли в PKI Engine
  #    ssl.vault.pki.common.name: EVPT-logback # Common name (CN) для генерации сертификатов
  #    ssl.vault.pki.email: vasya@rambler.ru # Email для генерации сертификатов
  #    ssl.keystore.location: ssl/vault-keystore.jks # Путь до keystore хранилища
  #    ssl.keystore.mode: 600 # Права для keystore хранилища на файловой системе
  #    ssl.truststore.location: ssl/vault-truststore.jks # Путь до truststore хранилища
  #    ssl.truststore.mode: 600 # Права для keystore хранилища на файловой системе
  #    ssl.vault.secret.path: kv1/certstore # Секретный путь для паролей от ключа, keystore и truststore
  #    ssl.vault.engine.version: 1 # Версия API для key-value машины
  #    ssl.vault.secret.key: password # Secret key для пароля от ключа
  #    ssl.vault.secret.keystore: password # Secret key для пароль от keystore
  #    ssl.vault.secret.truststore: password # Secret key для пароля от truststore

  audit:
  #    audit.service.node.id: "hostname-1" # Идентификатор узла
  #    audit.service.source.system: "source.system" # Название инсталляции
  #    audit.service.url.base: http://audit-endpoint.ru
  #    audit.service.url.event.path: /v1/event
  #    audit.service.url.metamodel.path: /v1/metamodel
  #    audit.service.request.timeout.ms: 15000
  #    audit.service.redelivery.enabled: "true"
  #    audit.service.redelivery.interval.ms: 60000
  #    audit.service.redelivery.initial.delay.ms: 60000
  #    audit.service.redelivery.buffers: kafka-buffer, memory
  #    audit.service.redelivery.kafka-buffer.type: kafka
  #    audit.service.redelivery.kafka-buffer.topic: audit-buffer-flink
  #    audit.service.redelivery.kafka-buffer.timeout.ms: 10000
  #    audit.service.redelivery.kafka-buffer.bootstrap.servers: kafka-host-1:9093,kafka-host-2:9093
  #    audit.service.redelivery.kafka-buffer.group.id: audit-redelivery-flink-group
  #    audit.service.redelivery.kafka-buffer.security.protocol: PLAINTEXT
  #    audit.service.redelivery.kafka-buffer.retries: 3
  #    audit.service.redelivery.kafka-buffer.acks: -1
  #    audit.service.redelivery.file-buffer.jobmanager.file.name: /tmp/jobmanager-request-buffer.txt
  #    audit.service.redelivery.file-buffer.taskmanager.file.name: /tmp/taskmanager-request-buffer.txt
  #    audit.service.ssl.enabled: "false"
  #    audit.service.ssl.keystore: /full/path/to/test.jks
  #    audit.service.ssl.keystore.password: pass
  #    audit.service.ssl.key.password: pass
  #    audit.service.ssl.truststore: /full/path/to/test.jks
  #    audit.service.ssl.truststore.password: pass
  #    audit.service.ssl.protocol: TLSv1.2
  #    audit.service.type: http     # Логирование событий
  #    Конфигурация аудита для получения сертификатов из HashiCorp Vault
  #    audit.service.ssl.keystore.location: ${vault:ssl.keystore.location} # Путь до keystore хранилища сертификата, где будет размещен сертификат сгенерированный Vault
  #    audit.service.ssl.truststore.location: ${vault:ssl.truststore.location} # Путь до truststore хранилища
  #    audit.service.ssl.keystore.mode: 600 # Права для keystore хранилища
  #    audit.service.ssl.truststore.mode: 600 # Права для truststore хранилища
  #    audit.service.ssl.vault.address: https:/host:port # HashiCorp Vault URL.
  #    audit.service.ssl.vault.pki.role.name: <role_name> # Имя роли в PKI Engine
  #    audit.service.ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
  #    audit.service.ssl.vault.pki.mount: "" # Путь до API движка выпуска сертификатов в Vault pki
  #    audit.service.ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
  #    audit.service.ssl.vault.namespace: "" # Используемое пространство в vault
  #    audit.service.ssl.vault.auth.type: approle # Тип аутентификации в vault
  #    audit.service.ssl.vault.auth.role.id: <role_id> # Role ID для типа аутентификации approle
  #    audit.service.ssl.vault.auth.secret.id: "{{ vault_secret }}" # Secret ID для типа аутентификации approle
  #    audit.service.ssl.vault.tls.enable: "true" # Наличие защищенного соединения с HashiCorp Vault
  #    audit.service.ssl.vault.tls.truststore.location: /path/to/*.jks # Путь до truststore хранилища
  #    audit.service.ssl.vault.tls.truststore.password: "{{ jks_password }}" # Пароль от truststore хранилища
  #    audit.service.ssl.vault.engine.version: 1 # Версия API для key-value машины
  #    audit.service.ssl.vault.secret.path: path/to/certstore # Секретный путь для ключа, keystore и truststore паролей
  #    audit.service.ssl.vault.secret.key: key # Secret key для пароля ключа
  #    audit.service.ssl.vault.secret.keystore: keystore # Secret key для keystore пароля
  #    audit.service.ssl.vault.secret.truststore: truststore # Secret key для truststore пароля
  #    audit.service.ssl.vault.pem.trust.path: kv1/kvtrust # Путь до Key-Value секрета c доверенными сертификатами в формате PEM
  #    audit.service.ssl.vault.pem.trust.aliases: ca1, ca2 # Список ключей в секрете, содержимое которых необходимо загрузить в хранилище доверенных сертификатов
  #    audit.service.redelivery.memory.type: queue # Тип буфера
  #    audit.service.redelivery.memory.max.size: 100m # Максимальный размер буфера, может быть установлен в гига/мега/кило/байтах,например: 1024, 1024b, 100k, 10m, 1g, -1 для неограниченного размера
  #    audit.service.redelivery.kafka-buffer.ssl.keystore.location: ${vault:ssl.keystore.location} # Путь до keystore хранилища сертификата, где будет размещен сертификат сгенерированный Vault
  #    audit.service.redelivery.kafka-buffer.ssl.truststore.location: ${vault:ssl.truststore.location} # Путь до truststore хранилища
  #    audit.service.redelivery.kafka-buffer.ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение "" неизменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
  #    '"audit.service.redelivery.kafka-buffer.config.providers"': vault # Обязательно в кавычках
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.class: ru.sbt.ss.kafka.VaultConfigProvider # Объявление провайдера шифрования паролей. Значение не изменять
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Значение не изменяется. Используемый класс для расшифровки пароля
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.security.encoding.key: file:path/to/encrypt.pass # Путь до файла, содержащего ключ шифрования паролей
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.address: https:/host:port # HashiCorp Vault URL.
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.tls.enable: "true" # Наличие защищенного соединения с HashiCorp Vault
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.tls.truststore.location:
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.tls.truststore.password: "{{ jks_password }}" # Пароль от truststore хранилища
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение "" неизменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.auth.type: approle # Тип аутентификации. Доступные значения: approle, token, password, cert
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.auth.role.id: <role_id> # Role ID для типа аутентификации approle
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.auth.secret.id: "{{ vault_secret }}" # Secret ID для типа аутентификации approle
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.pki.mount: "" # Путь до API движка выпуска сертификатов в Vault pki
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.pki.role.name: <role_name> # Имя роли в PKI Engine
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.keystore.location: ${vault:ssl.keystore.location} # Путь до keystore хранилища сертификата, где будет размещен сертификат сгенерированный Vault
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.truststore.location:${vault:ssl.truststore.location} # Путь до truststore хранилища
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.secret.path: path/to/certstore # Секретный путь для ключа, keystore и truststore паролей
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.engine.version: 1 # Версия API для key-value машины
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.secret.key: key # Secret key для пароля ключа
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.secret.keystore: keystore # Secret key для keystore пароля
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.secret.truststore: truststore # Secret key для truststore пароля
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.pki.email: email@example.com # Email для генерации сертификатов
  #    audit.service.redelivery.kafka-buffer.config.providers.vault.param.ssl.vault.namespace: "" # Используемое пространство в vault

  #    ## Настройка kafka-транспорта для событий аудита
  #    audit.service.transport.type: kafka # Тип транспорта, http или kafka, по умолчанию http
  #    audit.service.metamodel.topic: metamodel-topic # Имя топика для отправки метамодели
  #    audit.service.event.topic: event-topic # Имя топика для отправки событий
  #    audit.service.kafka.bootstrap.servers: "localhost:9093" # Адреса kafka
  #    ## ОПЦИОНАЛЬНО Сериализаторы (по умолчанию org.apache.kafka.common.serialization.StringSerializer)
  #    audit.service.kafka.key.serializer: org.apache.kafka.common.serialization.StringSerializer
  #    audit.service.kafka.value.serializer: org.apache.kafka.common.serialization.StringSerializer
  #    ## ОПЦИОНАЛЬНО идентификатор клиента
  #    audit.service.kafka.client.id: audit-producer
  #    ## ОПЦИОНАЛЬНО настройки ssl
  #    audit.service.kafka.security.protocol: SSL
  #    audit.service.kafka.ssl.keystore.location: ssl/keystore.jks
  #    audit.service.kafka.ssl.keystore.password: password
  #    audit.service.kafka.ssl.truststore.location: ssl/truststore.jks
  #    audit.service.kafka.ssl.truststore.password: password
  #    audit.service.kafka.ssl.endpoint.identification.algorithm: ""

  #  Пример использования для файлового буфера:
  #    audit.service.redelivery.file-buffer.type: file # Тип буфера
  #    audit.service.redelivery.file-buffer.file.name: buffers/redelivery.txt # Используемый файл
  #    audit.service.redelivery.file-buffer.encryption.enabled: "true" # Включить шифрование событий
  #    audit.service.redelivery.file-buffer.encryption.class: ru.sbt.ss.password.BaseEncryptor # ОПЦИОНАЛЬНО Указать класс шифрования, по умолчанию ru.sbt.ss.password.BaseEncryptor
  #    audit.service.redelivery.file-buffer.encryption.encrypt.key: file:ssl/secret.pass # Ключ шифрования (encrypt.key)
  #    audit.service.redelivery.file-buffer.encryption.encrypt.algorithm: PBEWithHmacSHA512AndAES_256 # Алгоритм шифрования (algorithm), по умолчанию PBEWithHmacSHA512AndAES_256

reencrypt_passwords:
  old_algorithm: PBEWithHmacSHA512AndAES_256 # алгоритм, с которого осуществляется перешифрация (допустимы PBEWithMD5AndTripleDES, PBEWithHmacSHA512AndAES_256)
  new_algorithm: PBEWithHmacSHA512AndAES_256 # алгоритм, на который перешифровываем (допустимы PBEWithMD5AndTripleDES, PBEWithHmacSHA512AndAES_256)
  change_key: false # удалить старый ключ encrypt.pass и сгенерировать новый, которым требуется перешифровать пароли; false - замены ключа не требуется.

## опциональный блок назначения прав для custom_files
#custom_files:
# permissions:
# default_permission: '644'
# custom_permissions:
# - path: test1.txt # Путь относительно директории roles/<role_name>/custom_files

# Файл настроек для playbook DB
db:
  host: localhost # адрес БД
  database: batch # наименовнавие БД
  schema: public # схема БД
  username: __PLACEHOLDER__ # пользователь БД
  password: __PLACEHOLDER__ # пароль БД
  ssl:
    enabled: false # включение/выключение SSL соединения
    keystore_path: ssl/test.jks # путь до keystore относительно inventory
    keystore_password: __PLACEHOLDER__ # пароль от keystore
    truststore_path: ssl/test.jks # Путь до truststore
    truststore_password: __PLACEHOLDER__ # пароль от truststore
    key: __PLACEHOLDER__ # key для truststore пароля

При необходимости можно раскомментировать нужные блоки.