README.md

    FESB Object Creator

    Список изменений

    • 1.1.0
      • [FEATURE] Добавлена валидация вводимых строк в YAML конфигурацию. Запрещаются имена с не ASCII символами в полях структуры конфигурации и управляющие последовательности. Структуры с такими нарушениями будут опускаться. Кроме того, теперь происходит обрезание непечатаемых символов по краям значений.
      • [FEATURE] Добавлен режим --diff (см. Режим сравнивания).
      • [FEATURE] Добавлен флаг --no-prompt (см. Способы ввода учетных данных пользователя).
    • 1.0.1
      • [FEATURE] Доработана конфигурация системы логирования (см. Логирование).
    • 1.0.0
      • [FEATURE] Вывод общих статистик (см. Итоговые статистики).
      • [FEATURE] Добавлена возможность ввода пароля для серверов с клавиатуры через окно с консольной псевдографикой (см. Способы ввода учетных данных пользователя).
      • [FEATURE] Полностью изменен алгоритм процедуры накатки изменений (см. Особенности реализации).
      • [FEATURE] Добавлено логирование в файл (см. Логирование).
      • [FIX] Исправлены ошибки в json-сериализации объектов: убраны лишние поля, которые сериализуются по ошибке и в протокол FESB не входят.
      • [FiX] Исправлены ошибки создания объектов класса Permission, в котором используются маскирующие символы #.
    • 0.9.4
      • [FEATURE] Добавлен режим опроса серверов (см. описание в разделе ниже).
      • [BUGFIX] Исправлена ошибка, при которой не выводилась справка на терминал.
    • 0.9.3
      • [BUGFIX] Исправлена ошибка JSON сериализации, из-за которой запросы помещались в очередь неправильно.
      • [FEATURE] Добавлена опция -d (--dry-run).
    • 0.9.1
      • Исправлены небольшие ошибки в парсере YAML.
    • 0.9.0
      • Реализация базового функционала.

    Общее описание

    FESB Object Creator (далее по тексту FOC) — утилита для автоматизированного создания объектов на серверах FESB. Утилита получает на вход файл спецификации запрашиваемых объектов, по которым отправляет REST-запросы на определяемые серверы FESB. Формирование списка запросов и их отправка идет одновременно по мере чтения определений из конфигурации. Утилита обкатывалась на FESB 7.8.328.24 и с большей долей вероятности будет работать и на старших версиях (если не будут меняться обязательные поля в структурах).

    Утилита умеет создавать объекты для четырех классов объектов:

    • Очереди (Queues). Текущая реализация поддерживает очереди только расширенного менеджера очередей (QME).
    • Права доступа (Permissions). Текущая реализация поддерживает права доступа только для расширенного менеджера очередей.
    • Пользователи (Users). Текущая реализация поддерживает пользователей только расширенного менеджера очередей.
    • Роли (Roles).

    Конфигурация задается в виде одного или нескольких YAML файлов с одинаковой структурой, который хранит конфигурацию как серверов, на которые будут отправляться запросы, так и списки создаваемых объектов. Ниже приводится описание этой структуры.

    Установка

    Утилита написана на языке Java версии 1.8 и поставляется вместе со всем набором необходимых ей библиотек в виде ZIP-архива. Для установки достаточно распаковать архив в некоторую директорию.

    В поставке утилиты идут следующие файлы и каталоги:

    • libs/ — каталог внешних зависимоcтей утилиты.
    • etc/ — каталог с конфигурацией и примерами.
    • fesb-object-creator-<ВЕРСИЯ>.jar — архив со скомпилированным кодом утилиты.
    • start-foc.sh — вспомогательный Bash-скрипт, через который можно запускать утилиту из командной строки Bash (не ниже версии 4).
    • README.md — Markdown-файл с документацией.

    Убедитесь, что запускающее окружение видит JRE (не ниже 1.8) и команду java. Если для запуска вы используете скрипт start-foc.sh, то по умолчанию он пытается работать относительно диспозиции, в которой находится файл сценария, и пытается найти fesb-object-creator-<ВЕРСИЯ>.jar рядом с собой, а конфигурацию утилиты по пути ./etc/config.yaml. Некоторые диспозиции в этом скрипте можно менять через переменные окружения. На его основе вы можете реализовать свой сценарий запуска, либо запускать утилиту непосредственно.

    Запуск

    Основной JAR-архив с утилитой хранит манифест, поэтому ее нужно запускать с опцией -jar:

    [FOC__CONFIGURATION=/path/to/config.yaml] \
    [FOC__FILES=file1.yaml,file2.yaml] \
    [FOC__GET_YAML=1] \
    [FOC__NO_PROMPT=1] \
    java <jre-options> -jar fesb-object-creator-*.jar \
      [ -h | --help ] \
      [ -c | --config  /path/to/config.yaml ] \
      [ -d | --dry-run] \
      [ --get-yaml ] \
      [ --dir /path/to/dir ] \
      [ --diff ] \
      [ --no-diff-details ] \
      [ --no-print-server-orphans ] \
      [ --no-prompt ] \
      [file1.yaml file2.yaml ... ]
    

    Примечание:
    Утилита может быть запущена в операционной системе Microsoft Windows, для чего вы должны использовать загрузчик javaw вместо java.

    Утилита конфигурируется через файл config.yaml и это единственный файл, который нужно передавать явно для успешного запуска. Этот файл может быть передан либо опцией -c (--config), либо через переменную окружения FOC__CONFIGURATION, когда это удобно. Если попытаться передать конфигурацию двумя этими путями одновременно, утилита всегда выбирает только один первый удачный в порядке, сначала опция -c, потом переменная окружения.

    Утилите также передается один или несколько файлов с определениями объектов либо аргументами команды ([file1.yaml file2.yaml ... ]), либо переменной окружения FOC__FILES, в которой файлы должны разделяться запятой (,). Утилита и в этом случае проверяет переменную окружения только если аргументы команды пусты.

    Примечание:
    Утилита парсит все входящие файлы одинаково, поэтому, теоретически, определения объектов могут быть переданы в config.yaml. Однако, предполагается, что вы будете разделять входящие данные, и в этом файле будете хранить только определения администрируемых серверов, а в прочих файлах определения объектов. Кроме того, опция -c гарантирует, что файл, переданный в ней, будет обработан первым.

    Прочие опции:

    • -d | --dry-run
      Запускает приложение в отладочном режиме: запросы серверу генерируются, но на самом деле не отправляются. Для тестирования подачи запросов.
    • --get-yaml
      Запускает утилиту в режиме опроса серверов с целью получения их конфигурации и записи результатов в YAML формате. (см. описание режима ниже)
    • --dir /path/to/dir
      Определяет директорию, в который нужно записывать результаты. Если не определена, то по умолчанию используется текущая рабочая директория. Используется в режиме --get-yaml.
    • --diff
      Запускает утилиту в режиме сравнивания. С этой опцией работают ещё две: --no-diff-details и --no-print-server-orphans.
    • --no-diff-details
      Отключает развернутую печать разницы между сравниваемыми частями. Вывод получается немного короче.
    • --no-print-server-orphans
      Отключает печать объектов серверов, для которых не нашлось ни одного соответствия ни в одном из файлов YAML. По умолчанию этот поиск выполняется для диагностики правильности запросов. Использование этой опции отключает поиск таких объектов, что ускоряет формирование отчета.
    • --no-prompt
      Подавляет вывод окна ввода пароля, когда он не определен в конфигурации сервера. Переключение может быть исполнено через переменную окружения FOC__NO_PROMPT.

    start-foc.sh

    Для запуска в окружении оболочки Bash, вы можете использовать вспомогательный сценарий start-foc.sh, идущий в поставке.

    start-foc.sh \
      [-h | --help] \
      [-c | --config /path/to/config.yaml] \
      [--diff] \
      [--no-diff-details] \
      [--no-print-server-orphans] \
      [--no-prompt] \
      file1.yaml file2.yaml ...
    

    Сценарий предполагает, что JAR-архив с утилитой лежит на одном с ним уровне, а диспозиция конфигурации — ./etc/config.yaml. Сценарий использует следующие переменные окружения, которыми вы можете пользоваться во время вызова (в скобках указаны значения по умолчанию):

    • JAVA[=java] — относительный или абсолютный путь до исполняемого файла JRE java.
    • FOC__CONFIGURATION[=etc/config.yaml] — путь до файла конфигурации утилиты.
    • JAVA_OPTS[='-Xmx512M -Xms512M'] — опции для JVM.
    • FOC__FILES[=] — список файлов с определениями объектов с запятой в качестве разделителя.
    • FOC__GET_YAML[=] — включает режим опроса серверов через переменную окружения, как это делает параметр --get-yaml.

    Особенности реализации

    Утилита будет генерировать запросы только если в конфигурации будет найдено хотя бы одно валидное определение объекта. Утилита работает по такому алгоритму:

    1. Если в определении объекта поле disabled установлено в false (значение по умолчанию), то утилита выбирает либо создать объект, либо привести все его допустимые параметры к виду, определяемому передаваемой конфигурацией.
    2. С версии 1.0.0 утилита всегда выгружает с сервера информацию по всем объектам (discovering). Во время обработки конфигурации, утилита формирует запросы по YAML-списку. Для каждого запроса она проверяет существование объекта конфигурации на запрашиваемом сервере. Если объекта из конфигурации фактически нет на сервере, а сгенерированный запрос не является запросом на удаление, утилита формирует REST-запрос на создание объекта, иначе — формируется запрос на редактирование объекта.

      Примечание:
      В очень редких ситуациях, когда стадия discovering для сервера постоянно проваливается, утилита будет всегда безусловно пытаться создать объект для создающих определений из YAML и удалить объект — для удаляющих определений. Это поведение считается ненормальным и может говорить о том, что учётной записи, которую вы предоставили для подключения, не хватает прав получить все значения для фазы discovering..

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

      Примечание:
      Если объект имеет булевы поля (значения которых могут быть true или false), то они всегда будут попадать в тело запроса, но с учетом разницы между запрашиваемыми и фактическими значениями. Булевы поля технически сложно фильтровать при сериализации в JSON, поэтому они являются исключением из правил. Это не вносит каких-то ошибок, просто булевы поля всегда попадают в запрос.

    4. Если в определении объекта поле disabled установлено в true, то утилита будет пытаться удалить объект с заявленным идентификатором. С версии 1.0.0 утилита всегда проверяет существование объекта на сервере, если он прошел стадию discovering успешно. Если объект есть на сервере, то утилита попытается его удалить, иначе она отменит этот запрос (rejecting).
    5. Технически внутренняя реализация предусматривает пользовательские запросы на выгрузку информации, но их не предусматривает текущая YAML-спецификация.

    Итоговые статистики

    С версии 1.0.0 стандартном режиме запуска создания/изменения/удаления объектов утилита по завершении работы возвращает результирующие счетчики. Общий вид счетчиков представлен ниже.

    TOTAL STATISTICS:
      Number of requests to CREATE . . . . . . . . . . . . . . . . . : {счётчик}
         Queues  . . . . . . . . . . . . . . . . . . . . . . . . . . : {счётчик}
         Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . : {счётчик}
         Users . . . . . . . . . . . . . . . . . . . . . . . . . . . : {счётчик}       
         Permissions . . . . . . . . . . . . . . . . . . . . . . . . : {счётчик}
      Number of requests to CHANGE . . . . . . . . . . . . . . . . . : {счётчик}
         Queues  . . . . . . . . . . . . . . . . . . . . . . . . . . : {счётчик}
         Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . : {счётчик}    
         Users . . . . . . . . . . . . . . . . . . . . . . . . . . . : {счётчик}
         Permissions . . . . . . . . . . . . . . . . . . . . . . . . : {счётчик}
      Number of requests to DELETE . . . . . . . . . . . . . . . . . : {счётчик}
      Number of requests to GET  . . . . . . . . . . . . . . . . . . : {счётчик}     
      Number of REJECTED requests  . . . . . . . . . . . . . . . . . : {счётчик}
      Number of FAILURES . . . . . . . . . . . . . . . . . . . . . . : {счётчик}
      Number of UNRECOGNIZED requests  . . . . . . . . . . . . . . . : {счётчик}  
    

    Счётчики следует интерпретировать так:

    • Number of requests to CREATE — количество обработанных запросов из очереди, по которым объекты должны быть созданы. Счетчики ниже конкретизируют этот счетчик по категориям Queues (Очереди), Roles (Роли), Users (Пользователи) и Permissions (Права доступа). Этот счетчик не учитывает отмененные (rejected) и неопознанные (unrecognized) запросы, для которых используются свои счетчики. В нормальной ситуации, сумма четырех счетчиков под данным счетчиком должна давать его значение.
    • Number of requests to CHANGE — количество обработанных запросов из очереди, по которым объекты должны быть изменены. Четыре счетчика ниже конкретизируют этот счетчик по категориям. Этот счетчик не учитывает отмененные (rejected) и неопознанные (unrecognized) запросы, для которых используются свои счетчики. В нормальной ситуации, сумма четырех счетчиков под данным счетчиком должна давать его значение.
    • Number of requests to DELETE — количество обработанных запросов из очереди, по которым объекты должны быть удалены. Этот счетчик не учитывает запросы на удаление, которые были отменены по причине того, что объекта удаления нет на сервере (это учитывает счетчик отмененных запросов).
    • Number of requests to GET — количество обработанных запросов на выгрузку данных с серверов. В нормальной ситуации этот счетчик равен 4 x {число-серверов-в-конфигурации}, где 4 — число запросов на выгрузку всех объектов по 4-м категориям.
    • Number of REJECTED requests — количество отмененных запросов. Отмененные запросы — это такие, которые корректны с точки зрения конфигурации YAML, но по которым не может быть построен корректный REST-запрос. Основной причиной отмены запросов является ситуация, когда удаляется объект, которого нет на сервере. Также причинами могут быть внутренние ошибки утилиты, которые не были выявлены на стадии тестирования.
    • Number of FAILURES — количество отправленных запросов, ответные коды на которые не находились в диапазоне [200..300), где квадратная скобка значит включительно. Причинами этих провалов может быть некорректные параметры для объектов в YAML-спецификации, либо ошибки утилиты, пропущенные на стадии тестирования.
    • Number of UNRECOGNIZED requests — количество нераспознанных запросов. В нормальном состоянии всегда должен быть равен нулю. Счетчик может быть ненулевым только из-за ошибок сериализации, которые были пропущены на стадии тестирования.

    Логирование

    Начиная с версии 1.0.0, утилита пишет логи в текстовые файлы. Это сделано для возможности анализа результатов в операционной системе Microsoft Windows, где нет возможности писать в управляющий терминал. Кроме того, утилита может писать во время вызова большое количество сообщений на терминал, что создает недобства при анализе результатов.

    При запуске, утилита создаёт в рабочей директории каталог logs/, в который пишет следующие логи:

    • application-requester.log — лог работы потока, отправляющего запросы на сервер. Каждая запись имеет примерно такой формат:

      2025-01-31 15:36:26,406 [foc-utility] INFO >>>>>>>>> Requesting server QM-41 [127.0.0.1] with POST /manager/api/qme/servers/QM-41/security/addresses (org.little.foc.routines.RequesterRoutine)
      2025-01-31 15:36:26,406 [foc-utility] DEBUG body: {
      "match" : "#",
      "createAddress" : [ "creator" ],
      "deleteAddress" : [ ],
      "createDurableQueue" : [ "creator" ],
      "deleteDurableQueue" : [ ],
      "createNonDurableQueue" : [ ],
      "deleteNonDurableQueue" : [ ],
      "send" : [ "sender" ],
      "consume" : [ "consumer" ],
      "browse" : [ "browser" ],
      "manage" : [ ],
      "configurationManaged" : true
      } (org.little.foc.routines.RequesterRoutine)
      2025-01-31 15:36:26,463 [foc-utility] INFO <<<<<<<<< Server QM-41 [127.0.0.1] responded with SUCCESS code: 200 (org.little.foc.routines.RequesterRoutine)
      

      В этот же лог пишутся итоговые статистики. Поток, отправляющий запросы, дублирует лог на терминальное устройство, если оно было инициализировано. Файл этого лога ротируемый, т.е. он не перезаписывается, а дописывается.

    • application-yaml-reader.log — лог работы потока, читающего YAML файлы. В этом логе можно увидеть, как распарсилась каждая запись из YAML-файла, например

      2025-01-31 15:34:09,797 [foc-utility] INFO Checked request:
      {
        username: alice
        password: <hidden>
        passwordEncoderType: null
        servers: null
        disabled: false
        manager: extended
        status: null
        roles: [creator]
        passwordNeedsReset: false
        accountNonExpired: false
        accountNonLocked: false
        credentialsNonExpired: false
        domainsForView: null
        domainsForEdit: null
        domainsForAction: null
        domainsForExport: null
        dashboardScreensForView: null
        dashboardScreensForEdit: null
        dashboardScreensForAction: null
        mdlGroupsForView: null
        mdlGroupsForEdit: null
        mdlModulesForView: null
        mdlModulesForEdit: null
      } (org.little.foc.routines.YamlReadingRoutine)
      

      Сообщения уровня WARN и ERROR этого лога также дублируются на терминальном устройстве. Файл этого лога ротируемый, т.е. он не перезаписывается, а дописывается.

    • error-report.log — в этот лог попадают все сообщения уровней WARN, ERROR и FATAL. Файл этого лога перезаписываемый, т.е. каждый новый вызов будет затирать предыдущие данные. В нормальной ситуации этот лог должен быть пустым. В случаях, когда утилита отрабатывает вызов не так, как ожидалось, проанализируйте первым делом этот лог.

    Каталог, в который пишутся логи, жёстко не назначен. По умолчанию, он использует в качестве префикса текущую рабочую директрию (.). Вы можете переопределить префикс с помощью переменной окружения LOG_DIR. При определении нового префикса, не завершайте его разделяющим слешем.

    Режим сравнивания

    С версии 1.1.0 утилита поддерживает режим сравнивания. В этом режиме утилита делает запрос по всем объектам из конфигурации и пытается найти разницу между значениями конфигурации и фактическими значениями на сервере.

    Для запуска утилиты в этом режиме, необходимо запускать её с опцией --diff, при этом весь ввод в этом режиме остаётся таким же, как если бы она запускалась в обычном режиме. По умолчанию утилита делает полное сравнивание, т.е. производится поиск разности на сервере относительно конфигурации и разницы конфигурации относительно сервера. В результате получается полный отчет, в котором отражаются как элементы, в которых есть разница по конфигурации; элементы которые есть в конфигурации, но которых нет на сервере; элементы которые есть на сервере, но которых нет в конфигурации.

    Вы можете сократить отчет, исключив вывод элементов, которые есть на сервере, но которых нет в конфигурации, если укажите опцию --no-print-server-orphans, которая работает только в режиме сравнивания.

    Ниже показан пример отчета.

                                                                       _                  _
                                                                      | |  o             | |
                                                  __    ,_     __,    | |      _|_  _|_  | |   _
                                                 /  \_ /  |   /  |    |/   |    |    |   |/   |/
                                                 \__/     |_/ \_/|/ o |__/ |_/  |_/  |_/ |__/ |__/
                                                                /|
                                                                \|
    
                                          ###############################################################
                                                                  FOC DIFF REPORT
                                          ###############################################################
        Timestamp: 2025-03-05 14:56:23 MSK
    
                                          ===============================================================
                                                                 Queues Report
                                          ===============================================================
    
    ------------------------------- [Вывод обрезан для краткости] -------------------------------
    
                                          ===============================================================
                                                                Permissions Report
                                          ===============================================================
        [NOTE]: There are permissions on the right (server) side only.
        Server list:
         - {"name":"test","protocol":null,"address":"127.0.0.1","port":7777}
         - {"name":"test1","protocol":null,"address":"127.0.0.2","port":7777}
    
                                               ---------------[     Differences     ]---------------
    
        {                                                                | {
          "comment" : "No matches found on this side."                   |   "match" : "a-mask",
        }                                                                |   "send" : [ "s1",
                                                                         |      "s2",
                                                                         |      "s3" ],
                                                                         |   "configurationManaged" : false
                                                                         | }
    
    
                                          ===============================================================
                                                                  Roles Report
                                          ===============================================================
    
    ------------------------------- [Вывод обрезан для краткости] -------------------------------
    
                                          ===============================================================
                                                                  Users Report
                                          ===============================================================
    
                                               ---------------[     Differences     ]---------------
    
        {                                                                | {
          "username" : "alice",                                          |   "username" : "alice",
          "roles" : [ "root" ],                                          |   "roles" : [ "editor" ],
          "configurationManaged" : false                                 |   "configurationManaged" : false
        }                                                                | }
    
    
    Diff Details:
    -------------
    {
        org.little.foc.config.yaml.model.UserEntry@576f63f6[
          roles=[root]
        ] differs from org.little.foc.config.yaml.model.UserEntry@2dca0d64[
          roles=[editor]
        ]
    }
    

    Описание формата:

    • Вывод отчета всегда начинается с банера и временной метки, когда отчет был сформирован, после чего печатается разница по объектам.
    • Отчет всегда выводится для всех четырех классов объектов, т.е. в отчете выводится четыре подотчета:
      • Queues Report — отчет по разнице в очередях;
      • Permissions Report — отчет по разнице в правах доступа;
      • Roles Report — отчет по разнице в ролях;
      • Users Report — отчет по разнице в пользователях.
    • Для поиска объектов перед их сравниванием используются следующие ключевые атрибуты:
      • для ролей — атрибут name;
      • для пользователей — атрибут username;
      • для прав доступа — атрибут mask;
      • для очередей — атрибут name.
    • Если в каком-либо классе объектов есть разница, то она всегда начинается с баннера

      ---------------[     Differences     ]---------------
      

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

      • Первая часть — выводит состояние объекта в JSON-представлении в YAML конфигурации (левая половина) и этого же объекта на проверяемом сервере (правая половина).
      • Вторая часть — выводит разницу, но показывает в ней только отличающиеся атрибуты объектов. В этом выводе строки сверху надписи differs from показывают различающиеся атрибуты конфигурации, а нижние строки — атрибуты на сервере. Вторая часть всегда начинается со строки Diff Details:.
    • Вы можете отключать вывод второй части, если укажите в вызове опцию --no-diff-details.
    • Если с одной из сторон выводится структура

      {
        "comment" : "No matches found on this side."
      }
      

      это означает, что для объекта на противоположной стороне нет соответствия.

    • Отчет печатается в два места:
      • в каталог логирования, в перезаписываемый файл foc-diff-report.log. Файл перезаписывается при каждом запуске утилиты, поэтому, если вам нужно сохранить результат предыдущего запуска, не забывайте перемещать этот файл в другое место, либо переименуйте его;
      • на консоль.

    Конфигурация утилиты и описание объектов

    Утилита принимает на вход один или несколько YAML-файлов, в которых должны быть описаны как администрируемые серверы, так и создаваемые/редактируемые/удаляемые объекты. Желательно передавать описания серверов исключительно в том файле, который передается опцией -c. Остальные файлы можно подавать в любом порядке. Утилита не использует расширение файла, как признак формата.

    Конфигурация строится из следующих списков:

    • servers — список администрируемых серверов;
    • roles — список ролей;
    • permissions — список прав доступа;
    • users — список пользователей;
    • queues — список очередей.

    В одном файле должен присутствовать хотя бы один из этих списков, чтобы файл мог быть воспринят утилитой корректно. Утилита поддерживает мульти-YAML режим, т.е. несколько YAML-структур в одном файле будут восприниматься так, как будто они передаются разными файлами, например, сравните:

    # file1.yaml
    servers:
      ...
    
    # file2.yaml
    servers:
      ...
    

    и в мульти-YAML виде

    ---
    # file1.yaml
    servers:
      ...
    ---
    # file2.yaml
    servers:
      ...
    

    Порядок объявления списков не имеет значения, однако, желательно, чтобы списки servers подавались первыми. Далее по тексту мы будем называть элемент сопоставления YAML для краткости полем. Поле в элементе списка может быть обязательным или опциональным. Опциональные поля могут иметь значение по умолчанию или быть пустыми. Валидным считается только то вхождение, в котором определены все обязательные поля.

    Список servers

    Определяет серверы, на которые будут направляться запросы. Если в объекте не указывается, для какого сервера он предназначен, то по умолчанию он будет обработан для всех объявленных серверов.

    Общая структура

    servers:
        - name: <manager-id>
          address: <hostname or IP-address>
          port: <port>
          credentials:                  # (опционально) С версии 0.9.5 (см. Способы ввода учетных данных пользователя)
              username: <admin-login>   # (опционально) С версии 0.9.5
              password: <password>      # (опционально) С версии 0.9.5
          protocol: <https | http>      # (опционально) По умолчанию 'http'
          toYaml: [ '<object-type>' ]   # (опционально) По умолчанию пустой
          disabled: false | true        # (опционально) По умолчанию false
    

    Обязательные поля:

    • name — конкретный идентификатор менеджера FESB. Используется в пути запроса и как ссылка в других списках в YAML.
    • address — сетевой адрес хоста, на котором развернут FESB.
    • port — сетевой порт сервера.

    Опциональные поля, начиная с версии 1.0.0:

    • credentials — параметры аутентификации.
      • username — логин пользователя с административной ролью.
      • password — пароль пользователя с административной ролью.

    Опциональные поля:

    • protocol — протокол взаимодействия с сервером. Поддерживаются только http (по умолчанию) и https.

      ВАЖНО:
      Будьте предельно внимательны к настройкам подключения. Если ваш сервер FESB использует только защищенное соединение по протоколу HTTPS, поле protocol должно быть обязательно указано в конфигурации, иначе утилита всегда будет отрабатывать некорректно: по факту никакой работы производиться не будет, а в ответах от сервера всегда будет -1.

    • disabled — включает (false) или отключает (true) использование этого определения.
    • toYaml — используется в режиме опроса серверов (см. в разделе ниже). По умолчанию пустой, что означает опросить сервер по всем объектам.

    Способы ввода учетных данных пользователя

    По умолчанию утилита ожидает учетные данные пользователя для подключения к серверу в основной конфигурации. До версии 0.9.5 отсутствие секции credentials запрещалось валидатором, но с версии 0.9.5 можно опускать эту секцию, либо ее часть. Если секция отсутствует, либо заполнена не полностью, во время чтения конфигурации утилита автоматически переключается в prompt-mode, в котором логин и пароль можно будет ввести с клавиатуры. Для этого утилита построит окно с терминальной псевдографикой следующего вида:

     ┌──────────────────────────────────────────────┐
     │┌─ Enter credentials ────────────────────────┐│
     ││┌─ FESB Server ────────────────────────────┐││
     │││     Name: domain1 [192.168.0.1]          │││
     │││    Login: Alice                          │││
     │││ Password: **********                     │││
     │││           <Try to connect>               │││
     │││           <Abort >                       │││
     ││└──────────────────────────────────────────┘││
     │└────────────────────────────────────────────┘│
     └──────────────────────────────────────────────┘
    

    Примечание:
    Если приложение запускается в оконном окружении, то приложение откроет отдельное окно терминала, используя библиотеку Swift, в которое будет выводить псевдографику. В случаях, когда окно создается не в headless-режиме, не закрывайте окно штатными кнопками в шапке окна, так как утилита некорректно обрабатывает их события в режиме эмуляции терминала и может зависнуть. Всегда используйте только кнопки внутри окна.

    Окно состоит из основной панели FESB Server, внутри которой расположены:

    • Поле Name (только для чтения) — выводится имя и IP-адрес сервера. Для информации.
    • Поле Login — соответствует полю username внутри структуры. Если внутри структуры username для данного сервера не пустое, то поле будет заполнено этим значением автоматически.
    • Поле Password — соответствует полю password внутри структуры. Если это поле есть в структуре, то оно всегда игнорируется.
    • Кнопка Try to connect — при нажатии по кнопке, утилита пытается подключиться к серверу с теми параметрами, которые вы передали в конфигурации и ввели в окно. На момент подключения будет выведено всплывающее информационное окно, исчезновение которого нужно дождаться. Если подключение с указаннами параметрами удается, окно автоматически закроется, в противном случае окно ввода останется, и вы можете попробовать ввести другие значения.
    • Кнопка Abort — при нажатии по кнопке, утилита прерывает исполнение потока чтения конфигурации. В текущей реализации нельзя ввести корректные учетные данные только для части серверов, только для всех, однако, допустимо часть учетных данных вносить через конфигурацию, а часть вводить с клавиатуры.
    Отключение prompt-mode

    С версии 1.1.0 введен флаг, принудительно отключающий prompt-mode. Это может понадобиться, когда утилита запускается в окружении, в котором нет терминального устройства, либо отключен его драйвер. В режиме без prompt-mode утилита будет всегда выбрасывать исключение, если в конфигурации не будет аутентификационных параметров для подключения к серверу.

    Чтобы отключить режим prompt-mode, достаточно передать --no-prompt в параметрах командной строки, либо определить переменную окружения FOC__NO_PROMPT любым значением.

    Список roles

    Определяет роль пользователей на уровне всего сервера FESB. В простейшем случае создает пустую роль.

    Общая структура

    roles:
        - name: <имя-роли>
          permissions: [ '<permission-id>' ]               # (опционально) По умолчанию пустой
          disabled: false | true                           # (опционально) По умолчанию false
          servers: [ '<manager-id>' ]                      # (опционально) По умолчанию null
          domainsForView: [ '<domain-name>' ]              # (опционально) По умолчанию пустой
          domainsForEdit: [ '<domain-name>' ]              # (опционально) По умолчанию пустой
          domainsForAction: [ '<domain-name>' ]            # (опционально) По умолчанию пустой
          domainsForExport: [ '<domain-name>' ]            # (опционально) По умолчанию пустой
          dashboardScreensForView: [ '<domain-name>' ]     # (опционально) По умолчанию пустой
          dashboardScreensForEdit: [ '<domain-name>' ]     # (опционально) По умолчанию пустой
          dashboardScreensForAction: [ '<domain-name>' ]   # (опционально) По умолчанию пустой
          mdlGroupsForView: [ '<domain-name>' ]            # (опционально) По умолчанию пустой
          mdlGroupsForEdit: [ '<domain-name>' ]            # (опционально) По умолчанию пустой
          mdlModulesForView: [ '<domain-name>' ]           # (опционально) По умолчанию пустой
          mdlModulesForEdit: [ '<domain-name>' ]           # (опционально) По умолчанию пустой
    

    Обязательные поля:

    • name — строковый идентификатор роли.

    Опциональные поля:

    • permissions — список прав для этой роли. Ниже перечислены допустимые значения:
      • RQMS_EDIT — редактирование удаленных менеджеров очередей.
      • SETTINGS_MODULE_SERVER_UPDATE — накатка обновлений на сервер FESB.
      • TRANSACTION_EDIT — редактирование мониторинга доставки.
      • SETTINGS_MODULE_SERVER_IMPORT — обновление конфигурации сервера FESB.
      • SETTINGS_USERS_EDIT — редактирование настроек для пользователей.
      • MDL_MODULE_CREATE — создание артефактов.
      • REST_VIEW_ALL — просмотр всех REST доменов.
      • ZOO_EDIT — редактирование координатора.
      • RQMS_VIEW — просмотр удаленных менеджеров очередей.
      • LOG_VIEW — просмотр журнала работы.
      • DASHBOARD_VIEW_ALL — просмотр всех экранов.
      • DOMAIN_IMPORT — импорт всех доменов.
      • SETTINGS_LOGS_EDIT — редактирование настроек журналирования.
      • DOMAIN_EXPORT_ALL — экспорт всех доменов.
      • DOMAIN_EDIT_ALL — редактирование всех доменов.
      • MDL_EDIT — редактирование всех артефактов.
      • DATABASE_ACTION — выполнение баз данных.
      • WEBSERVICE_ACTION — выполнение веб-сервисов.
      • SETTINGS_USERS_VIEW — просмотр настроек для пользователя.
      • SETTINGS_SAVEPOINTS_VIEW — просмотр настроек контрольных точек.
      • SEND_DEFAULT_MESSAGE — отправка сохраненных сообщений.
      • SEND_MESSAGE — отправка сообщений.
      • SETTINGS_CURRENT_SERVER_VIEW — просмотр сервера отображения данных.
      • MDL_MODULE_DELETE — удаление артефактов.
      • MDL_MODULE_IMPORT — импорт артефактов.
      • SETTINGS_WRAPPER_VIEW — просмотр настроек окружения запуска.
      • QMS_VIEW — просмотр стандартного менеджера очередей.
      • MAIN_INFO — доступ к общей информации.
      • SETTINGS_WEB_SERVER_CONFIG_EDIT — редактирование конфигурации веб-сервера.
      • RESOURCE_MONITOR — доступ к монитору ресурсов.
      • SETTINGS_CURRENT_SERVER_EDIT — редактирование настроек сервера отображения данных.
      • SETTINGS_LIBS_VIEW — просмотр настроек библиотек.
      • BROKER_RI_VIEW — просмотр справочников брокера.
      • GATEWAY_ACTION — выполнение шлюзов.
      • QMS_ACTION — выполнение стандартного менеджера очередей.
      • DOMAIN_VIEW_ALL — просмотр всех доменов.
      • QME_ACTION — выполнение расширенного менеджера очередей.
      • WEBSERVICE_VIEW — просмотр веб-сервисов.
      • DOMAIN_CREATE — создание домена.
      • SETTINGS_NODE_VIEW — просмотр настроек узла.
      • SETTINGS_FILEMANAGER_VIEW — просмотр настроек файлового менеджера.
      • SETTINGS_MODULE_SERVER_RESTART — перезапуск сервера FESB.
      • ZOO_ACTION — выполнение координатора.
      • BROKER_RI_EDIT — редактирование справочников брокера.
      • DASHBOARD_CREATE — создание экрана.
      • DASHBOARD_EDIT_ALL — редактирование всех экранов.
      • REST_CREATE — создание REST домена.
      • SETTINGS_MODULE_SERVER_EXPORT — выгрузка конфигурации сервера FESB.
      • REST_ACTION_ALL — выполнение во всех REST доменах.
      • GATEWAY_EDIT — редактирование шлюзов.
      • SETTINGS_BROKER_EDIT — редактирование настроек брокера.
      • SETTINGS_NODE_EDIT — редактирование настроек узла.
      • SETTINGS_CERTIFICATES_EDIT — изменение настроек управления сертификатами.
      • RQMS_ACTION — выполнение удаленных менеджеров очередей.
      • DATABASE_VIEW — просмотр баз данных.
      • WEBSERVICE_EDIT — редактирование веб-сервисов.
      • SETTINGS_LIBS_EDIT — редактирование настроек управления библиотеками.
      • ACTIVE_USERS — активные пользователи.
      • QME_VIEW — просмотр расширенного менеджера очередей.
      • SETTINGS_CERTIFICATES_VIEW — просмотр настроек управления сертификатами.
      • SETTINGS_BROKER_VIEW — просмотр настроек брокера.
      • REST_EDIT_ALL — редактирование всех REST доменов.
      • SETTINGS_SAVEPOINTS_EDIT — редактирование настроек точек восстановления.
      • SSH_ACCESS — управление по SSH.
      • BROKER_ATLASMAP_EDIT — преобразование моделей.
      • DATABASE_EDIT — редактирование баз данных.
      • REST_EXPORT_ALL — экспорт всех REST доменов.
      • TRANSACTION_ACTION — выполнение мониторинга доставки.
      • SETTINGS_WEB_SERVER_CONFIG_VIEW — просмотр настроек веб-сервера.
      • SETTINGS_WRAPPER_EDIT — редактирование настроек окружения запуска.
      • ZOO_VIEW — просмотр координатора.
      • SETTINGS_LOGS_VIEW — просмотр настроек журналирования.
      • QMS_EDIT — редактирование стандартного менеджера очередей.
      • MDL_MODULE_EXPORT — экспорт артефактов.
      • MDL_ACTION — выполнение артефактов.
      • REMOTE_SERVERS — удаленные серверы.
      • TRANSACTION_VIEW — просмотр мониторинга доставки.
      • REST_IMPORT — импорт всех REST доменов.
      • SETTINGS_FILEMANAGER_EDIT — редактирование настроек менеджера файлов.
      • QME_EDIT — редактирование расширенного менеджера очередей.
      • DOMAIN_ACTION_ALL — выполнение действий во всех доменах.
      • MDL_VIEW — просмотр всех артефактов.
      • DASHBOARD_ACTION_ALL — выполнение во всех экранах.
      • GATEWAY_VIEW — просмотр шлюзов.
      • CONFIGURATION_STATUS — статус конфигурации.
    • disabled — переключает режим создания (false) в режим удаления объекта (true).
    • servers — список ссылок на серверы, которые объявлены в списке servers. Можно использовать только существующие идентификаторы, переданные утилите списками servers. Этот список может быть пустым: в этом случае объект будет создаваться для всех серверов списков servers, переданных конфигурацией. Если этот список не пустой, объекты создаются только для серверов из этого списка.
    • domainsForView — список имен доменов, которые эта роль может просматривать.
    • domainsForEdit — список имен доменов, которые эта роль может редактировать.
    • domainsForAction — список имен доменов, которые эта роль может запускать/останавливать.
    • domainsForExport — список имен доменов, которые эта роль может экспортировать.
    • dashboardScreensForView — список имен экранов, которые эта роль может просматривать.
    • dashboardScreensForEdit — список имен экранов, которые эта роль может редактировать.
    • dashboardScreensForAction — список имен экранов, которые эта роль может запускать/останавливать.
    • mdlGroupsForView — список имен групп приемников, которые эта роль может просматривать.
    • mdlGroupsForEdit — список имен групп приемников, которые эта роль может редактировать.
    • mdlModulesForView — список имен модулей, в которых эта роль может просматривать артефакты.
    • mdlModulesForEdit — список имен модулей, в которых эта роль может редактировать артефакты.

    Список users

    Определяет пользователя уровня менеджера очередей. В простейшем случае создает пользователя без роли.

    Общая структура

    users:
        - username: <логин-пользователя>
          password: <пароль>               
          roles: [ 'имя-роли' ]                            # (опционально) По умолчанию пустой
          disabled: false | true                           # (опционально) По умолчанию false
          servers: [ '<manager-id>' ]                      # (опционально) По умолчанию null
          manager: extended                                # (опционально) По умолчанию extended
    

    Обязательные поля:

    • username — логин пользователя для входа.
    • password — пароль пользователя для входа.

    Опциональные поля:

    • roles — список ролей пользователя.
    • disabled — переключает режим создания (false) в режим удаления объекта (true).
    • servers — список ссылок на серверы, которые объявлены в списке servers. Можно использовать только существующие идентификаторы, переданные утилите списками servers. Этот список может быть пустым: в этом случае объект будет создаваться для всех серверов списков servers, переданных конфигурацией. Если этот список не пустой, объекты создаются только для серверов из этого списка.
    • manager — признак менеджера очередей. По умолчанию extended (расширенный менеджер очередей QME).

    Примечание:
    Поле manager используется для расширения. Текущая реализация поддерживает для поля manager только значение extended, поэтому нет смысла его менять.

    Список permissions

    Список прав доступа. Каждый элемент списка определяет правила доступа к очередям, чьи адреса вычисляются по маске, для ролей пользователей.

    Общая структура

    permissions:
        - mask: <маска-поиска-адресов-очередей>
          send: [ <список-ролей-могущих-делать-отправку-сообщений> ]                         # (опционально) По умолчанию пустой
          consume: [ <список-ролей-могущих-принимать-сообщения> ]                            # (опционально) По умолчанию пустой
          browse: [ <список-ролей-могущих-просматривать-сообщения> ]                         # (опционально) По умолчанию пустой
          manage: [ <список-ролей-могущих-администрировать> ]                                # (опционально) По умолчанию пустой
          createAddress: [ <список-ролей-могущих-назначить-очереди-адрес> ]                  # (опционально) По умолчанию пустой
          deleteAddress: [ <список-ролей-могущих-удалять-адреса> ]                           # (опционально) По умолчанию пустой
          createDurableQueue: [ <список-ролей-могущих-создавать-стойкие-очереди> ]           # (опционально) По умолчанию пустой
          deleteDurableQueue: [ <список-ролей-могущих-удалять-стойкие-очереди> ]             # (опционально) По умолчанию пустой
          createNonDurableQueue: [ <список-ролей-могущих-создавать-нестойкие-очереди> ]      # (опционально) По умолчанию пустой
          deleteNonDurableQueue: [ <список-ролей-могущих-удалять-нестойкие-очереди> ]        # (опционально) По умолчанию пустой
          disabled: false | true                                                             # (опционально) По умолчанию false
          servers: [ '<manager-id>' ]                                                        # (опционально) По умолчанию null
          manager: extended                                                                  # (опционально) По умолчанию extended
    

    Обязательные поля:

    • mask — маска, по которой фильтруются очереди через их адреса.

    Опциональные поля:

    • send — список ролей, которые для очереди, подпадающей под маску, могут отправлять сообщения.
    • consume — список ролей, которые для очереди, подпадающей под маску, могут принимать сообщения.
    • browse — список ролей, которые для очереди, подпадающей под маску, могут просматривать сообщения.
    • manage — список ролей, которые для очереди, подпадающей под маску, могут ее администрировать.
    • createAddress — список ролей, которые для очереди, подпадающей под маску, могут назначить ей адрес.
    • deleteAddress — список ролей, которые для очереди, подпадающей под маску, могут удалить ее адрес.
    • createDurableQueue — список ролей, которые могут создать стойкую очередь по этому адресу.
    • deleteDurableQueue — список ролей, которые могут удалить стойкую очередь по этому адресу.
    • createNonDurableQueue — список ролей, которые могут создать нестойкую очередь по этому адресу.
    • deleteNonDurableQueue — список ролей, которые могут удалить нестойкую очередь по этому адресу.
    • disabled — переключает режим создания (false) в режим удаления объекта (true).
    • servers — список ссылок на серверы, которые объявлены в списке servers. Можно использовать только существующие идентификаторы, переданные утилите списками servers. Этот список может быть пустым: в этом случае объект будет создаваться для всех серверов списков servers, переданных конфигурацией. Если этот список не пустой, объекты создаются только для серверов из этого списка.
    • manager — признак менеджера очередей. По умолчанию extended (расширенный менеджер очередей QME).

    Примечание:
    Поле manager используется для расширения. Текущая реализация поддерживает для поля manager только значение extended, поэтому нет смысла его менять.

    Правила составления маски

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

    Вот несколько правил, которыми нужно руководствоваться при составлении маски:

    1. Маску рекомендуется всегда закавычивать, так как расширяющий знак # совпадает с символом комментария в YAML. Внешние кавычки будут автоматически отбрасываться.
    2. В маске должны использоваться только символы, разрешенные для использования в именах очередей: латинские буквы в любом регистре, цифры, точка (.), нижнее подчеркивание (_), слеш (/) и знак процента (%). Если маска составлена только из них, то она интерпретируется буквально (совпадение с точностью до символа).

      Примечание:
      Хотя символы _, / и % разрешены, ими лучше не пользоваться при создании реальных очередей.

    3. Символ шарп (#) является расширяющим знаком и зарезервирован для создания сложной маски. Он означает любую последовательность символов с позиции простановки знака. Например, если бы на сервере существовали адреса queue.orders, queue.other.users и queue.other.messages, то шаблон queue.other.# выбирал бы queue.other.users и queue.other.messages адреса, а queue.# — все три адреса.

    Список queues

    Список очередей.

    Примечание:
    Текущая реализация позволяет создавать очереди только для расширенного менеджера очередей QME.

    Общая структура

    queues:
        - name: <символическое-имя-очереди>
          address: <адрес>
          type: MULTICAST | ANYCAST
          filter: ''                           # (опционально) По умолчанию пустой
          durable: false | true                # (опционально) По умолчанию false
          maxConsumers: <число>                # (опционально) По умолчанию -1
          purgeOnNoConsumers: false | true     # (опционально) По умолчанию false
          exclusive: false | true              # (опционально) По умолчанию false
          groupRebalance: false | true         # (опционально) По умолчанию false
          groupBuckets: <число>                # (опционально) По умолчанию -1
          groupFirstKey: ""                    # (опционально) По умолчанию пустой
          lastValue: false | true              # (опционально) По умолчанию false
          lastValueKey: ""                     # (опционально) По умолчанию пустой
          nonDestructive: false | true         # (опционально) По умолчанию false
          consumersBeforeDispatch: <число>     # (опционально) По умолчанию 0
          delayBeforeDispatch: <число>         # (опционально) По умолчанию 0
          ringSize: <число>                    # (опционально) По умолчанию -1
          enabled: false | true                # (опционально) По умолчанию false
          configurationManaged: false | true   # (опционально) По умолчанию false
          disabled: false                      # (опционально) По умолчанию false
          servers: [ '<manager-id>' ]          # (опционально) По умолчанию null
          manager: extended                    # (опционально) По умолчанию extended
    

    Обязательные поля:

    • name — символическое имя очереди.
    • address — адрес очереди.
    • type — тип маршрутизации очереди. Поддерживаются два типа: MULTICAST и ANYCAST.

    Опциональные поля:

    • filter — критерий получения сообщений данной очередью.
    • durable — признак стойкости очереди перед сбоями менеджера очередей.
    • maxConsumers — предельное количество потребителей сообщений данной очереди.
    • purgeOnNoConsumers — если установлен в true, то очередь будет очищена после отключения последнего потребителя.
    • exclusive — если установлен в true, то очередь маршрутизирует сообшения только одному потребителю.
    • groupRebalance — если установлен в true, очередь выполнит ребалансировку группы при добавлении нового потребителя.
    • groupBuckets — задает количество сегментов, которые следует использовать для групп сообщений вместо отслеживания каждого отдельного идентификатора группы. Установка значения -1 сохраняет поведение по умолчанию, что означает, что очередь отслеживает каждую группу, но страдает от неограниченного использования памяти. Установка 0 отключает группировку (0 сегментов) в очереди.
    • groupFirstKey — задает ключ, используемый для пометки сообщения, которое является первым в группе для потребителя.
    • lastValue — если установлен в true будет использоваться семантика Очередь последнего значения, то есть если два сообщения с одинаковым значением свойства Last-Value отправляются в очередь последнего значения, в ней будет храниться только последнее сообщение.
    • lastValueKey — для очереди последнего значения используется указанный в данном поле заголовок свойства.
    • nonDestructive — если установлен false, то сообщения удаляются из очереди после их прочтения.
    • consumersBeforeDispatch — задает количество потребителей, необходимое для начала маршрутизации сообщений.
    • delayBeforeDispatch — определяет время в миллисекундах, в течение которого брокер будет ждать, пока заданное количество потребителей подключится к соответствующей очереди, прежде чем он начнет отправлять сообщения. Значение -1 означает ждать вечно.
    • ringSize — определяет значение размера кольца.
    • enabled — включает или отключает очередь. Сообщения отправляются только во включенную очередь.
    • configurationManaged — если установлен в true, сохранит очередь в конфигурации.
    • disabled — переключает режим создания (false) в режим удаления объекта (true).
    • servers — список ссылок на серверы, которые объявлены в списке servers. Можно использовать только существующие идентификаторы, переданные утилите списками servers. Этот список может быть пустым: в этом случае объект будет создаваться для всех серверов списков servers, переданных конфигурацией. Если этот список не пустой, объекты создаются только для серверов из этого списка.
    • manager — признак менеджера очередей. По умолчанию extended (расширенный менеджер очередей QME).

    Режим опроса серверов

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

    Для запуска утилиты в этом режиме необходимо запускать ее с опцией --get-yaml, либо определить переменную окружения FOC__GET_YAML. Файл конфигурации может оставаться точно таким же, так как утилита читает его по-другому, а именно:

    • Утилита просматривает только списки servers.
    • По умолчанию утилита запрашивает у сервера все объекты расширенного менеджера очередей, но вы можете ограничить вывод, если определите опциональный список toYaml внутри каждого элемента списка servers:

      ...
      servers:
        - name: ...
        ...
        toYaml: [ '<object-type>' ]
      ...
      

      Внутри списка toYaml поддерживаются следующие значения:

      • users_extended — запрашивает пользователей расширенного менеджера очередей.
      • roles_extended — запрашивает роли, используемые в расширенном менеджере очередей.
      • roles — запрашивает все роли сервера.
      • permissions_extended —запрашивает права доступа расширенного менеджера очередей.
      • queues_extended — запрашивает очереди расширенного менеджера очередей.

      По умолчанию, утилита сбрасывает все полученные данные в файл foc-output-yyyy-MM-dd-HHmmss.yaml, где суффикс yyyy-MM-dd-HHmmss формируется из даты и времени генерации файла. Файл будет создаваться в текущей рабочей директории.

      Если вы хотите записывать файл в другой директории, вы можете указать ее через опцию --dir. Утилита ожидает, что данная директория существует и в нее разрешена запись. В случае, если директории не существует, утилита без предупреждения будет писать в текущую рабочую директорию.

    Советы

    • Если у вас уже есть FESB сервер с готовой конфигурацией, вы можете сформировать YAML на его основе, используя Режим опроса серверов. Однако, не следует подавать получаемый YAML утилите без его предварительного редактирования. Несмотря на то, что генерируемый файл будет совместим и соответствовать формату, текущая реализация всегда будет добавлять поле servers для каждого объекта, что сделано для понимания, с какого сервера выгружалась данная запись. Это поле переопределяет глобальный список servers, что делает получаемую конфигурацию не гибкой. Всегда рекомендуется удалять это поле в конечной версии конфигурации, так как это позволит вам менять идентификатор менеджера и управлять целевыми серверами из другого файла, подаваемого опцией -c. Кроме того, если вы не удалите поле, но поменяете сервер, на котором нет менеджера с именем, указанным в списке servers внутри элемента, утилита не сможет сформировать корректный запрос, так как этот идентификатор используется в некоторых объектах неявно.

      БУДЬТЕ ОСТОРОЖНЫ
      В этом режиме всегда выгружаются пустые списки. Рекомендуется предварительно зачищать их (если они не нужны) перед повторной отправкой на сервер, так как вы можете случайно затереть данные, когда утилита будет делать попытку отредактировать объект.

    • Используйте поле servers внутри элементов списков queues, roles, users и permissions только в крайнем случае (например, для тестирования конфигурации).
    • Текущая реализация утилиты всегда читает корневые элементы в YAML-структуре (queues, roles, users и permissions) в одинаковом порядке (независимо от того, как они на самом деле записаны), при этом элементы в списках в каждом из них всегда сохраняют свой хронологический порядок. По этой причине REST-запросы для объектов, записанные в одной YAML-структуре, всегда будут попадать в очередь заданий в таком порядке: очереди, роли, пользователи, права доступа. Если вас по какой-то причине не устраивает этот порядок, единственный способ изменить его, это разнести списки по разным YAML структурам. Например, ниже приведен пример Multi-YAML, в которой права доступа попадут в очередь заданий раньше очередей:

      ---
      permissions:
        ...
      ---
      queues:
        ...
      

    Известные проблемы и ограничения

    • Известно, что в версии FESB 7.8.328.24 следующий запрос на создание роли ломает логику работы Web UI:

      roles:
      - name: sample
      

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

      Ошибка не является критичной: чтобы восстановить интерфейс, достаточно просто удалить эту роль из конфигурации. Если вы создали такую роль по ошибке, то для её удаления можно отправить такой запрос:

      roles:
      - name: sample
        disabled: true
      
    • Известно, что в версии FESB 7.8.328.24 есть критическая ошибка в REST API, связанная с созданием локальных пользователей расширенного менеджера очередей, которая может сделать конфигурацию менеджера невалидной. Если попытаться создать пользователя REST-запросом, не передав пароль от учетной записи, сервер FESB обработает такой запрос, но конфигурация менеджера очередей будет критически нарушена, из-за чего он будет удален с сервера. Тем не менее, FOC проверяет пустоту поля с паролем и не позволит создать учетную запись без пароля.
    • При выгрузке учётных записей, FESB не возвращает пароль пользователя в ответе. Также поле пароля не участвует при изменении данных пользователя, если он существует. Другими словами, через FOC невозможно поменять пароль существующего пользователя.
    • Для списка servers поле name является единственным ключевым. По этой причине нельзя объявить два сервера с одинаковым идентификатором name, но разными адресами: всегда будет использоваться только последний. Это ограничение будет исправлено в одном из будущих релизов.
    • С версии 1.1.0 в строковых полях запрещено использовать не ASCII-символы, в том числе символы управляющих последовательностей. Определения объектов с подобными нарушениями будут отбрасываться из потока.
    Конвейеры
    0 успешных
    0 с ошибкой