python - python-textFSM 解析多行配置
问题描述
我的任务是解析 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
模板文件中的错误是什么?如何更改它以解析每个服务器场。(结果我只有第一次记录)?
解决方案
以下是您应该考虑的一些事项
- 当您拥有所有数据时,您应该记录。
- Textfsm 每次解析每一行
- 由于您有两个 rserver_name 实例,因此请考虑对 Value 使用 List 选项
- 关于“必填”字段 - 通常 FSM 在终止时会丢弃空行,但这里的“Filldown”选项将填充“serverfarm”列,因此 FSM 将保留非空行并在 FSM 终止时保存它. 为了解决这个问题,我使用了值选项 - 必需。此选项指定该值必须已匹配,否则将不会保存一行。在这里它确保“load_balance_method”和“probe_name”都包含一个值。
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
输出:
[['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']]]
推荐阅读
- c - 结构 | 分配结构对象 | 分段错误错误
- firewall - 寻找 LAN 到 LAN 访问列表的默认行为
- csv - 使用 Apache Flink 将数据从 csv 文件传输到数据库表
- android - Xamarin 移动应用开发指南 - 如何在 iOS、Android 和 UWP 的 WebView 中加载本地网站 (HTML/CSS/JS ..)
- hadoop - 当日期为时间戳时过滤指定日期之间的数据
- excel - Excel VBA - 从B列开始自动过滤后复制数据
- python - 使用 pip install 和设置路径后在 python 中出现导入错误
- laravel-5 - 我像往常一样制作数据库和doit,但出现此警告
- wordpress - 无法使用 WordPress REST API 获取特色图片
- android - 如何使用 jetpack 导航执行片段事务的添加操作