BILLmanager. Теперь при помощи shell-скриптов можно продавать что угодно
На сегодняшний день большинство провайдеров, помимо стандартных услуг хостинга, доменов и SSL, предоставляют и различные «нехостинговые» сервисы. Например, VPN или стриминг. Возникает вопрос: как организовать их подключение для клиента в BILLmanager? Можно давать доступ вручную, но что делать, если заявок на подключение прорва? Автоматизировать процесс, конечно! Недавно в BILLmanager появилось ещё одно решение для автоматизации продаж, и мы хотим об этом рассказать.
В статье речь пойдёт о том, как при помощи shell-скриптов своими силами настроить продажу нестандартных услуг в нашей биллинговой платформе.
Возможно, у опытных пользователей возникнет вопрос: «Но для BILLmanager же есть дополнительные модули, зачем shell-скрипты?» Дело в том, что скрипты проще написать: программист не нужен; знающего BASH системного администратора вполне достаточно.
Итак, подумаем: для каких услуг потребуется написание скриптов. Навскидку приходит несколько вариантов: для продажи ключей активации к тому или иному ПО, для предоставления места на ftp-сервере под хранение резервных копий, для реализации стриминга, торговли черничными маффинами и смузи. Разумеется, список можно продолжить, он ограничен только фантазией.
Рассмотрим пример продажи доступа к ftp-серверу с каким-то ценным содержимым. Пусть это будут регулярно обновляемые векторные карты местности.
Выясним, каковы технические требования. Согласно документации необходимо 4 скрипта: для заказа, приостановки, возобновления и прекращения доступа.
В первый скрипт (open.sh) передаются автоматически сгенерированные имя пользователя и пароль, а также могут передаваться какие-то дополнительные параметры, необходимые для работы скрипта. На выходе должна быть строка начинающаяся с «OK» и содержащая параметр »--id»: уникальный идентификатор созданной услуги. Допускается также возвращать дополнительные параметры; например, ссылку на ftp-сервер, чтобы показать её заказавшему сервис пользователю.
В остальные скрипты (suspend.sh, resume.sh, close.sh) передаётся уникальный идентификатор созданной услуги (--id), а на выходе должна быть строка «OK».
Итак, приступим. Пусть в нашем случае файловым сервером будет ProFTPD.
Для того чтобы дать клиенту доступ к картам, нужно создать пользователя и назначить ему пароль. Для этого воспользуемся теми параметрами, которые BILLmanager генерирует автоматически: так мы получаем ещё и ID услуги, поскольку юзернейм создаётся уникальным. Достаём значения из строки параметров, затем вызываем useradd, а потом назначаем пароль с помощью passwd. Осталось вернуть «OK», идентификатор, а также данные для авторизации на сервере, чтобы потом передать эту информацию клиенту.
#!/bin/bash
for i
do
if [ ${i:0:6} = "--user" ]
then
username=${i:7}
elif [ ${i:0:10} = "--password" ]
then
password=${i:11}
fi
done
useradd $username -d /home/ftp_folder -m -s /bin/false
echo $password | passwd --stdin $username > /dev/null
echo "OK --id=$username --username=$username --password=$password"
Услугу подключили. Сделаем механизм приостановки доступа на случай, если закончится баланс на счёте клиента. По полученному ID вызываем usermod и меняем домашний каталог на /dev/null.
#!/bin/bash
for i
do
string=${i}
if [ ${string:0:4} = "--id" ]
then
username=${string:5}
fi
done
usermod -d /dev/null $username
echo "OK"
Если оплата поступила, надо вернуть возможность получения карт. Снова «зовём» usermod и возвращаем всё как было.
#!/bin/bash
for i
do
string=${i}
if [ ${string:0:4} = "--id" ]
then
username=${string:5}
fi
done
usermod -d /home/ftp_folder $username
echo "OK"
И, наконец, если предоставление услуги по каким-либо причинам более не планируется, то нужно удалить пользователя. Используя всё тот же идентификатор, запускаем userdel.
#!/bin/bash
for i
do
string=${i}
if [ ${string:0:4} = "--id" ]
then
username=${string:5}
fi
done
userdel $username
echo "OK"
Всё, написание кода завершено. Реализованные скрипты копируем в отдельную директорию на машину, откуда будут раздаваться карты, и применяем на них «chmod +x». Кроме этого следует проверить, что ftp-сервер «смотрит» в /etc/passwd. За это отвечает строка AuthOrder в файле etc/proftpd.conf. Чтобы всё работало, в ней должно быть mod_auth_unix.c.
Теперь выполним настройки в BILLmanager. Нужно создать новый тип продукта, а затем тарифный план данного типа. После этого в качестве модуля обработки выбрать Shellscripts и дождаться завершения его установки. Если возникнет запрос на создание дата-центра — создаём его. На следующем этапе указываем IP-адрес ftp-сервера, заполняем данные аутентификации и путь к папке со скриптами. После нажатия на «Далее» вписываем произвольное название обработчика. Затем повторно выбираем тип продукта, указываем наименования, обработчик и цены. Осталось обозначить дополнительные параметры, которые передаются из скрипта open.sh. В типах продуктов выбираем только что созданный тип, щёлкаем «Параметры», «Создать». Создаём 2 параметра в соответствии со скриптом open.sh, отмечаем в них флажок «Показывать при открытии», а также в выпадающем списке «Доступ для изменения» выбираем «Сотрудник».
Настройки выполнены, и теперь услугу можно подключать клиентам.
Итак, тема shell-скриптов раскрыта. С радостью ответим на ваши вопросы, а также будем благодарны за обратную связь по статье. Успехов в разработке услуг!
P.S. Если у вас не установлен BILLmanager, и хочется его установить — инструкцию по развёртыванию можно найти здесь.