BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 02 июл 2025, 08:03

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Изменение скрипта в шлюзе Cisco2
СообщениеДобавлено: 23 окт 2008, 15:44 
Не в сети

Зарегистрирован: 14 мар 2008, 12:43
Сообщения: 123
Карма: 0
Как можно передать значение переменой из конфига шлюа 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;
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()
{
}
[/list]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2008, 16:18 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
1. вот тут я описал код как передать в циску логин :
http://bgbilling.ru/forum/viewtopic.php?t=1121&start=30

2 .Строку
Код:
String login = gateSetup.getStringValue("login");


лучше заменить на :
Код:
login = gateSetup.getStringValue("login");

И вообще по возможности постарайтесь по возможности убирать объявления типов везде . Я их после портирования из основного кода биллинга не убрал , но с такой проблемой мы сталкивались - что если обявлены типы, то на некторых машинах один и тот скрипт может работаь, а на других нет. лучше вообще в BeanShell не объявлять типов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2008, 20:41 
Не в сети

Зарегистрирован: 14 мар 2008, 12:43
Сообщения: 123
Карма: 0
Спасибо, все сделал.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.033s | 23 Queries | GZIP : On ]