Руководство для разработчиков

/
/
/
Пример использования API ispmanager в плагине: вывод списка БД

Пример использования API ispmanager в плагине: вывод списка БД

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

Данный пример предполагает, что вы вошли в ispmanager как суперадминистратор (root) и используете ispmanager lite/pro/host.

  1. Создайте файл XML-описания плагина.
  2. Перейдите в папку /usr/local/mgr5/etc/xml и создайте там файл ispmgr_mod_dblist.xml.   
  3. Откройте этот файл и скопируйте в него код, приведенный ниже:
<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
    <mainmenu level="30">
        <modernmenu>
            <node type="noname" name="dblist_group">
                <node name="dblist" />
            </node>
        </modernmenu>
    </mainmenu>
    <handler name="dblist.sh" type="xml">
        <func name="dblist"/>
    </handler>
    <lang name="ru">
        <messages name="desktop">
            <msg name="modernmenu_dblist">Список БД</msg>
        </messages>
    </lang>
</mgrdata>

4. Создайте обработчик: перейдите в папку /usr/local/mgr5/addon и создайте там файл dblist.sh. Файл обработчика должен быть исполняемым для пользователя и группы root, поэтому дайте этому файлу права 750 (chmod 750 /usr/local/mgr5/addon/dblist.sh). Откройте файл на редактирование и скопируйте в него код:

#!/bin/bash
dblines=$(/usr/local/mgr5/sbin/mgrctl -m ispmgr db su=${AUTH_USER})
dbshtml=$(sed -rn "s/.*pair\=[a-zA-Z_]+->([^ ]+).*name\=([a-zA-Z_]+).*\
/<b>\2<\/b> (\1)<br>/p" <<<  "$dblines")
cat << EOM
<?xml version="1.0" encoding="UTF-8"?>
<doc lang="ru" func="database_list">
    <metadata type="form">
        <form>
            <field name="dblist_field">
                <textdata name="dblist" type="msg" />
            </field>
        </form>
    </metadata>
    <messages>
        <msg name="title">Cписок баз данных</msg>
        <msg name="dblist"><![CDATA[${dbshtml}]]></msg>
    </messages>
</doc>
EOM

Пояснение к коду выше: 

  • Сначала в переменную dblines записывается результат выполнения mgrctl (подробнее см. справочный материал о mgrctl) для функции db (встроенная функция ispmanager, возвращающая список баз данных), причем функция выполняется для пользователя, открывшего страницу  - параметр su=${AUTH_USER} утилиты mgrctl). 
  • Затем обрабатываются строки, оказавшиеся в переменной dblines, с помощью sed, чтобы отформатировать в HTML имя БД (жирным шрифтом) и тип сервера (например, mysql) в скобках с добавлением <br> в конце каждой строки.
  • Затем выводятся XML формы с единственным полем - статичным текстом, значение которого - HTML, полученный на предыдущем шаге. Обратите внимание, что для избежания конфликта между XML- и HTML-тэгами, HTML помещен внутри раздела CDATA.

Подробнее о структуре XML, возвращаемого обработчиками, можно прочесть в статье Структура и возможности плагинов. Пример на ту же тему на PHP, Python и Node.js можно найти здесь.