forum.bitel.ru
http://forum.bitel.ru/

Как использовать $loopServ в TelnetServiceActivator?
http://forum.bitel.ru/viewtopic.php?f=44&t=12273
Страница 1 из 1

Автор:  Dmitry7634524 [ 28 фев 2017, 14:07 ]
Заголовок сообщения:  Как использовать $loopServ в TelnetServiceActivator?

Есть задача, в сервисах добавить дополнительный IP адрес для клиента в модуле Inet, хотим это сделать через добавление дочернего сервиса. Например:
Вложение:
Выделение_519.png
Выделение_519.png [ 9.45 КБ | Просмотров: 7532 ]

Проблема возникает при добавлении дочернего сервиса, отрабатывает полный список команд из конфигурации устройста, то есть пересоздается родительский сервис, как этого избежать? В telegram'е товарищ Amir подсказал сделать так:
Код:
servCreateLoop=ip route $ip 255.255.255.255 GigabitEthernet 0/$param(cl_interface,0).$providerConractTitle;
sa.commandSet.cmd1.serv.create.1=interface GigabitEthernet 0/$param(cl_interface,0).$providerConractTitle;
$loopServ(servCreateLoop,false,true);
$loopServ(имя_параметра_шаблона_команды,использовать_в_цикле_родительский_сервис,выполять_как_отдельную_команду_или_построить_строку)


Получаем лог:
Вложение:
Выделение_520.png
Выделение_520.png [ 59.43 КБ | Просмотров: 7532 ]

То есть loopServ пустой, что не так?
Вот полный список команд в настройках устройства:
Код:
# Команды, выполняемые при подключении к терминалу( например configure treminal для cisco)
sa.command.connect=configure terminal
# Команды, выполняемые перед отключением от терминала.
# sa.command.disconnect=exit
# Команды создания сервиса на устройстве.
# Создание IP, 1 - тип услуги "Интернет"
sa.commandSet.cmd1.servTypeIds=1
# Создание дополнительного IP в том же VLAN'е, 3 - тип услуги доп. IP
sa.commandSet.cmd3.servTypeIds=3

sa.commandSet.cmd1.serv.create.1=interface GigabitEthernet 0/$param(cl_interface,0).$provConractTitle
sa.commandSet.cmd1.serv.create.2=description Contract $translit($contractTitle)
sa.commandSet.cmd1.serv.create.3=encapsulation dot1Q $vlan
sa.commandSet.cmd1.serv.create.4=ip unnumbered $param(loopback,Loopback0)
sa.commandSet.cmd1.serv.create.5=no cdp enable
sa.commandSet.cmd1.serv.create.6=traffic-shape rate $param($option,ceil_in,5000000)
sa.commandSet.cmd1.serv.create.7=exit
# sa.commandSet.cmd1.serv.create.8=ip route $ip 255.255.255.255 GigabitEthernet 0/$param(cl_interface,0).$provConractTitle

######
servCreateLoop=ip route $ip 255.255.255.255 GigabitEthernet 0/$param(cl_interface,0).$provConractTitle;
sa.commandSet.cmd1.serv.create.8=interface GigabitEthernet 0/$param(cl_interface,0).$provConractTitle;$loopServ(servCreateLoop,false,true);
######

# Дополнительный IP адрес
sa.commandSet.cmd3.serv.create=ip route $ip 255.255.255.255 GigabitEthernet 0/$param(cl_interface,0).$provConractTitle

#Команды удаления сервиса с устройства.
sa.commandSet.cmd1.serv.cancel=no interface GigabitEthernet 0/$param(cl_interface,0).$provConractTitle
sa.commandSet.cmd3.serv.cancel=no ip route $ip 255.255.255.255 GigabitEthernet 0/$param(cl_interface,0).$provConractTitle

#Команды включения сервиса на устройстве
sa.commandSet.cmd1.serv.cancel1=interface GigabitEthernet 0/$param(cl_interface,0).$provConractTitle
sa.commandSet.cmd1.serv.cancel2=no shutdown
#Команды выключения сервиса на устройстве

sa.commandSet.cmd1.serv.disable1=interface GigabitEthernet 0/$param(cl_interface,0).$provConractTitle
sa.commandSet.cmd1.serv.disable2=shutdown
# sa.commandSet.cmd3.serv.disable=HELLLOOOOOOOOOOOOOOOOOO

# Команды включения опций сервиса на устройстве, которые задаются на опции-предке (действуют для всех опции, которые находятся снизу в иерархии опции).
sa.command.common.ancestor.inetOption.1.enable.1=interface GigabitEthernet 0/$param(cl_interface,0).$provConractTitle
sa.command.common.ancestor.inetOption.1.enable.2=no traffic-shape rate
sa.command.common.ancestor.inetOption.1.enable.3=traffic-shape rate $param($option,ceil_in,5000000)

## Команды выключения опций сервиса на устройстве, которые задаются на опции-предке (действуют для всех опции, которые находятся снизу в иерархии опции).
sa.command.common.ancestor.inetOption.1.disable=


На тестовом стенде версия биллинга:
BGBillingServer v 7.0.1129
Java:
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)

Автор:  Amir [ 16 мар 2017, 21:51 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

Похоже в дин. коде был/скомпилирован старый AbstractTerminalServiceActivator, в котором не было макроса $servLoop.

Автор:  borisk [ 30 мар 2017, 14:18 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

Добрый день!

Вижу, что опять сделали что-то полезное. А можно все же написать как этим правильно пользоваться? Что означает, например, флаг "использовать_в_цикле_родительский_сервис"? И wiki бы обновить.

С уважением,
Борис

Автор:  borisk [ 30 мар 2017, 15:21 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

Похоже нашел баг в loopServ :) Не учитывает даты дочернего сервиса.

Код:
#
sa.commandSet.staticIP.servTypeIds=3
#
m_ipLoop=$net
sa.commandSet.staticIP.serv.create.1=/queue/simple/remove\n=numbers=$contractId:$servId
sa.commandSet.staticIP.serv.create.2=/queue/simple/add\n=name=$contractId:$servId\n=target=127.0.0.1/32,$loopServ(m_ipLoop, false, false)
#
sa.commandSet.staticIP.serv.cancel.1=/queue/simple/remove\n=numbers=$contractId:$servId


Если я добавляю и удаляю ip, организованные как дочерний сервис (servTypeIds=3 это родительский сервис), то все вроде как хорошо. Но вот если я на одном из дочерних сервисов поставлю закрывающую дату < текущей, то эти IP все равно попадают в выводе loopServ. Но это же не правильно?

Автор:  borisk [ 31 мар 2017, 12:58 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

вот такой вот код:
Код:
m_ipLoop=/ip/firewall/address-list/add\n=list=ACL_TEST\n=address=$net
sa.commandSet.staticIP.serv.create.1=/queue/simple/remove\n=numbers=$contractId:$servId
sa.commandSet.staticIP.serv.create.2=$loopServ(m_ipLoop, false, true)


Я думал что каждая комманда m_ipLoop будет независимо посылаться на терминал. А по факту не посылаются (проверял tcpdump), посылается только комманда serv.create.1.

Цитата:
Информация о версии:

Клиент: вер. 6.2.854 / 22.02.2017 19:04:14
os: Windows XP; java: Java HotSpot(TM) Client VM, v.1.8.0_121
Сервер: вер. 6.2.1166 / 16.03.2017 23:47:37
os: FreeBSD; java: OpenJDK 64-Bit Server VM, v.1.8.0_112
ВНИМАНИЕ: Виртуальная машина OpenJDK 64-Bit Server VM не рекомендуется

bill: вер. 6.2.100 / 22.02.2017 19:06:28
card: вер. 6.2.43 / 16.03.2017 23:47:47
dialup: вер. 6.2.315 / 01.03.2016 00:17:59
email: вер. 6.2.177 / 14.12.2016 14:27:42
inet: вер. 6.2.713 / 10.03.2017 18:23:44
ipn: вер. 6.2.264 / 09.01.2017 16:41:56
mps: вер. 6.2.222 / 16.03.2017 23:47:51
npay: вер. 6.2.198 / 03.02.2017 21:00:04
phone: вер. 6.2.288 / 10.03.2017 18:14:36
reports: вер. 6.2.216 / 15.03.2017 19:48:19
ru.bitel.bgbilling.plugins.documents: вер. 6.2.176 / 14.12.2016 14:33:16
ru.bitel.bgbilling.plugins.organizer: вер. 6.2.72 / 04.10.2016 19:16:19
voiceip: вер. 6.2.191 / 14.12.2016 14:29:33
wellpay: вер. ?

Автор:  borisk [ 04 апр 2017, 12:37 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

please :)

Автор:  borisk [ 07 апр 2017, 13:05 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

О, Amir, великий и всемогущий, услышь мою молитву!
О, Amir, великий и всемогущий, услышь мою молитву!
О, Amir, великий и всемогущий, услышь мою молитву!

Автор:  Amir [ 11 апр 2017, 17:02 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

Не совсем понятно - до этого же вроде работало?
Когда работает, а когда нет?

Автор:  borisk [ 13 апр 2017, 11:08 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

А у кого работало? Видимо не у меня. Я вот только начал эксперименты в эту сторону.
Я понял так, что в случае, если последний флаг true, то команды макроса будут независимо посылаться на устройство для каждого субсервиса? У меня почему-то не посылаются.

Сегодня наконец-то докопался. AbstractTerminalServiceActivator вызывает executeCommand0, которая в свою очередь вызывает protected executeCommand. Но почему-то в MikrotikServiceActivator эта функция пустая, с комментарием
Цитата:
//ничего не делаем все делают в executeCommandMikrotik
. После того, как я в эту функцию добавил вызов executeCommandMikrotik( command ) - все заработало как надо. Но вопрос - зачем-то же эта функция оставлена пустой? Что-то же автор MikrotikServiceActivator думал? Ничего мои действия не поломают? И если не поломают, то может имеет смысл добавить это в основной код?

Автор:  borisk [ 16 апр 2017, 09:10 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

Огромнейшая просьба обновить Wiki Описание_общих_параметров_для_терминальных(ssh/telnet/manad/mikrotik_api)_обработчиков_активации_сервисов с учетом последних изменений в макросах. Потому что "нипанятно" (c) :) Копаясь в коде обнаружил еще макрос $switch, но чего он делает?

Автор:  Phricker [ 16 апр 2017, 11:26 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

Цитата:
Amir, [27.02.17 17:01]
[In reply to Alexander Yakunin]
Я вообще другой TerminalServiceActivator для 7.0 сделал, только не успел его описать еще :(

Amir, [27.02.17 17:03]
Там макросы через groovy вызываются, более гибко, но по другому писать надо будет: ${ip()}

Ожидаем

Автор:  borisk [ 16 апр 2017, 11:28 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

Ожидать можно долго, а работать надо уже сейчас :)

Автор:  Amir [ 26 апр 2017, 22:57 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

http://docs.bitel.ru/display/BGBILLING7 ... eActivator

Автор:  borisk [ 27 апр 2017, 12:40 ]
Заголовок сообщения:  Re: Как использовать $loopServ в TelnetServiceActivator?

Вот прямо СПАСИБИЩЕ!!!!

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/