python-textFSM разобрать несколько строк конфигурации - PullRequest
0 голосов
/ 30 мая 2018

У меня есть задача проанализировать конфигурацию Cisco ACE.Я использую модуль python textFSM.Этот шаблон должен анализировать часть serverfarm конфигурации:

Value Required Serverfarm_name (\S+)
Value load_balance_method (\S+)
Value probe_name (\S+)
Value List rserver_name (\S*)

Start
  ^serverfarm\s+host\s+$Serverfarm_name
  ^\s+predictor\s+$load_balance_method
  ^\s+probe\s+$probe_name
  ^\s+rserver\s+$rserver_name -> RServer

RServer
  ^\s+rserver\s+$rserver_name -> Continue.Record
  ^\s+inservice

Часть конфигурации Cisco ACE: ......

serverfarm host SF-TEST1-3.8083
  predictor hash address source
  probe TEST-3.8083
  rserver lala_server438
    inservice
  rserver lala_server439
    inservice
serverfarm host SF-TEST1-4.8084
  predictor hash address source
  probe TEST-4.8084
  rserver lala_server438
    inservice
  rserver lala_server439
    inservice
serverfarm host SF-TEST1-5.8085
  predictor hash address source
  probe TEST-5.8085
  rserver lala_server438
    inservice
  rserver lala_server439
    inservice

......

После запуска сценария ace.py у меня нет желаемого результата в виде таблицы textFSM:

$ ./ace.py
 --- [2018-05-30 16:47:52.892697] --- Start Timestamp ---
 --- [+0.000116 sec] --- Parse: ./textFSM/ace_serverfarm_template.textfsm ---
['Serverfarm_name', 'load_balance_method', 'probe_name', 'rserver_name']
['SF-TEST1-3.8083', 'hash', 'TEST-3.8083', ['lala_server438', 'lala_server439']]
Write 1 records

В чем моя ошибка в файле шаблона?Как изменить его, чтобы разобрать каждый сервер.(У меня только первая запись в результате)?

1 Ответ

0 голосов
/ 30 мая 2018

Я нашел временное решение для этого, но было бы удобнее сделать поля столбцов rserver «Списком» rservers.

Обходной путь:

Value Filldown Serverfarm_name (\S+)
Value Filldown load_balance_method (\S+)
Value Filldown probe_name (\S+)
Value Required rserver_name (\S+)

Start
  ^serverfarm\s+host\s+$Serverfarm_name
  ^\s+predictor\s+$load_balance_method
  ^\s+probe\s+$probe_name
  ^\s+rserver\s+$rserver_name -> Record RServer

RServer
  ^\s+rserver\s+$rserver_name
  ^\s+inservice -> Start

Но это приведет к появлению большего количества строк в таблице FSM.Если я скажу 4 сервера для одного serverfarm, то будет 4 строки, а не один.

Кто-то знает, как изменить шаблон, чтобы получить по одной строке на серверную ферму и список rservers в виде поля в последнем столбце «rserver_name»

Вывод:

 --- [2018-05-30 20:07:53.906280] --- Start Timestamp ---
 --- [+0.000106 sec] --- Parse: ./textFSM/ace_serverfarm_template.textfsm ---
['Serverfarm_name', 'load_balance_method', 'probe_name', 'rserver_name']
['SF-TEST1-3.8083', 'hash', 'TEST-3.8083', 'lala_server438']
['SF-TEST1-3.8083', 'hash', 'TEST-3.8083', 'lala_server439']
['SF-TEST1-4.8084', 'hash', 'TEST-4.8084', 'lala_server438']
['SF-TEST1-4.8084', 'hash', 'TEST-4.8084', 'lala_server439']
['SF-TEST1-5.8085', 'hash', 'TEST-5.8085', 'lala_server438']
['SF-TEST1-5.8085', 'hash', 'TEST-5.8085', 'lala_server439']
...