首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python-textFSM解析多行配置

python-textFSM解析多行配置
EN

Stack Overflow用户
提问于 2018-05-30 23:04:20
回答 2查看 1.5K关注 0票数 0

我的任务是解析Cisco ACE配置。我使用的是python textFSM模块。此模板应解析配置的"serverfarm“部分:

代码语言:javascript
复制
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配置的一部分:......

代码语言:javascript
复制
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表形式的结果:

代码语言:javascript
复制
$ ./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

我在模板文件中的错误是什么?如何更改它以解析每个服务器场。(结果是我只有第一个记录)?

EN

回答 2

Stack Overflow用户

发布于 2018-05-31 01:06:23

我为此找到了临时解决方案,但将rserver列字段设置为rserver的“列表”会更方便。

解决方法:

代码语言:javascript
复制
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个服务器,将有4行..一个也没有。

有人与我的想法,如何改变模板,以获得每服务器场一行和rserver列表作为一个字段在最后一列"rserver_name“

输出:

代码语言:javascript
复制
 --- [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']
票数 0
EN

Stack Overflow用户

发布于 2020-09-25 10:31:03

下面是你应该考虑的一些事情

当你有了所有的数据,你应该记录下来。

  • Textfsm在

  • 解析每一行由于你有两个rserver_name的实例,考虑使用列表选项‘
  1. ’字段-通常情况下,

会在它终止时丢弃空行,但这里的‘

  1. ’选项将填充‘
  2. ’列,所以当rserver_name终止时,FSM将保留一个非空行并保存它。为了解决这个问题,我使用了Value选项- Required。此选项指定该值必须匹配,否则将不会保存行。这里它确保'load_balance_method‘和'probe_name’都包含一个值。

代码语言:javascript
复制
Value Filldown Serverfarm_name (\S+)
Value Required load_balance_method (\S+)
Value Required 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 -> RServer1

RServer1
  ^\s+rserver\s+$rserver_name
  ^\s+inservice -> RServer2

RServer2
  ^\s+rserver\s+$rserver_name -> RServer3

RServer3
  ^\s+inservice -> Record Start

输出:

代码语言:javascript
复制
[['SF-TEST1-3.8083', 'hash', 'TEST-3.8083', ['lala_server438', 'lala_server439']], ['SF-TEST1-4.8084', 'hash', 'TEST-4.8084', ['lala_server438', 'lala_server439']], ['SF-TEST1-5.8085', 'hash', 'TEST-5.8085', ['lala_server438', 'lala_server439']]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50607990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档