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 [ 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(имя_параметра_шаблона_команды,использовать_в_цикле_родительский_сервис,выполять_как_отдельную_команду_или_построить_строку) Получаем лог: Вложение: То есть 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) ![]() |
Автор: | 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/ |