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

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

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

  2. При использовании Jenkins необходимо проверить:

    • наличие доступа в Jenkins. Должны быть выданы права администратором Jenkins на запуск задания Jenkins для пользователя, запускающего установку EVTP. Все операции с Jenkins описаны подробнее в подразделе «Создание Jenkins Job для автоматической установки EVTP»;

    • наличие сетевой доступности Jenkins до серверов, на которые будет производиться установка EVTP. Если доступность отсутствует, то в логе Jenkins Job будет ошибка: connection refused;

    • наличие доступа в BitBucket, где будут размещены проекты со скриптами развертывания, ролями и inventory. Должны быть выданы права администратором BitBucket на запись и чтение для пользователя, запускающего установку EVTP;

    • наличие доступа в Nexus, в который помещен дистрибутив EVTP, а также выданы права на чтение для учетных данных, указанных в настройках задания Jenkins. Права должны быть выданы администратором Nexus.

  3. На серверах для установки создайте пользователей установки (например,flink) и дайте им права на чтение и запись соответствующих директорий установки/логов/данных. Описано подробнее в подразделе «Создание системных и пользовательских сервисов обслуживания для EVTP».

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

  5. Создайте сертификаты.

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

Дополнительно проверьте:

  • Предоставлен доступ от узлов компонента EVTP до узлов Zookeeper компонента EVTP по порту 2181.

  • Обеспечено разрешение имен hosts по IP в рамках всех hosts EVTP (DNS или записи в /etc/hosts).

В процессе создания настроек/установки продукта архитектору/разработчику необходимо самостоятельно выбирать платформенные механизмы безопасности с учетом уровня конфиденциальности обрабатываемой информации и иных требований информационной безопасности.

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

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

  • В случае ручной установки поместите содержимое директории Ansible на сервер, с которого будет производиться установка.

  • В случае установки через Jenkins поместите директории Ansible и Pipeline в корень Git репозитория.

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

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

Создание нового пользователя#

  1. Пользователю необходимо подключиться к серверу, на который будет производиться установка. Выполняется командой: ssh имя пользователя @имя сервера

  2. Пользователю требуется получить права Администратора. Выполняется командой: su

  3. Создайте пользователя flink. Выполняется командой: useradd flink

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

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

Необходимо выдать права пользователю (например,flink) права на запуск, остановку и редактирование сервисов Flink Jobmanager и Flink Taskmanager. Для этого под пользователем root добавьте строки в файл /etc/sudoers:

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

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

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

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

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

systemctl restart systemd-logind
loginctl enable-linger flink

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

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

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

  2. При выполнении команды будет создан файл flink_jobmanager.service. Необходимо наполнить его следующим содержимым:

  [Unit]
  Description=Apache Flink Jobmanager service
  After=local-fs.target network.service

  [Service]
  WorkingDirectory={{ Директория установки}}
  Type=simple
  User={{ Пользователь, под которым будет запускаться сервис }}
  ExecStart={{ Директория установки }}/bin/jobmanager.sh start-foreground {{ адрес сервера }} {{ flink.port }}
  LimitNOFILE=512000
  LimitNPROC=512000
  Restart=on-failure
  RestartSec=30

  [Install]
  WantedBy=default.target
  1. Для инициализации сервиса выполните команду sudo systemctl daemon-reload.

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

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

3.2. При выполнении команды будет создан файл flink_taskmanager.service. Необходимо наполнить его следующим содержимым:

  [Unit]
  Description=Apache Flink taskmanager service
  After=local-fs.target network.service

  [Service]
  WorkingDirectory={{ Директория установки }}
  Type=simple
  User={{ Пользователь, под которым будет запускаться сервис }}
  ExecStartPre=/bin/sleep 5
  ExecStart={{ Директория установки }}/bin/taskmanager.sh start-foreground
  LimitNOFILE=512000
  LimitNPROC=512000
  Restart=on-failure
  RestartSec=30

  [Install]
  WantedBy=default.target
  1. Для инициализации сервиса выполните команду sudo systemctl daemon-reload.

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

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

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

    [Unit]
    Description=Apache Flink Jobmanager service
    
    [Service]
    WorkingDirectory={{ Директория установки }}
    Type=simple
    ExecStart={{ Директория установки }}/bin/jobmanager.sh start-foreground {{ адрес сервера }} {{ flink.port }}
    LimitNOFILE=512000
    LimitNPROC=512000
    Restart=on-failure
    RestartSec=30
    
    [Install]
    WantedBy=default.target
    
  2. Создайте файл сервиса для Flink TaskManager ~/.config/systemd/user/flink_taskmanager.service со следующим содержимым:

    [Unit]
    Description=Apache Flink Taskmanager service
    
    [Service]
    WorkingDirectory={{ Директория установки }}
    Type=simple
    ExecStart={{ Директория установки }}/bin/taskmanager.sh start-foreground
    LimitNOFILE=512000
    LimitNPROC=512000
    Restart=on-failure
    RestartSec=30
    
    [Install]
    WantedBy=default.target
    
  3. Для инициализации сервиса выполните команду sudo systemctl --user daemon-reload.

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

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

  • flink_system_service.yml - создание системного сервиса обслуживания EVTP;

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

  1. Выберите сервер (host), параметр «only_on_host» или «select_all_hosts» для установки на всех хостах.

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

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

Это можно сделать после настройки inventory как в рамках раздела Установка EVTP, подраздела «Ручная установка EVTP с использованием Ansible», так и подраздела «Автоматическая установка EVTP с использованием Jenkins».

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

Отправка событий аудита в топик Apache Kafka для EVTP#

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

Для этого можно использовать служебный топик Apache Kafka, который необходимо создать перед началом установки EVTD (данная реализация возможна для Apache Kafka версии 2.7.2 и дистрибутива EVTD не ниже 3.0.0).

Информация об установке и создании новых топиков Apache Kafka приведена в документации к компоненту EVTD в Руководстве по системному администрированию, раздел Работа с сущностями (topics и ACL)

Имя используемого топика указывается в vars.yml в параметре audit.service.redelivery.<имя буфера>.topic, по умолчанию название topic audit-buffer-flink.

Заполнение файла vars.yml осуществляется в процессе установки.

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

Настройка inventory для EVTP#

  1. Создайте в папке inventories свою директорию (с вашим названием) с параметрами. Пример настроек находится в папке !EXAMPLE! (внутри папки Inventories).

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

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

ssl - директория с сертификатами. На загружаемые сертификаты устанавливаются права доступа 600, что ограничивает доступ к ним только для пользователя, выполняющего функции компонента EVTP;

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

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

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

Параметр:

localhost ansible_connection=local

[flink_jobmanager]
hostname1
hostname2

[flink_taskmanager]
hostname1
hostname2

[flink:children]
flink_jobmanager
flink_taskmanager
  1. Перейдите к заполнению файлов в директории group_vars/all. Файл vars.yml заполнить по аналогии с имеющимися примерами vars.yml в папке !EXAMPLE!.

При этом необходимо задать пароли в зашифрованном виде (описано далее в п.5), а также учесть все настройки безопасности (подробно описано в разделе Установка EVTP, подраздел «Настройки безопасности для установки EVTP»).

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

Для успешной установки необходимо корректно настроить пресет подключения к транспорту. Подробно данная процедура описана в документе «Руководство администратора», раздел «Настройка транспорта».

  1. Необходимо продолжить заполнение файлов в директории group_vars/all. Файл vault.yml является локальным хранилищем паролей Ansible и содержит пароли в зашифрованном виде.

При заполнении файла vars.yml не следует указывать пароли в открытом виде. Пароли следует зашифровать с помощью утилиты ansible-vault и поместить их в файл vault.yml. Подробно данная процедура описана в разделе Использование утилиты «ansible-vault» для шифрования пароле.

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

Используемые сертификаты необходимо зашифровать с помощью утилиты ansible-vault. Подробно данная процедура описана в разделе Использование утилиты «ansible-vault» для шифрования пароле.

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

Получение значений параметров из HashiCorp Vault#

При интеграции с HashiCorp Vault возможно получение значений параметров ansible из него. Для этого при указании параметров в файле vars.yml вместо значений параметров используется следующий синтаксис:

ansible_password: "{{ lookup('hashi_vault', 'url=*** namespace=*** auth_method=approle role_id=*** secret_id=*** secret=*** validate_certs=0') }}"

, где:

  • url – URL для подключения к HashiCorp Vault. Например: https://my.vault.address;

  • namespace – используемый namespace;

  • auth_method – метод аутентификации. Например: approle;

  • role_id – используемый role.id;

  • secret_id – используемый secret.id;

  • secret – путь: ключ для получаемого секрета. Например: kv1/company/secret_keys:jks_password;

  • validate_certs – проверка доверия сертификата HashiCorp Vault.

Параметры подключения и аутентификации запрашиваются у администраторов HashiCorp Vault.

В результате значение переменной ansible_password будет получено из HashiCorp Vault при запуске установки.

Базовый файл для установки#

Пример заполненного базового файла vars.yml: Базовый файл - это файл, содержащий минимум настроек для корректной установки приложения:

ansible_user: flink # Имя пользователя ansible
ansible_password: "{{ flink_password }}" # Пароль пользователя ansible

flink:
  security:
    keystore_path: path/to/*.jks # Путь до сертификата Flink
    truststore_path: path/to/*.jks # Путь до truststore
    keystore_pass: "{{ jks_password }}" # Пароль от keystore
    truststore_pass: "{{ jks_password }}" # Пароль от truststore
    key_pass: "{{ jks_password }}" # Пароль от приватного ключа в keystore

flink_presets:
  kafka_job_universal:
    type: kafka # Тип пресета
    security.protocol: SSL # Тип протокола подключения. Значение по умолчанию: SSL
    bootstrap.servers: host:port,host2:port2 # Bootstrap подключения к Apache Kafka вида host:port,host2:port2
    ssl.truststore.location: path/to/*.jks # Путь до хранилища сертификатов для подключения к kafka
    ssl.keystore.location: path/to/*.jks # Путь до keystore
    ssl.truststore.password: "{{ jks_password }}" # Пароль от хранилища доверенных сертификатов truststore
    ssl.keystore.password: "{{ jks_password }}" # Пароль от keystore
    ssl.key.password: "{{ jks_password }}" # Пароль для приватного ключа в keystore
    ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение "" не изменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
    enable.idempotence: false # Обязательный параметр. При подключении к брокеру Kafka версии ниже 3 необходимо в настройках клиента указывать данный параметр

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

Пример всех изменяемых настроек со значением «по умолчанию». Любую из указанных настроек можно перенести в свой inventory для переопределения ее значения.

При использовании HashiCorp Vault необходимо выбрать один из вариантов получения сертификатов. При использовании очередей неотправленных сообщений в аудит существует возможность их хранения в различных типах буферов.

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

Данный файл подразумевает включение всех блоков для работы с EVTP:

# авторизация под другим пользователем и его паролем
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).
# Авторизация под другим пользователем с использованием sudo (при добавлении в /etc/sudoers: user ALL=(<имя пользователя>) NOPASSWD:ALL)
ansible_become: 1 # Использование данного механизма при установке. Доступные значения: 0 и 1. Если 1 — при авторизации на сервере, представляемся другим пользователем. Установка будет производиться под пользователем, указанным в параметре *ansible_become_user* ниже. Значение по умолчанию: 0 (не используем данный механизм)
ansible_become_user: <имя пользователя> # Пользователь, под которым будет производиться установка
ansible_no_log: true # Маскирование сенситивных значений переменных в сообщениях ansible
flink_presets:
  job_checkpoint: # Настройка checkpoint flink
    #enable: false # use for disable this flink_preset
    stateBackend: FileSystem # Место хранения состояния обработки
    asynchronousSnapshots: "true" # Создание снимков состояния обработки в ассинхронном режиме
    checkPointIntervalMs: 20000 # Интервал между сохранениями состояния обработки
    #checkpointDataUri: "{{ flink.high_availability.storage_dir }}/checkpoints"
  job_restart: # Настройка перезапуска обработчика при ошибках
    restartStrategy: FixedDelay # Стратегия перезапуска
    restartAttempts: 20 # Количество попыток перезапуска
    restartIntervalSec: 10 # Интервал между попытками перезапуска

#  kafka_test_job_universal: # Пресет для использования универсальной job (kafka_test в defaults.json)
#    type:                                  kafka # Тип брокера
#    security.protocol:                     SSL # # Тип протокола подключения. Значение по умолчанию: SSL
#    bootstrap.servers:                     host:port,host:port # Bootstrap подключения к Apache Kafka вида host:port,host2:port2
#    ssl.truststore.location:               /path/to/*.jks # Путь до хранилища сертификатов, для подключения к kafka
#    ssl.keystore.location:                 /path/to/*.jks # Путь до keystore хранилища
#    ssl.truststore.password:               __PLACEHOLDER__ # Пароль от truststore
#    ssl.keystore.password:                 __PLACEHOLDER__ # Пароль от keystore
#    ssl.key.password:                      __PLACEHOLDER__ # Пароль для key.password
#    ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение "" не изменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
#    enable.idempotence: false # Обязательный параметр. При подключении к брокеру Kafka версии ниже 3 необходимо в настройках клиента указывать данный параметр
#
#  kafka_vault_job_universal: # При использовании HashiCorp Vault
#    type: kafka # Тип брокера
#    security.protocol: SSL # Тип протокола подключения. Значение по умолчанию: SSL
#    bootstrap.servers: host:port,host:port # Bootstrap подключения к Apache Kafka вида host:port,host2:port2
#    ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение "" не изменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
#    ssl.keystore.location: ${vault:ssl.keystore.location} # При использовании Vault (без Vault указывается путь к сертификату для подключения к Kafka)
#    ssl.keystore.password: ${vault:ssl.keystore.password} # Пароль от keystore
#    ssl.key.password: ${vault:ssl.key.password} # Пароль для key.password
#    ssl.truststore.location: ${vault:ssl.truststore.location} # Путь до truststore хранилища
#    ssl.truststore.password: ${vault:ssl.truststore.password} # Пароль от truststore
#    ssl.engine.factory.class: ru.sbt.ss.kafka.VaultSslEngineFactory # Класс используемый для настроек vault подключения
#    ssl.vault.properties.file: conf/vault.properties # Путь до файла с настройками vault
#    ## переопределяем необходимые параметры
#    ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
#    ssl.keystore.location: /path/to/*.jks # Путь до keystore хранилища
#    ssl.truststore.location: /path/to/*.jks # Путь до truststore хранилища
#
# При использовании подключения к MQ убедитесь, что протокол разрешен в java.security
# Пример разрешения работы с TLSv1 и TLSv1.1 для openjdk 11.0.11
# sudo sed -i -E "s#(^jdk.tls.disabledAlgorithms=.+) TLSv1,(.+$)#\1\2#g; s#(^jdk.tls.disabledAlgorithms=.+) TLSv1.1,(.+$)#\1\2#g" PATH_TO_YOUR_JAVA/conf/security/java.security
#
#  ibm_mq_test_job_universal: # Пример пресета ibm_mq для использования универсальной job (ibm_mq_test в defaults.json)
#    type: ibm_mq # Тип пресета
#    host: host # Адрес для подключения к ibm_mq
#    port: port # Порт для подключения к ibm_mq
#    channel: ANTON_SSL # Используемый для подключения канал
#    queueManager: M99.CEP.EL1 # Используемый для подключения менеджер очередей
#    ssl: # Настройка сертификатов для защищенного подключения
#      enabled: true # Включение/выключение защищенного подключения
#      protocol: TLSv1 # Убедиться, что протокол поддерживается вашей джавой.
#      keystore:
#        location: /path/to/*.jks # Путь до хранилища сертификатов, для подключения к ibm_mq
#        password: __PLACEHOLDER__ # Пароль от keystore
#      truststore:
#        location: /path/to/*.jks # Путь до хранилища доверенных сертификатов
#        password: __PLACEHOLDER__ # Пароль от truststore
#    charset: UTF-8 # Используемая кодировка
#    sslPeerName: CN=my_hostname # Разрешенный для подключения CN
#    sslCipherSuite: TLS_RSA_WITH_AES_128_CBC_SHA # Используемый алгоритм шифрования
#    setClientReconnectOptions: 67108864 # Включает автоматическое переподключение к менеджеру очередей, в случае если произошло отключение клиента от менеджера очередей(обязательная настройка)
#    setClientReconnectTimeout: 300 # Определяет время(в секундах), в течение которого будет выполняться переподключение к менеджеру очередей в случае обрыва соединения(опциональная настройка, дефолтное значение = 1800)
#
#  postgre_vault_job_universal # При использовании HashiCorp Vault
#    type: database # Тип прессета
#    url: "jdbc:postgresql://host:port/em" # Адрес базы данных
#    driver: "org.postgresql.Driver" # Используемый драйвер для базы данных
#    vaultSecretPath: "kv1/flink" # Путь до key-value хранилища, в котором лежат секреты, необходимые для подключения к БД. Опциональная настройка (если необходимы секреты из Vault)
#    sslfactory: "ru.sbt.cep.flow.event.process.config.parsing.flow.step.storage.postgresql.PostgresqlSslFactory" # Указывается пользовательский класс для создания защищенного подключения к БД. Значение не изменяется
#    sslmode: "verify-ca" # Режим подключения, возможные значения disable, allow, prefer, require, verify-ca и verify-full
#    user: <user_name> # Пользователь базы данных
#    password: <password> # Пароль для базы данных
#    ssl.enabled: "true" # Включение ssl для точки подключения
#    ssl.engine.factory.class: ru.sbt.ss.kafka.VaultSslEngineFactory # Класс используемый для настроек vault подключения
#    ssl.vault.properties.file: conf/vault.properties  # Путь до файла с настройками vault
#    ## переопределяем необходимые параметры
#    ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
#    ssl.keystore.location: ${vault:ssl.keystore.location} # Путь до keystore хранилища сертификата, где будет размещен сертификат сгенерированный Vault
#    ssl.truststore.location: ${vault:ssl.truststore.location} # Путь до truststore хранилища
#
#  artemis_example_job_universal:
#    type: artemis_mq # Тип пресета
#    connectors: host:port # Список брокеров для подключения, в формате host:port через запятую
#    connectorConfigs:
#      verifyHost: "false" # Отключение проверки сертификата сервера
#      ssl.keystore.location: ssl/artemis-client.jks # Путь до keystore хранилища
#      ssl.keystore.password: __PLACEHOLDER__ # Пароль от keystore хранилища
#      ssl.key.password: __PLACEHOLDER__ # Пароль от keystore хранилища
#      ssl.truststore.location: ssl/artemis-client.jks # Путь до truststore хранилища
#      ssl.truststore.password: __PLACEHOLDER__ # Пароль от truststore хранилища
#      # при использовании HashiCorp Vault
#      ssl.engine.factory.class: ru.sbt.ss.kafka.VaultSslEngineFactory # Класс используемый для настроек vault подключения
#      ssl.vault.properties.file: conf/vault.properties # Путь до файла с настройками vault
#      ## переопределяем необходимые параметры
#      ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
#      ssl.keystore.location: ${vault:ssl.keystore.location} # Путь до keystore хранилища сертификата, где будет размещен сертификат сгенерированный Vault
#      ssl.truststore.location: ${vault:ssl.truststore.location} # Путь до truststore хранилища
#    factory:
#      blockOnQueue: "true" # Синхронная отправка сообщений в очередь
#      reconnectAttempts: 0 # Количество повторных попыток подключения
#      recoveryInterval: 2000 # Интервал между попытками восстановления соединения
#      recoveryIntervalMultiplier: 1 # Множитель, на который будет умножаться каждый следующий интервал между подключениями
#      confirmationWindowSize: -1 # Размер буфера команд, переданных от клиента серверу (при -1 - не вести буфер)
#      loadBalancingPolicyClassName: ru.sbt.flink.streaming.connectors.jms.artemismq.utils.RoundRobinLoadBalancingPolicy # Класс балансировщика нагрузки
#      callTimeout: 30000 # Время при отправке через кластерное соединение
#    charset: UTF-8 # Кодировка сообщения
#    disableMassageTimeStamp: false # Отключение временных меток сообщений
#    deliveryMode: non_persistent # Гарантия доставки сообщений (persistent/non_persistent)
#    # `persistent` - сообщение записывается в стабильное хранилище как часть операции отправки сообщения клиентом
#    # `non_persistent` - сообщение может потеряться, но не должно быть доставлено дважды
#    messagePriority: 4 # Приоритет сообщений в диапазоне от 0 до 9
#    messageTimeToLive: 0 # Период времени с момента отправки (в мс), в течение которого созданное сообщение должно храниться в очереди
#    receiveMode: subscribe # Тип подписки - может принимать значения subscribe или poll (синхронный или асинхронный режим приема сообщений)
#    receiveTimeout: 0 # Время ожидания получения сообщения (при 0 - время ожидания не ограничено)

flink:
  distr: flink.zip # Путь до приложения относительно /files
  installdir: /opt/Apache/flink # Абсолютный путь на конечном сервере до приложения
  logdir: /opt/Apache/flink-logs # Абсолютный путь на конечном сервере до логов приложения
#  filelogmode: 640 # Права на доступ к лог файлам, если не задано, то 640
  datadir: /opt/Apache/flink-data # Абсолютный путь на конечном сервере до сохраненных состояний job
  #backup_installdir_to: /tmp/installer # Если параметр задан, то делаем бэкап installdir в эту директорию. Не должно совпадать с installdir
  backup_not_older_than: "1d" # Срок актуальности резервной копии. По умолчанию 1 день. (Может быть в часах: 1h, 2h, 3h и т.д. или в днях: 1d, 2d, 3d, и т.д.)
  clean_installdir_exclude: # Список файлов для исключения при очистке installdir
    - jobs
    - mapping
    - ssl
  cleanLog: true # Очистка logdir при установке
  cleanData: true # Очистка datadir при установке
  uploadLibs: true # Установить в false, если на сервере уже установлено приложение и требуется сгенерировать все конфигурации
  jobManager_xmx: 1024 # Максимальный heap size для jobManager (только в Мб!)
  taskManager_xmx: 2048 # Максимальный heap size для taskManager (только в Мб!)
  service_name: # Имя используемого сервиса (для systemctl)
    taskmanager: flink_taskmanager.service # Имя используемого сервиса для taskmanager
    jobmanager: flink_jobmanager.service # Имя используемого сервиса для jobmanager
  port: 8081 # Порт для web консоли (UI)
  ui_enable: true # Возможность доступа к дашборду по http://host:port
  jmxPort: 8789-8790 # Порт для JMX (range port)
  jmx_security_enable: true # Включение авторизации для JMX
  jmx_ssl_enable: false # включение ssl авторизации для JMX
  jmx_access_roles: # Пользователи для JMX
    - user: myuser # Имя добавляемого пользователя
      access: readonly # Уровень доступа для пользователя (readonly, readwrite)
      password: mypassword # Пароль добавляемого пользователя
  jobmanager_rpc_port: 6123 # RPC порт jobManager
  taskmanager_rpc_port: 6124 # RPC порт для taskManager
  taskmanager_data_port: 6125 # Порт для data exchange
  blob_server_port: 6126 # Порт для blob server (относится к taskManager)
  extra_classpath: false # переносить ли зависимые библиотеки обработчика в classpath Flink (необходимо для запуска обработчиков через rest)
  save_state: true # Сохранять состояние задач в папку с данными
  off_heap_size: 32m # Память вне heap JVM, выделенная приложению Flink для выполнения операторов
  numberOfTaskSlots: 10 # Количество доступных слотов для запуска задач
  parallelism: 1 # Параллельность для всех запускаемых задач (значение по умолчанию)
  telemetry: # Конфигурация для Open Telemetry
    enable: false # Включение/выключение
#    config: # Ниже представлен пример описания конфигурации Open Telemetry
#      file_format: "0.1"
#      resource:
#        attributes:
#          service.name: "<имя сервиса>"
#      propagators: [ tracecontext ]
#      tracer_provider:
#        processors:
#          - simple:
#              exporter:
#                otlp:
#                  endpoint: http://<host>:<port>
#        sampler:
#          always_on: { }
  high_availability: # Только при наличии хранилища, доступного со всех нод Flink! (HDFS, S3, Ceph, nfs, ...)
    enable: false # Включение High Availability mode
    storage_dir: /u01/nfs # Папка хранения данных для восстановления (или имя bucket для s3) без слеша в конце
    #zookeeper: localhost:2181 # Используемый zookeeper (по умолчанию - [zookeeper] из inventory)
    zookeeper_settings: # Настройки zookeeper
      protocol: PLAINTEXT # PLAINTEXT либо SSL
      #keystore_path: /path/to/*.jks # Путь до хранилища сертификатов для подключения к zookeeper
      #keystore_pass: __PLACEHOLDER__ # Пароль keystore
      #truststore_path: /path/to/*.jks # Путь до truststore
      #truststore_pass: __PLACEHOLDER__ # Пароль truststore
      #key_pass: __PLACEHOLDER__ # Secret key для truststore пароля
      #client_acl: creator # для создаваемых z-node в zookeeper прописывать права для сертификата из keystore_path (возможные значения creator / open)
      path_root: /flink # имя znode в Zookeeper для хранения информации о кластере
      #tolerate_suspended_connections: true # игнорирование ошибок прерывания сетевого соединения до zookeeper
    filesystem_type: file:// # Тип файловой системы, по умолчанию file://, возможные значения: file://,hdfs://,s3://
    #s3: # Дополнительные настройки для s3 conf/flink-conf.yaml
    #  s3.endpoint: "https://example.s3.endpoint:443 from Ansible/roles/flink/defaults/main.yml" # Адрес S3
    #  s3.access-key: __PLACEHOLDER__ # Access key для подключения к S3
    #  s3.secret-key: __PLACEHOLDER__ # Secret-key для подключения к S3. При получение из Vault - "vault:kv:{имя ключа}"
    #  s3.path.style.access: true # Признак использования имени bucket в пути URL ресурса вместо хоста
    #  s3.ssl.truststore.location: /path/to/*.jks # Хранилище доверенных сертификатов для связи с S3 по TLS. При получении из Vault - vault:ssl.truststore.location
    #  s3.ssl.truststore.password: __PLACEHOLDER__  # Пароль от хранилища доверенных сертификатов. При получении из Vault - vault:ssl.truststore.password
    # дополнительные настройки для hdfs
    #hdfs_config_dir: /opt/Apache/hadoop/hadoop-3.2.1/etc/hadoop # Обязательный параметр при hdfs. Путь до конфигов кластера hdfs
    #hdfs_executable: /opt/Apache/hadoop/hadoop-3.2.1/bin/hdfs # (необязательный параметр) Строка запуска консольного hdfs (например sudo hdfs). Default: hdfs
  metrics: # настройки для мониторинга
    metrics.reporter.jmx.factory.class: org.apache.flink.metrics.jmx.JMXReporterFactory # Класс мониторинга
    # Настройка метрик Prometheus
  #    metrics.reporter.prom.factory.class: org.apache.flink.metrics.prometheus.PrometheusReporterFactory
  #    metrics.reporter.prom.port: 9249-9250
  #  vault_configs_file: # Настройки подключения к Vault, помещаются в файл из параметра vault.properties.file. Предусмотрена работа только с сертификатами формата jks.
  #    security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Класс шифрования паролей
  #    security.encoding.key: file:/u01/flink/conf/encrypt.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: EVTP-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
  #    ssl.revocation.check.enabled: "false" # Включение проверки сертификатов на отзыв/аннулирование перед взаимодействием
  #    security.ssl.vault.pem.trust.aliases: ca1, ca2 # Список ключей в секрете, содержимое которых необходимо загрузить в хранилище доверенных сертификатов
  #    security.ssl.vault.pki.mount: "" # Путь до API движка выпуска сертификатов в Vault pki
  #  vault_configs: # Настройки подключения к Vault. Предусмотрена работа только с сертификатами формата jks.
  #    security.ssl.vault.enabled: "true" # Включение использования vault
  #    security.ssl.vault.properties.file: conf/vault.properties # Путь до файла с настройками
  #    security.vault.secret.path: kv1/flink # Путь для s3.secret-key при получении значения из vault
  #    security.vault.mount.path: kv2/secrets # Путь до секретов s3 в Vault при использовании kv2
  security: # Используется если не заполнен блок vault_configs
    protocol: SSL # Протокол для internal и REST взаимодействий (PLAINTEXT или SSL)
    keystore_path: /path/to/*.jks # Путь до сертификата для работы Flink
    keystore_pass: __PLACEHOLDER__ # Пароль keystore
    truststore_path: /path/to/*.jks # Путь до truststore
    truststore_pass: __PLACEHOLDER__ # Пароль truststore
    key_pass: __PLACEHOLDER__ # Secret key для truststore пароля
    #rest_authentication: true # принудительная проверка сертификата на рест интерфейсе
    ### Настройка fingerprint сертификатов (по умолчанию определяется автоматически)
    #fingerprint: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 # Настройка fingerprint сертификатов (по умолчанию определяется автоматически)
    ### Настройка алгоритма fingerprint сертификатов (SHA-256 / SHA-1)
    fingerprint_algorithm: SHA-256 # Настройка алгоритма fingerprint сертификатов (SHA-256 / SHA-1)
  encoding_configs: # Конфигурация шифрования паролей
    security.encoding.key: ./conf/encrypt.pass # Путь до файла, содержащего ключ шифрования паролей
    security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Значение не изменяется. Используемый класс для расшифровки пароля
  audit_configs: # Конфигурация аудита
    audit.service.class: ru.sbt.ss.audit.flink.LoggerAuditService # Логирование событий в системе аудита
    #audit.service.class: ru.sbt.ss.audit.flink.FlinkHttpAuditService # Отправка событий в систему аудита
    audit.service.metamodel.module: <module_id> # Модуль используемой метамодели
    audit.service.metamodel.version: <1.0> # Переопределить версию метамодели
    audit.service.send.metamodel: "true" # Отправка метамодели аудита на старте
    audit.service.pretty.print: "false" # Форматирование при логировании событий аудита (false-отсутствие форматирование. true-форматирование включено)
    audit.service.ignore.errors: "true" # Игнорирование ошибок при отправке событий в систему аудита
    audit.service.metamodel.path: ./metamodel.json  # Путь до используемой метамодели (задается либо путь, либо модуль и версия)
  #    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 # Endpoint аудита, на который будут отправляться события
  #    audit.service.url.metamodel.path: /v1/metamodel # Endpoint аудита, на который будет отправляться метамодель
  #    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-buffer # Список буферов для хранения запросов аудита на повторную доставку
  #    audit.service.redelivery.kafka-buffer.type: kafka # Тип буфера kafka
  #    audit.service.redelivery.kafka-buffer.topic: <topic_name> # Используемый topic
  #    audit.service.redelivery.kafka-buffer.timeout.ms: 10000 # Этот тайм-аут используется для опроса/коммитов и используется для вычисления тайм-аутов продьюсера kafka как: max.block.ms = тайм-аут / 2; delivery.timeout.ms = тайм-аут / 2 + linger.ms; request.timeout.ms = тайм-аут / 4. Все тайм-ауты могут быть установлены явно.
  #    audit.service.redelivery.kafka-buffer.bootstrap.servers: host1:port1,host2:port2 # Bootstrap подключения к Apache Kafka вида host:port,host2:port2
  #    audit.service.redelivery.kafka-buffer.group.id: <group_id> # Используемая группа для чтения событий аудита
  #    audit.service.redelivery.kafka-buffer.security.protocol: PLAINTEXT # Протокол подключения PLAINTEXT или SSL
  #    audit.service.redelivery.kafka-buffer.retries: 3 # Максимальное количество повторных попыток доставки (-1 для бесконечных попыток) (для параметра audit.reporter.redelivery.stop.on.error должно быть установлено значение false)
  #    audit.service.redelivery.kafka-buffer.acks: -1 # Механизм подтверждения записи в topic
  #    audit.service.ssl.enabled: "false" # Включение/выключение ssl
  #    audit.service.ssl.keystore.location: /full/path/to/*.jks # Путь до хранилища сертификатов, для отправки событий аудита
  #    audit.service.ssl.keystore.password: __PLACEHOLDER__ # Пароль от keystore
  #    audit.service.ssl.key.password: __PLACEHOLDER__ # Пароль для key.password
  #    audit.service.ssl.truststore.location: /full/path/to/*.jks # Путь до хранилища доверенных сертификатов
  #    audit.service.ssl.truststore.password: __PLACEHOLDER__ # Пароль от truststore
  #    audit.service.ssl.protocol: TLSv1.2 # Версия протокола `TLS`, по умолчанию `TLSv1.2`
  #    audit.service.verify.hostname: false # Проверка имени сервера в его сертификате
  #    ## Настройка kafka-транспорта для событий аудита
  #    audit.service.transport.type: http # Тип транспорта, 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: ""
  #    Конфигурация аудита для получения сертификатов из 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 пароля
  #    ssl.vault.pem.trust.path: kv1/kvtrust # Путь до Key-Value секрета c доверенными сертификатами в формате PEM
  #    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
  #    # Пример использования для файлового буфера:
  #    audit.service.redelivery.file-buffer.type: file # Тип буфера
  #    audit.service.redelivery.file-buffer.jobmanager.file.name: /tmp/jobmanager-request-buffer.txt # Используемый файл для jobmanager
  #    audit.service.redelivery.file-buffer.taskmanager.file.name: /tmp/taskmanager-request-buffer.txt # Используемый файл для taskmanager
  #    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:./conf/encrypt.pass # Ключ шифрования (encrypt.key)
  #    audit.service.redelivery.file-buffer.encryption.encrypt.algorithm: PBEWithHmacSHA512AndAES_256 # Алгоритм шифрования (algorithm), по умолчанию PBEWithHmacSHA512AndAES_256
  log_history: 3 # Время в днях для хранения логов
  log_details: INFO # Тип логов для logger name="ru.sbt"
  # log_total_size_cap: 2GB # Ограничивает общий размер всех архивных файлов, если значение не указано, то размер не ограничен. Рекомендуется установить ограничение.
  # Дополнительные настройки логирования для отдельных библиотек
  logback_custom_loggers:
    - name: "com.networknt" # Библиотека валидации JSON
      level: INFO
      kafka: False
#      custom_file_appender: # Настройки кастомного appender для класса
#        name: example # название лог файла (обязательное поле)
#        max_file_size: 50MB # максимальный размер лог файла
#        log_history: 3 # время в днях для хранения логов
#        custom_dir: /opt/Apache/flink-audit # директория для хранения логов, по умолчанию - flink.logdir
#        log_total_size_cap: 2GB # общий размер всех архивных файлов, если значение не указано, то размер не ограничен. Рекомендуется установить ограничение.
#        filelogmode: 640 # Права на доступ к лог файлам, если не задано, то 640
  logback_kafka_appender: # Настройка отправки логов в kafka
    enable: false # Включение механизма отправки логов в Kafka через logback
    topic_FlinkLogger: <topic_name> # Топик для отправки логов флинка
    topic_FlinkLogger_never_block: true # Блокировка работы приложения при недоступности Kafka (по умолчанию - блокируется, при true недоставленные сообщения в kafka отбрасываются)
    topic_FlinkLogger_discarding_threshold: 20 # Процент свободного места в очереди отправки сообщений при достижении которого будут удаляться сообщения уровня TRACE, DEBUG, INFO
    topic_FlinkLogger_queue_size: 512 # Размер очереди для отправки в Кафку
    topic_UniversalJobLogger: <topic_name> # Топик для отправки логов универсального обработчика
    topic_UniversalJobLogger_never_block: true # Блокировка работы приложения при недоступности Kafka (по умолчанию - блокируется, при true недоставленные сообщения в kafka отбрасываются)
    topic_UniversalJobLogger_discarding_threshold: 20 # Процент свободного места в очереди отправки сообщений при достижении которого будут удаляться сообщения уровня TRACE, DEBUG, INFO
    topic_UniversalJobLogger_queue_size: 512 # Размер очереди для отправки в Кафку
    retries: 3 # Количество переиницилизации продьюсера, если параметр не задан, по умолчанию значение 3
    interval: 1000 # Интервал между переиницилизациями, по умолчанию 1000 мс. Задается в мс.
    multiplier: 1 # Множитель интервала переинициализации, по умолчанию значение 1.
    max_pool_size: 8 # Опциональный параметр для установки максимального количества одновременно работающих продюсеров (размер пула), значение по умолчанию 8
    pool_size: 1 # Опциональный параметр, задающий количество одновременно работающих продюсеров (размер пула), не должен быть больше producerMaxPoolSize, значение по умолчанию 1
    pool_load_balancer: round-robin # Опциональный параметр для указания алгоритма балансировки нагрузки для параллельных продюсеров ('random' или 'round-robin'), значение по умолчанию 'round-robin'
    producer_configs: # Настройка Kafka продюсера
      - "bootstrap.servers=host1:port1,host2:port2" # Bootstrap подключения к Apache Kafka вида host:port,host2:port2
      - "security.protocol=SSL" # Тип протокола подключения. Значение по умолчанию: SSL
#      ssl.keystore.location: ssl/logback.jks # Путь до хранилища сертификатов, для отправки логов в kafka
#      ssl.keystore.password: _PLACEHOLDER_ # Пароль от keystore
#      ssl.key.password: _PLACEHOLDER_ # Пароль для key.password
#      ssl.truststore.location: ssl/logback.jks # Путь до truststore хранилища
#      ssl.truststore.password: _PLACEHOLDER_ # Пароль от truststore
#      ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение "" не изменяемое. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka
#      ssl.engine.factory.class: ru.sbt.ss.kafka.VaultSslEngineFactory # Класс используемый для настроек vault подключения
#      ssl.vault.properties.file: conf/vault.properties # Путь до файла с настройками vault
#      ## переопределяем необходимые параметры
#      ssl.vault.pki.common.name: <common_name> # Common name (CN) для генерации сертификатов
#      ssl.keystore.location: ${vault:ssl.keystore.location} # Путь до keystore хранилища сертификата, где будет размещен сертификат сгенерированный Vault
#      ssl.truststore.location: ${vault:ssl.truststore.location} # Путь до truststore хранилища
## Допустимые параметры для additionalJobmanagerJavaOpts и additionalTaskmanagerJavaOpts:
#  - "-Xms"
#  - "-Xmx"
#  - "-XX:MetaspaceSize"
#  - "-XX:MaxMetaspaceSize"
#  - "-XX:MinMetaspaceFreeRatio"
#  - "-XX:MaxMetaspaceFreeRatio"
#  - "-XX:MinHeapFreeRatio"
#  - "-XX:MaxHeapFreeRatio"
#  - "-Dcom.ibm.msg.client.commonservices.log.status"
#  additionalJobmanagerJavaOpts: "-Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200" # Дополнительные параметры JVM для JobManager
#  additionalTaskmanagerJavaOpts: "-Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200" # Дополнительные параметры JVM для TaskManager
  customSystemProps: # Дополнительные настройки для conf/flink-conf.yaml
    - { key: 'taskmanager.memory.jvm-metaspace.size', value: '1024m' } # adding line
    - { key: 'classloader.resolve-order', value: 'parent-first' } # adding line
    - { key: 'akka.framesize', value: '104857600b' } # Увеличиваем максимальный объем данных передаваемых между JM и TM
  jobs: {} # Список запускаемых обработчиков
#  jobs:
#    my_job: # Имя обработчика
#      distr: "jobs/current/event-process-flow.jar" # Путь до приложения относительно /files
#      jobclass: "ru.sbt.cep.flow.event.process.Main" # Главный исполняемый класс
#      parallelism: 1 # Параллельность запуска
#      args: # Аргументы, передаваемые в обработчик
#        config: <Относительный путь до файла конфигурации обработчика>
#        jobName: my_job # Имя обработчика. Нельзя использовать в названии кириллицу и спецсимволы.
#      args_from_flink_presets: # Аргументы, передаваемые в обработчик (берутся из указанных пресетов)
#        - job_restart # Имя пресета для конфигурации рестарта обработчика
#        - job_checkpoint # Имя пресета для конфигурации чекпоинтов обработчика

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

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

Настройки безопасности для установки EVTP#

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

Настройки безопасности задаются в файле vars.yml перед запуском установки и находятся в разделах:

  1. Настройки ssl-сертификатов и их хранилища для EVTP:

flink:
    security:
        protocol: SSL # Протокол для internal и REST взаимодействий (PLAINTEXT или SSL)
        keystore_path: /path/to/*.jks # Путь до сертификата для работы Flink
        keystore_pass: __PLACEHOLDER__ # Пароль keystore
        truststore_path: /path/to/*.jks # Путь до truststore
        truststore_pass: __PLACEHOLDER__ # Пароль truststore
        key_pass: __PLACEHOLDER__ # Secret key для truststore пароля
  1. Настройки подключения системы мониторинга к EVTP:

flink:
    jmxPort: 8789-8790 # Порт для JMX (range port)
    jmx_security_enable: true # Включение авторизации для JMX
    jmx_access_roles: # Пользователи для JMX
        - user: myuser # Имя добавляемого пользователя
        access: readonly # Уровень доступа для пользователя (readonly, readwrite)
        password: mypassword # Пароль добавляемого пользователя
  1. Настройка аудита:

  audit_configs: # Конфигурация аудита
    audit.service.class: ru.sbt.ss.audit.flink.LoggerAuditService # Логирование событий в системе аудита
    #audit.service.class: ru.sbt.ss.audit.flink.FlinkHttpAuditService # Отправка событий в систему аудита
    audit.service.metamodel.module: <module_id> # Модуль используемой метамодели
    audit.service.metamodel.version: <1.0> # Переопределить версию метамодели
    audit.service.send.metamodel: "true" # Отправка метамодели аудита на старте
    audit.service.pretty.print: "false" # Форматирование при логировании событий аудита (false-отсутствие форматирование. true-форматирование включено)
    audit.service.ignore.errors: "true" # Игнорирование ошибок при отправке событий в систему аудита
    audit.service.metamodel.path: ./metamodel.json  # Путь до используемой метамодели (задается либо путь, либо модуль и версия)
  #    audit.service.url.base: http://audit-endpoint.ru # Адрес аудита
  #    audit.service.url.event.path: /v1/event # Endpoint аудита, на который будут отправляться события
  #    audit.service.url.metamodel.path: /v1/metamodel # Endpoint аудита, на который будет отправляться метамодель
  #    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 # Список буферов для хранения запросов аудита на повторную доставку
  #    audit.service.redelivery.kafka-buffer.type: kafka # Тип буфера kafka
  #    audit.service.redelivery.kafka-buffer.topic: <topic_name> # Используемый topic
  #    audit.service.redelivery.kafka-buffer.timeout.ms: 10000 # Этот тайм-аут используется для опроса/коммитов и используется для вычисления тайм-аутов продьюсера kafka как: max.block.ms = тайм-аут / 2; delivery.timeout.ms = тайм-аут / 2 + linger.ms; request.timeout.ms = тайм-аут / 4. Все тайм-ауты могут быть установлены явно.
  #    audit.service.redelivery.kafka-buffer.bootstrap.servers: host1:port1,host2:port2 # Bootstrap подключения к Apache Kafka вида host:port,host2:port2
  #    audit.service.redelivery.kafka-buffer.group.id: <group_id> # Используемая группа для чтения событий аудита
  #    audit.service.redelivery.kafka-buffer.security.protocol: PLAINTEXT # Протокол подключения PLAINTEXT или SSL
  #    audit.service.redelivery.kafka-buffer.retries: 3 # Максимальное количество повторных попыток доставки (-1 для бесконечных попыток) (для параметра audit.reporter.redelivery.stop.on.error должно быть установлено значение false)
  #    audit.service.redelivery.kafka-buffer.acks: -1 # Механизм подтверждения записи в topic
  #    audit.service.ssl.enabled: "false" # Включение/выключение ssl
  #    audit.service.ssl.keystore.location: /full/path/to/*.jks # Путь до хранилища сертификатов, для отправки событий аудита
  #    audit.service.ssl.keystore.password: __PLACEHOLDER__ # Пароль от keystore
  #    audit.service.ssl.key.password: __PLACEHOLDER__ # Пароль для key.password
  #    audit.service.ssl.truststore.location: /full/path/to/*.jks # Путь до хранилища доверенных сертификатов
  #    audit.service.ssl.truststore.password: __PLACEHOLDER__ # Пароль от truststore
  #    audit.service.ssl.protocol: TLSv1.2 # Версия протокола `TLS`, по умолчанию `TLSv1.2`
  #    audit.service.verify.hostname: false # Проверка имени сервера в его сертификате
  1. Настройки S3 (при его наличии):

s3: # Дополнительные настройки для s3 conf/flink-conf.yaml
    s3.endpoint: "https://example.s3.endpoint:443 from Ansible/roles/flink/defaults/main.yml" # Адрес S3
    s3.access-key: "example s3 access key from Ansible/roles/flink/defaults/main.yml" # Access-key для подключения к S3
    s3.secret-key: "example s3 secret key from Ansible/roles/flink/defaults/main.yml" # Secret-key для подключения к S3. При получение из Vault - "vault:kv:{имя ключа}"
    s3.path.style.access: true # Признак использования имени bucket в пути URL ресурса вместо хоста
    s3.ssl.truststore.location: /path/to/*.jks # Хранилище доверенных сертификатов для связи с S3 по TLS. При получении из Vault - vault:ssl.truststore.location
    s3.ssl.truststore.password: __PLACEHOLDER__  # Пароль от хранилища доверенных сертификатов. При получении из Vault - vault:ssl.truststore.password
  1. Настройки HashiCorp Vault:

  vault_configs: # Настройки подключения к Vault
      security.ssl.vault.enabled: "true" # Включение использования vault
      security.ssl.vault.properties.file: conf/vault.properties # Путь до файла с настройками
      security.vault.secret.path: kv1/flink # Путь для s3.secret-key при получении значения из vault
      security.vault.mount.path: kv2/secrets # Путь до секретов s3 в Vault при использовании kv2
  1. Настройки шифрования:

flink:
  encoding_configs: # Конфигурация шифрования паролей
      security.encoding.key: ./conf/encrypt.pass # Путь до файла, содержащего ключ шифрования паролей
      security.encoding.class: ru.sbt.ss.password.BaseEncryptor # Значение не изменяется. Используемый класс для расшифровки пароля

Пример заполненного файла vars.yml приведен в подразделе «Пример заполненного файла vars.yml для EVTP».

В процессе установки все настройки безопасности, заданные первично в файле vars.yml, попадают в конфигурационные файлы flink-conf.yml (настройки общих параметров безопасности, настройки аудита), metamodel.json (файл метамодели аудита), config/encrypt.pass (ключ для шифрования паролей), где могут быть изменены вручную. Для того чтобы новые настройки безопасности применились, необходимо перезапустить EVTP.

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

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

Данный подраздел подготовки окружения относится только к разделу Установка EVTP, подраздел «Автоматическая установка EVTP с использованием Jenkins».

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

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

    NewFile

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

    Jenkins

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

    Jenkins

  4. Далее необходимо перейти во вкладку «Add Credentials»,

    Jenkins

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

  • разделе Kind необходимо выбрать параметр «Secret file»;

  • далее загрузить файл (создание файла см в пункт 1);

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

  • поле Description: либо добавить описание, либо можно оставить строку не заполненной.

Credentials для Vault создается после нажатия кнопки «Create».

Jenkins

Создание Jenkins Job Pipeline SYN_custom#

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

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

NewItem

2.1. Добавьте название создаваемого задания Jenkins. Нельзя использовать в названии кириллицу и спецсимволы.

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/SYN_custom.groovy;

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

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

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

Now

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

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

Params

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

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

  • ansible_version — название Jenkins Tool, отвечающий за используемую версию Ansible.

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

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

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

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

  • nexusUrl — укажите ссылку на переданный дистрибутив ./EVTP-flink-[version]-distrib;

  • emailto — укажите почту, на которую придет рассылка о статусе установки приложения;

  • playbook— выберите необходимый сценарий установки, где:

    • flink.yml — устанавливает EVTP;

    • <название сервиса>_system_service.yml — устанавливает системный сервис для EVTP;

    • <название сервиса>_user_service.yml — устанавливает пользовательский сервис для EVTP;

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

    • reencrypt_passwords.yml — принудительное перешифрование паролей в конфигурационных файлах;

    • <название сервиса>_rolling_update_flink_jks.yml — обновляет jks сертификаты для EVTP;

    • <название сервиса>_rolling_upgrade.yml — обновляет EVTP до новой версии;

  • tags — список тегов. При пустом значении выполняется установка или обновление EVTP. При теге uninstall выполняется удаление EVTP: для playbook «flink.yml»:

    • run_only — выбрать конкретный обработчик;

    • backup_create — создание backup;

    • backup_remove — удаление backup;

    • backup_restore — восстановление из backup;

    • distribute — распаковка дистрибутива;

    • flink_jobs — выбрать определенные job;

    • generate_defaults - используется в flink_utils, проставляется самостоятельно;

    • generate_flink_conf — изменение конфигурационного файла;

    • generate_logback — генерация шаблонов логбэка;

    • generate_pem — генерация pem;

    • generate_savepoint — генерация сейвпоинта;

    • generate_vault_properties — изменения файла vault properties;

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

    • jobmanager_leader — получение адреса лидера jobmanager;

    • jobmanager_restart — перезапуск jobmanager;

    • jobmanager_start — запуск jobmanager;

    • jobmanager_stop — остановка jobmanager;

    • remove_fingerprint — удаление отпечатков;

    • restart — перезапуск приложения;

    • restart_flink_jobs_sequential — последовательный перезапуск job;

    • start — запуск сервиса;

    • start_flink_jobs — запуск job флинка;

    • status — статус сервиса;

    • stop — остановка сервиса;

    • stop_flink_jobs — остановка job флинка;

    • taskmanager_restart — перезапуск taskmanager;

    • taskmanager_start — запуск taskmanager;

    • taskmanager_stop — остановка taskmanager;

    • telemetry — генерация конфигурации OpenTelemetry. В зависимости от значения параметра telemetry.enable в файле vars.yml;

    • uninstall — удаление EVTP;

    • update_certificates — позволяет обновлять сертификаты на конечном host.

  • flinkJobs — используется фильтр с конкретными flink job;

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

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

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

  • jenkins_slave — выбор jenkins slave;

  • jdk_tool — выбор jenkins tool для java, используемой при установке;

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

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

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

  • vault_credJenkins 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 flink_config_create, используется для создания конфигурационных дистрибутивов с настройками для репликации и публикации их в Nexus. Задания создаются аналогично SYN_custom.groovy, только вместо SYN_custom.groovy задается скрипт flink_config_create.groovy.

Список настраиваемых параметров, отвечающих за установку config_create:

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

  • majorVersion — мажорная версия создаваемого конфигурационного дистрибутива. Пример полный версии дистрибутива - ${majorVersion}.001.00-00;

  • nexusUrl — ссылка на пространство в Nexus для публикации конфигурационных дистрибутивов;

  • nexusReleaseUrl — ссылка на релизное пространство в Nexus для определения актуальной версии дистрибутива. Можно оставить пустым, если определяем версию и номер сборки из пространства, в которое идет публикация;

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

  • configManualUpload — загрузка конфигурационного дистрибутива вручную; если значение «false» то конфигурация будет скачиваться из Git и необходимо заполнить параметры: issueID, gitPath, gitUrl, gitCred, gitBranch;

  • issueID — поле для указания номера задачи (пример: XXXX-12345);

  • gitPath — путь до файлов конфигурации в репозитории;

  • gitUrl — ссылка на репозиторий;

  • gitCred — Jenkins Username With Password Credential ID или Jenkins SSH Username With private key Credential ID для выкачивания конфигурационных файлов из Bitbucket. Чтобы получить username и password для Nexus из HashiCorp Vault, необходимо заполнить параметр secman_url в формате: JenkinsCredID|SecManPath:SecManKeys|SecManParams, где:

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

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

    • SecManKeys — имена полей для ssh_username и pssh_key, ssh_key_passphrase в HashiCorp Vault (через запятую). Ssh_key_passphrase не указывается, если у ssh ключа нет пароля;

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

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ssh_username,ssh_key;

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ssh_username,ssh_key,ssh_key_passphrase;

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ssh_username,ssh_key,ssh_key_passphrase|engineVersion:2;
        Если поле ssh_key не содержит строки PRIVATE KEY, то это поле воспринимается как пароль, а не как ssh ключ, и аутентификация производится по имени пользователя и паролю, а не по имени пользователя и ssh ключу.

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

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

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

  • rebuildVersion — версия конфигурационного дистрибутива для сборки (пересборки), например D-30.123.00 (или пусто, если выпускается новый релиз);

  • jenkinsSlaveNode — выбор Jenkins Slave;

  • ansible_branch — ветка скриптов развертывания (в настройках Jenkins указать ${ansible_branch});

  • userID — идентификатор клиента для формирования JMX метрик (необязательное поле);

  • emailto — указать почту, на которую придет рассылка о статусе выполнения операции.

Jenkins Job flink_config_deploy, используется для установки конфигурационных дистрибутивов, выпущенных Jenkins Job flink_config_create. Задания создаются аналогично SYN_custom.groovy, только вместо SYN_custom.groovy задается скрипт flink_utils.groovy.

Список настраиваемых параметров, отвечающих за установку config_deploy:

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

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

  • nexusUrl — указать ссылку на конфигурационный дистрибутив, который был создан на этапе создания Jenkins Job flink_config_create;

  • userID — идентификатор клиента для формирования JMX метрик (необязательное поле);

  • emailto — указать почту, на которую придет рассылка о статусе установки конфигурационного дистрибутива;

  • all_releases_from_conf — Работаем со всеми релизами из inventories/$inventory/flink_releases.conf;

  • custom_releases_from_conf — Работаем с выбранными релизами из inventories/$inventory/flink_releases.conf;

  • custom_job_release — Кастомная версия обработчика (не current из используемого релиза);

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

    • start_flink_jobs — Запуск flink job;

    • stop_flink_jobs — стоп flink job;

    • restart_flink_jobs_sequential — последовательный перезапуск job;

    • generate_defaults — используется в flink_utils, проставляется самостоятельно;

    • status — статус flink job.

  • isTrace — Включение трассировки времени выполнения каждого шага обработчика;

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

  • jenkins_slave — выбор jenkins slave;

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

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

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

  • vault_credJenkins secret file credential ID со строкой для расшифровки паролей (ansible vault) (несколько через запятую); При задании secman_url — полный путь в HashiCorp Vault до пароля, например {Jenkins vault app role credential ID_1}|/path/to/vault:{password_1}, {Jenkis 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 до секрета, например {Jenkis vault app role credential ID для получения секретов из Hashicorp Vault}|/.../KV/ssh:{user},{key},{passphrase} (в качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например, myPrivateKeyBase64);

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

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

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

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

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

Запуск установки с помощью Jenkins#

  1. Запустите задание Jenkins с помощью пункта меню Собрать с параметрами.

  2. Выберите необходимое значение из списка inventory.

  3. Заполните параметр nexusUrl ссылкой на конфигурационный дистрибутив.

  4. Нажмите кнопку Собрать.

  5. Дождитесь окончания выполнения задания Jenkins.

В рамках работы задания Jenkins проверяется корректность создания и запуска EVTP.