Показано с 1 по 2 из 2

Тема: Процесс установки APS-пакетов. Вызовы API. Ошибки в реализации ISPmanager 5?

  1. #1
    Member Аватар для BombermaG
    Регистрация
    09.12.2011
    Сообщений
    44

    По умолчанию Процесс установки APS-пакетов. Вызовы API. Ошибки в реализации ISPmanager 5?

    Дано:
    ISPmanager Business (последняя стабильная версия на момент написания поста)
    Версия COREmanager: 5.122.0-2017.09.11_11:08
    Версия панели: 5.122.1-2017.09.20_12:56

    Плагин:
    ispmgr_mod_testplugin.xml
    Код:
    <?xml version="1.0" encoding="UTF-8"?>
    <mgrdata>
        <handler name="testplugin.pl" type="cgi">
            <event name="aps.install.execute" after="yes"/>
        </handler>
    </mgrdata>
    testplugin.pl
    Код:
    #!/usr/bin/perl
    
    print "<doc><ok/></doc>\n";
    Цель:
    Выполнить некоторые действия в самый заключительный этап установки APS-пакета.

    Рассмотрим процесс установки APS-пакетов относительно того, какие вызовы получает плагин.
    Шаг 1. Выбор домена, пути для установки.
    core_module EXTINFO env: ACTION_NAME=aps.install.execute
    core_module EXTINFO env: PARAM_func=aps.install.start
    Шаг 2. Подтверждение лицензионного соглашения.
    core_module EXTINFO env: ACTION_NAME=aps.install.execute
    core_module EXTINFO env: PARAM_func=aps.install.license
    Шаг 3. Ввод всех необходимых данных для APS-пакета (данные для MySQL, логин и пароль для учетной записи администратора и прочие настройки).
    core_module EXTINFO env: ACTION_NAME=aps.install.execute
    core_module EXTINFO env: PARAM_func=aps.install.settings

    core_module EXTINFO env: ACTION_NAME=aps.install.execute
    core_module EXTINFO env: PARAM_func=aps.install.settings
    Шаг 4. Нажатие одной кнопки "Завершить" для подтверждения всего выбранного.
    core_module EXTINFO env: ACTION_NAME=aps.install.execute
    core_module EXTINFO env: PARAM_func=aps.install.execute

    core_module EXTINFO env: ACTION_NAME=aps.install.execute
    core_module EXTINFO env: PARAM_func=aps.install.execute

    core_module EXTINFO env: ACTION_NAME=aps.install.execute
    core_module EXTINFO env: PARAM_func=aps.install.execute

    core_module EXTINFO env: ACTION_NAME=aps.install.execute
    core_module EXTINFO env: PARAM_func=aps.install.execute
    Итого имеем 8 вызовов на установку одного пакета.

    Есть несколько вопросов к разработчикам этого функционала в ISPmanager 5.
    1. Посмотрим ispmgr.log после установки одного пакета. Полный текст лицензии, подтверждаемого на шаге 2, в логах встречается 7 раз. Лицензия в процессе этапов установки подтверждается только 1 раз. Может не стоит передавать по всем вызовам полный текст лицензии (учитывая, что там объемный текст какой-нибудь GPL лицензии)?
    2. На шаге 4 после нажатия кнопки "Завершить" происходит четыре вызова функции aps.install.execute и, соответственно, четыре вызова плагина.
    В целом они между собой похожи и отличаются какими-нибудь мелочами.
    Второй вызов от первого отличается наличием параметра PARAM_step=aps.install.execute.
    Третий от второго отличается наличием информации о MySQL сервере и тем, что данные от базы переданы в конечном формате (т.е. с префиксом пользователя в названии и т.д.), а также наличием параметра PARAM_sok=ok.
    Четвертый похож на второй с разницей в отсутствии PARAM_out=devel, PARAM_step=aps.install.execute и наличии PARAM_sok=ok.
    2.1. Четыре вызова на этапе завершения выглядит со стороны как очень странное архитектурное решение.
    2.2. Мне кажется или в панели управления должен быть какой-то более однозначный вызов, определяющий завершение процесса установки пакета? Мне для конкретного процесса установки нужно выполнить функцию единожды. Ладно, если на третьем вызове можно по наличию информацию о MySQL сервере выделить этот вызов относительно остальных и выполнять свою функцию именно в этот момент (особенно, если требуется куда-то к себе записать данные для подключения к базе), а если в APS-пакете нет необходимости в использовании MySQL? И, кстати, в таком случае вызовов все также будет 4 или меньше?
    Проверками на наличие тех или иных параметров вычленять тот единственный вызов, по которому вызывать свою функцию? Добавлять через плагин на первых этапах установки какой-то уникальный идентификатор и проверять на то, что вызов с таким идентификатором уже был? Может быть есть более очевидный путь, который я не увидел?

    В ISPmanager 4 подобных проблем не было, она была в этом месте понятнее и прозрачнее, хоть и тоже со своими особенностями.

    Хотелось бы услышать комментарии разработчиков ISP по данной теме.
    Последний раз редактировалось BombermaG; 17.10.2017 в 23:50.

  2. #2
    Banned
    Регистрация
    20.07.2016
    Сообщений
    17

    По умолчанию

    Добрый день.
    Количество упоминаний лицензионного соглашения складывается из следующих особенностей:
    Мастер установки APS представляет из себя отдельные друг от друга шаги. Из каждого предыдущего шага в следующий необходимо передавать параметры.
    Перед сохранением каких-либо данных сначала происходит их вызов для исключения их подмены. Отсюда имеем двойной вызов. В мастере это происходит на последнем шаге - все параметры каждого шага вызываются по порядку.

    Для обычных событий нужно проверять PARAM_sok=ok, по нему отличается вызов от сохранения. В мастерах также нужно проверить отсутствие PARAM_step
    Пример bash:
    if [ "$PARAM_sok" = "ok" ] && [ -z "$PARAM_step" ]; then
    Имя aps.install.execute выбрано правильно

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •