【发布时间】:2022-01-08 03:54:39
【问题描述】:
我目前正在编写一个 Python 脚本,以从 csv 文件中提取数据,以利用 Jinja2 模板生成 cisco ASR 配置。所有这些都运行良好;但是,我需要修改一行,以便生成的输出采用正确的 ASR 配置语法。我有数百个这样的事情要做,并且希望能够正确地生成 ASR 配置,以便简单地复制并粘贴到设备中。有人可以指导我最简单的方法吗?
我的 Python 脚本:
import os
import jinja2
import csv
import re
# csv fileused
csv_file = "BFL1_AR1.csv"
with open(csv_file) as f:
read_csv = csv.DictReader(f)
for list_elements in read_csv:
generated_list = list_elements['TEST']
generated_list = generated_list.split()
list_elements['TEST'] = generated_list
pattern = re.findall('4323:(\d{1,9})\:\DD', )
print (pattern)
template_file = 'asr_generate_config.j2'
with open(template_file) as f:
list_template = f.read()
template = jinja2.Template(list_template)
print()
print('-' * 80)
print(template.render(list_elements))
print('-' * 80)
print()
生成的输出:
--------------------------------------------------------------------------------
l2vpn bridge group 4323:63210:BD
l2vpn bridge group 4323:63210:BD bridge-domain 4323:63210:BD
l2vpn bridge group 4323:63210:BD bridge-domain 4323:63210:BD mac withdraw state-down
l2vpn bridge group 4323:63210:BD bridge-domain 4323:63210:BD mtu 9216
l2vpn bridge group 4323:63210:BD bridge-domain 4323:63210:BD interface be10.149
l2vpn bridge group 4323:63210:BD bridge-domain 4323:63210:BD interface be50.149
l2vpn bridge group 4323:63210:BD bridge-domain 4323:63210:BD vfi 4323:63210:BD
l2vpn bridge group 4323:63210:BD bridge-domain 4323:63210:BD vfi 4323:63210:BD vpn-id 1024571
l2vpn bridge group 4323:63210:BD bridge-domain 4323:63210:BD vfi 4323:63210:BD autodiscovery bgp
l2vpn bridge group 4323:63210:BD bridge-domain 4323:63210:BD vfi 4323:63210:BD autodiscovery bgp rd auto
l2vpn bridge group 4323:63210:BD bridge-domain 4323:63210:BD vfi 4323:63210:BD autodiscovery bgp route-target 4323:63210
interface be10.149 l2transport
interface be10.149 l2transport description CA/KXFN/201755/LVLC
interface be10.149 l2transport encapsulation dot1q 149
interface be10.149 l2transport rewrite ingress tag pop 1 symmetric
interface be10.149 l2transport ethernet-services access-group L2-FRAMES ingress
interface be50.149 l2transport
interface be50.149 l2transport description CA/KXFN/201755/LVLC
interface be50.149 l2transport encapsulation dot1q 149
interface be50.149 l2transport rewrite ingress tag pop 1 symmetric
interface be50.149 l2transport ethernet-services access-group L2-FRAMES ingress
--------------------------------------------------------------------------------
我需要改变什么:
具有这种数据格式的每个实例: 4323:63210:BD --> 4323_63210
每个客户的网桥组 ID 将保持不变。我需要将第一个分号更改为下划线并删除最后一个分号和 B & D 字母。我一直在尝试使用正则表达式和 re.findall 来做到这一点,但运气不佳。
CSV 文件:
AR Unit ID AR_VLAN TEST CIRCUIT oline lookup uni lookup oline dummy service reference oline svlan assignment oline_BD_assignment oline_RT_assignment oline_vpnid_assignment end point node ring id Add BFL1-AR1/ 6K Topology New Router Port New_US_6K_Port Add 6K / 7609 Topology New_DS_6K_Port New 6K Port
4 4 MATCH 66/KDFN/102901/TWCS 66/KDFN/102901/TWCS_O_Line 66/KDFN/102901/TWCS DUMMY_OLINE_SVC173 4 4323:63163:BD 4323:63163 1024524 BKFECAAAI6001 #N/A 00GZPP/GE1L/BKFECAAA/BKFECAAA ae10.4 be10.4 00GZQB/GE1L/BKFECAAA/BKFECAAA be50.4 Po50.4
15 15 MATCH 66/KEFN/102374/TWCS 66/KEFN/102374/TWCS_O_Line 66/KEFN/102374/TWCS DUMMY_OLINE_SVC176 15 4323:63166:BD 4323:63166 1024527 BKFECAUZW2001 N66200 00GZPP/GE1L/BKFECAAA/BKFECAAA ae10.15 be10.15 00GZQB/GE1L/BKFECAAA/BKFECAAA be50.15 Po50.15
39 39 MATCH 66/KEFN/102539/TWCS 66/KEFN/102539/TWCS_O_Line 66/KEFN/102539/TWCS DUMMY_OLINE_SVC177 39 4323:63167:BD 4323:63167 1024528 BKFDCA12NN001 N66204 00GZPP/GE1L/BKFECAAA/BKFECAAA ae10.39 be10.39 00GZQB/GE1L/BKFECAAA/BKFECAAA be50.39 Po50.39
50 50 MATCH 66/KFFN/102600/TWCS 66/KFFN/102600/TWCS_O_Line 66/KFFN/102600/TWCS DUMMY_OLINE_SVC203 50 4323:63193:BD 4323:63193 1024554 SHFTCADIW2001 N66198 00GZPP/GE1L/BKFECAAA/BKFECAAA ae10.50 be10.50 00GZQB/GE1L/BKFECAAA/BKFECAAA be50.50 Po50.50
Jinja2 模板
l2vpn bridge group {{ oline_BD_assignment }}
l2vpn bridge group {{ oline_BD_assignment }} bridge-domain {{ oline_BD_assignment }}
l2vpn bridge group {{ oline_BD_assignment }} bridge-domain {{ oline_BD_assignment }} mac withdraw state-down
l2vpn bridge group {{ oline_BD_assignment }} bridge-domain {{ oline_BD_assignment }} mtu 9216
l2vpn bridge group {{ oline_BD_assignment }} bridge-domain {{ oline_BD_assignment }} interface {{ New_US_6K_Port }}
l2vpn bridge group {{ oline_BD_assignment }} bridge-domain {{ oline_BD_assignment }} interface {{ New_DS_6K_Port }}
l2vpn bridge group {{ oline_BD_assignment }} bridge-domain {{ oline_BD_assignment }} vfi {{ oline_BD_assignment }}
l2vpn bridge group {{ oline_BD_assignment }} bridge-domain {{ oline_BD_assignment }} vfi {{ oline_BD_assignment }} vpn-id {{ oline_vpnid_assignment }}
l2vpn bridge group {{ oline_BD_assignment }} bridge-domain {{ oline_BD_assignment }} vfi {{ oline_BD_assignment }} autodiscovery bgp
l2vpn bridge group {{ oline_BD_assignment }} bridge-domain {{ oline_BD_assignment }} vfi {{ oline_BD_assignment }} autodiscovery bgp rd auto
l2vpn bridge group {{ oline_BD_assignment }} bridge-domain {{ oline_BD_assignment }} vfi {{ oline_BD_assignment }} autodiscovery bgp route-target {{ oline_RT_assignment }}
interface {{ New_US_6K_Port }} l2transport
interface {{ New_US_6K_Port }} l2transport description {{CIRCUIT}}
interface {{ New_US_6K_Port }} l2transport encapsulation dot1q {{ AR_VLAN }}
interface {{ New_US_6K_Port }} l2transport rewrite ingress tag pop 1 symmetric
interface {{ New_US_6K_Port }} l2transport ethernet-services access-group L2-FRAMES ingress
interface {{ New_DS_6K_Port }} l2transport
interface {{ New_DS_6K_Port }} l2transport description {{CIRCUIT}}
interface {{ New_DS_6K_Port }} l2transport encapsulation dot1q {{ AR_VLAN }}
interface {{ New_DS_6K_Port }} l2transport rewrite ingress tag pop 1 symmetric
interface {{ New_DS_6K_Port }} l2transport ethernet-services access-group L2-FRAMES ingress
【问题讨论】:
标签: python regex csv import edit