forum.bitel.ru http://forum.bitel.ru/ |
|
Изменение скрипта в шлюзе Cisco2 http://forum.bitel.ru/viewtopic.php?f=7&t=1538 |
Страница 1 из 1 |
Автор: | ODV [ 23 окт 2008, 15:44 ] |
Заголовок сообщения: | Изменение скрипта в шлюзе Cisco2 |
Как можно передать значение переменой из конфига шлюа Cisco2 в набор команд. Типа конфиг шлюза: Код: login=хххх cfg.pswd=ххх range=200-1000 NUM=10 // переменая, значение которой надо передать набор команд Код: [OPEN] vlan {VID} interface Vlan {VID} no shutdown ip unnumbered {NUM} // {NUM} - подменить значением перемной exit [/OPEN] скрипт шлюза Cisco2 Код: import java.io.IOException; [/list]
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import bitel.billing.common.module.ipn.IPNContractStatus; import bitel.billing.server.ipn.GateWorker; import bitel.billing.server.ipn.UserStatus; import bitel.billing.server.ipn.bean.ManadUtils; import bitel.billing.server.ipn.bean.VlanManager; import bitel.billing.server.util.DefaultServerSetup; import bitel.billing.server.util.Utils; import bitel.billing.server.util.telnet.OperationTimedoutException; import bitel.billing.server.util.telnet.TelnetSession; protected void doSync() { try { log.info( "start of cisco........................................................"); String host = gate.getHost(); int port = gate.getPort(); DefaultServerSetup gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n" ); String login = gateSetup.getStringValue("login"); String pswdLogin = gate.getKeyword(); String pswdCfg = gateSetup.getStringValue( "cfg.pswd"); StringBuffer result = new StringBuffer(); if( log.isDebugEnabled() ) { log.debug( gate.getId() + " gate: " + host + ":" + port + " login:" + login + " pswdLogin: " + pswdLogin + " pswdCfg: " + pswdCfg ); } //TODO - завершающте символы вытащить в конфиг TelnetSession session = new TelnetSession( host, port); session.setLoginPromptSequence( ":" ); session.connect(); result.append( session.doCommand( login ) ); session.setLoginPromptSequence( ">" ); result.append( session.doCommand( pswdLogin ) ); result.append( session.doCommand( "terminal length 0" ) ); result.append( session.doCommand( "terminal width 0" ) ); session.setLoginPromptSequence( ":" ); result.append( session.doCommand( "enable" ) ); session.setLoginPromptSequence( "#" ); result.append( session.doCommand( pswdCfg ) ); result.append( session.doCommand( "configure terminal" ) ); log.debug( "execute commands" ); doCommands( session, result); //TODO commands here result.append( session.doCommand( "exit" ) ); log.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); log.info( result ); log.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); log.debug( "ok" ); } catch (Exception e) { throw new RuntimeException ( e ); } log.info( "end of cisco........................................................"); } protected void add() { } private void doCommands( TelnetSession session, StringBuffer result) throws IOException, OperationTimedoutException { for( UserStatus status : statusList ) { VlanManager manager = new VlanManager(status.mid, con); gateId = gate.getId(); log.info("gateId=" + gateId); vid = manager.getVlan( gateId, status.contractId ); log.info("vid=" + vid); int cid = status.contractId; //TODO - подумать что сделать справилами на добавление rules = null; if (status.status == IPNContractStatus.STATUS_OPEN) { rules = getOpenRules( status, vid ); } else if (status.status == IPNContractStatus.STATUS_REMOVED) { rules = getRemoveRules( status, vid ); } //if closed and etc else { rules = getCloseRules( status, vid ); } if (vid > 0) { for ( String rule : rules ) { result.append( session.doCommand( rule ) ); } } } } private List getOpenRules( UserStatus status, int vid ) { return getRules( status, "\\[OPEN\\]((.|\n)*)\\[/OPEN\\]", vid ); } private List getCloseRules( UserStatus status, int vid ) { return getRules( status, "\\[CLOSE\\]((.|\n)*)\\[/CLOSE\\]", vid ); } private List getRemoveRules( UserStatus status, int vid ) { return getRules( status, "\\[REMOVE\\]((.|\n)*)\\[/REMOVE\\]", vid ); } private List getRules( UserStatus status, String template, int vid ) { // пользовательское правило, без типа - то все оставляем как есть rule = status.rule.getRuleText(); log.info("rule=" + rule); //типизированное правило if( status.ruleType != null ) { log.info("222222"); ruleText = ManadUtils.getRule( status.gateType, status.ruleType ); log.info("ruleText=" + ruleText); Map replacements = new HashMap (); replacements.put( "\\{VID\\}", String.valueOf( vid ) ); rule = ManadUtils.generateRule( ruleText, status.rule.getRuleText(), replacements, status.ruleType ); } log.info("1111"); log.info("rule=" + rule); Pattern pattern = Pattern.compile( template ); Matcher m = pattern.matcher( rule ); if (m.find()) { rule = m.group( 1 ); } rule.replaceAll( "\r", "" ); parts = rule.split( "\n" ); List result = new ArrayList(); for ( String part : parts ) { if ( !Utils.isEmptyString( part )) { result.add( part ); } } return result; } protected void doParentSync() { } |
Автор: | stark [ 23 окт 2008, 16:18 ] |
Заголовок сообщения: | |
1. вот тут я описал код как передать в циску логин : http://bgbilling.ru/forum/viewtopic.php?t=1121&start=30 2 .Строку Код: String login = gateSetup.getStringValue("login"); лучше заменить на : Код: login = gateSetup.getStringValue("login");
И вообще по возможности постарайтесь по возможности убирать объявления типов везде . Я их после портирования из основного кода биллинга не убрал , но с такой проблемой мы сталкивались - что если обявлены типы, то на некторых машинах один и тот скрипт может работаь, а на других нет. лучше вообще в BeanShell не объявлять типов |
Автор: | ODV [ 23 окт 2008, 20:41 ] |
Заголовок сообщения: | |
Спасибо, все сделал. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |