Пример использования API ispmanager в плагине: вывод списка БД
Ниже приводится пример плагина, который выводит в статичном текстовом поле список баз данных, к которым имеет доступ данный пользователь ispmanager.
Данный пример предполагает, что вы вошли в ispmanager как суперадминистратор (root) и используете ispmanager lite/pro/host.
- Создайте файл XML-описания плагина.
- Перейдите в папку /usr/local/mgr5/etc/xml и создайте там файл ispmgr_mod_dblist.xml.
- Откройте этот файл и скопируйте в него код, приведенный ниже:
<?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 можно найти здесь.