Создание дистрибутива#

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

Ручной способ#

Необходимо в соответствующем inventory заполнить файл group_vars/all/vars.yml:

artemis_queues:
  defaults: # значения по умолчанию для конфигурации очереди
    max_size_bytes: -1 # Максимальный размер памяти, выделенной для адреса, до начала применения механизма paging. Значение -1 соответствует отсутствию ограничений
    max_size_messages: -1 # Максимальное количество сообщений, записываемых в адрес, до начала применения механизма paging. Значение -1 соответствует отсутствию ограничений
    max_delivery_attempts: 10 # Количество попыток отправки сообщения, перед тем как оно будет направлено в DLQ (-1 соответствует бесконечному числу попыток)
    address_full_policy: FAIL # Политика поведения при заполнения адреса. Возможные значения: PAGE / DROP / FAIL / BLOCK. Для персистентного кластера значение по умолчанию - PAGE. Для неперсистентного кластера значение по умолчанию отсутствует.
    # Если значение соответствует PAGE, то при заполнении адреса дальнейшие сообщения будут записаны на диск, включится механизм paging.
    # Если значение соответствует DROP,  при заполнении адреса следующие сообщения не будут записаны без фиксирования ошибки/логов/исключений.
    # Если значение соответствует FAIL, следующие сообщения не будут записаны в адрес и клиенту producer будет выдано исключение.
    # Если значение соответствует BLOCK, то клиенты producers будут заблокированы, затем будут пытаться дальше посылать сообщения.
    min_expiry_delay: "-1"
    max_expiry_delay: "-1"
    # Сообщения без указания экспирации будут по умолчанию установлены на значение, указанное в параметре max-expiry-delay. Если max-expiry-delay не определен, тогда экспирация будет установлена в значение, указанное в параметре min-expiry-delay. Если значение min-expiry-delay не определено, тогда сообщение не будет изменено.
    # Сообщения, у которых экспирация задана выше значения max-expiry-delay, значения экспирации будут установлены как указано в max-expiry-delay
  list:
    - name: <имя очереди> 
      address: <имя адреса>
      routing: <способ передачи сообщений от адреса к очередям> # необязательный параметр. Доступные значения: anycast (добавление в одну произвольную очередь данного адреса), multicast (добавление во все очереди данного адреса)
    - name: <имя очереди2>
      address: <имя адреса2>
      max_size_bytes: <максимальный размер сообщений в адресе>
    - name: queue_with_page_addr_settings
      address: address_with_page_settings
      page_limit_bytes: 100 # После перехода в режим paging, количество данных, которые система позволит принять. Количество байт будет сконвертировано внутренним механизмом в количество страниц(pages). Не имеет значения по умолчанию.
      page_limit_messages: 200 # После перехода в режим paging, количество сообщений, которые система разрешит принять. Не имеет значения по умолчанию.
      page_full_policy: DROP # Доступные значения DROP or FAIL. Данный параметр задает механизм поведения системы после достижения максимума по page-limit-bytes или page-limit-messages после переключения в режим paging. Не имеет значения по умолчанию.
artemis_roles:
  - user: <DN пользователя>
    queue: <имя очереди>
    address: <имя адреса>
    type: <тип операции, доступно одно или несколько значений send/consume/browse. Несколько значений указываются через запятую без пробелов>
    inventory: DEV # параметр опционален, без его указания роль задается для всех стендов

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

artemis_roles:
  IFT:
    - user: CN=111***1111, OU=00CA, O=Organization, L=Moscow, ST=Moscow, C=RU
      queue: test2
      address: test2
      type: send,consume,browse # send/consume/browse, можно несколько через запятую
    - user: CN=222****222, OU=00CA, O=Organization, L=Moscow, ST=Moscow, C=RU
      queue: test2
      address: test2
      type: send # send/consume/browse, можно несколько через запятую
      erase: true # маркер для удаления
  DEV:
    - user: CN=333****222, OU=00CA, O=Organization, L=Moscow, ST=Moscow, C=RU
      queue: test2
      address: test2
      type: send # send/consume/browse, можно несколько через запятую
    - user: CN=444****222, OU=00CA, O=Organization, L=Moscow, ST=Moscow, C=RU
      queue: test2
      address: test2
      type: send # send/consume/browse, можно несколько через запятую
      erase: true # маркер для удаления

Здесь IFT, DEV — имя inventory, в который будут установлены соответствующие роли. Если имя inventory отличается от имени группы в artemis_roles, то можно использовать параметр inventory_for_roles.

Например, для установки ролей, находящихся в группе DEV, в inventory с именем DEV-TEST необходимо в файле vars.yml для inventory DEV-TEST указать:

inventory_for_roles: DEV

Заполнение блока artemis_roles допускается в одном из вышеуказанных вариантов (не допускается одновременное задание обоими способами).

Весь список настраиваемых параметров можно посмотреть в roles/artemis_queues/defaults/main.yml и roles/artemis_roles/defaults/main.yml.

После заполнения файла vars.yml необходимо запустить создание очередей и ролей для них командой

ansible-playbook -i inventories/<ID>/inventory artemis_queues_roles.yml --ask-vault-pass

, где inventories/<ID>/inventory — путь до файла inventory.

С помощью Jenkins#

Наименование задания Jenkins: artemis_config_create.

Параметры запуска:

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

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

  • nexusCred — ID credential типа username with password для публикации дистрибутива в Nexus. При задании параметра secman_url - полный путь в HashiCorp Vault до user и пароля, например {ID credential типа vault app role для получение секретов из HashiCorp Vault или Secret Management}|/<путь до Nexus>/nexus:{user},{пароль};

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

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

  • suffix — суффикс для дистрибутива в формате <ServiceName>_<C|P>_<System>, где:

    • ServiceName — наименование сервиса;

    • C|P — является ли дистрибутив дистрибутивом потребителя сервиса (С) или поставщика сервиса (P);

    • System — система-владелец дистрибутива;

  • rebuildVersion — версия дистрибутива для пересборки. При пустом значении выпускается новый релиз;

  • jenkinsSlaveNode — Jenkins Slave для установки;

  • emailTo — список адресов электронной почты для отправки технических писем о начале/окончании установки с логами;

  • artemisConfig — описание конфигурационного дистрибутива для создания адресов, очередей и прав для пользователей в YAML формате; при незаданном параметре artemisConfig выкачивается конфигурационный файл из репозитория, см. ниже параметр gitPath. В данном поле осуществляется проверка правильности заполнения параметра type; для него доступны значения: send, consume, browse, либо несколько из них. Пример заполнения:

    artemis_queues:
    list:
      - name: <имя очереди> 
        address: <имя адреса>
        routing: <способ передачи сообщений от адреса к очередям> # Необязательный параметр. Доступные значения: anycast (добавление в одну произвольную очередь данного адреса), multicast (добавление во все очереди данного адреса)
      - name: <имя очереди2>
        address: <имя адреса2>
        max_size_bytes: <максимальный размер сообщений в адресе>
      - name: queue_with_page_addr_settings
        address: address_with_page_settings
        page_limit_bytes: 100 # После перехода в режим paging, количество данных, которые система позволит принять. Количество байт будет сконвертировано внутренним механизмом в количество страниц(pages). Не имеет значения по умолчанию.
        page_limit_messages: 200 # После перехода в режим paging, количество сообщений, которые система разрешит принять. Не имеет значения по умолчанию.
        page_full_policy: DROP # Доступные значения DROP or FAIL. Данный параметр задает механизм поведения системы после достижения максимума по page-limit-bytes или page-limit-messages после переключения в режим paging. Не имеет значения по умолчанию.
    artemis_roles:
    - user: <DN пользователя>
      queue: <имя очереди>
      address: <имя адреса>
      type: <тип операции, доступно одно или несколько значений send/consume/browse. Несколько значений указываются через запятую без пробелов>
      inventory: DEV # параметр опционален, без его указания роль задается для всех стендов
    

Структура заполнения блока artemis_roles может быть другой, аналогично способу, описанному выше в разделе Ручной способ.

  • gitPath — путь до файла в репозитории (при пустом параметре artemisConfig выкачивается конфигурационный файл из репозитория). Например, my_folder/folder/file.conf;

  • gitUrl — ссылка на репозиторий хранения конфигурационного файла;

  • gitCred — credentials для репозитория хранения конфигурационного файла;

  • gitBranch — ветка репозитория хранения конфигурационного файла;

  • gitInfo — строка для поиска по истории коммитов в репозитории хранения конфигурационного файла, например для формирования файла Release notes. Опциональный параметр, необязателен для заполнения. В результате выполнения Jenkins job в консоль вывода логов Jenkins будут выведены все коммиты с вхождением строки, указанной в данном параметре;

  • extentionPointUrl — ссылка на zip-архив с точкой расширения (config_create_extension_point.groovy). Опциональный параметр. Заполняется в случае, если после завершения Jenkins job необходимо выполнить какие-либо дополнительные сценарии. Выполняется только после успешного завершения работы Jenkins job.