CSV+jinja2渲染對交換機進行配置

背景:需要對交換機的介面配置vlan資訊以及描述,每個介面的資訊不一致,但是有跡可循

註明:本文是參考@弈心的文章,不過王老師是思科的配置

前置準備:

1、python3

2、CSV檔案,包含配置所需要的資訊

3、jinja2模板

4、netmiko模組

實際操作

一、建立CSV檔案,寫入介面、描述、介面型別、允許透過的vlanID。

CSV+jinja2渲染對交換機進行配置

二、建立jinja2模板,還是很容易看懂的,就是配置命令的模板。儲存

interface_templates.js

interface {{interface}} description {{description}} {%if vlan==‘trunk’ -%} port link-type trunk port trunk allow-pass vlan 2 to 4094 {% else -%} port link-type access port default vlan {{vlan}} {%endif-%} undo shutdown

三、測試打印出是否是想要的模板

CSV+jinja2渲染對交換機進行配置

四、編寫python指令碼

import csvfrom jinja2 import Templatefrom netmiko import ConnectHandler# 開啟CSV檔案以及jinja2模板,值得注意的是jinja2模板的游標需要放到下一行,放在最後一行容易導致‘keep_trailing_newline=True’無效csv_file = open(‘介面配置檔案。csv’)template_file = open(‘interface_templates。j2’)# 將CSV檔案內容轉化為dict(字典)型別reader = csv。DictReader(csv_file)# 透過jinja2中的模板型別開啟jinja2模板,keep_trailing_newline=True是讓每一個模板結束後自動換行,不然容易第二個模板的第一行與第二個模板的最後一行連線在一起interface_template = Template(template_file。read(), keep_trailing_newline=True)interface_configs = ‘’# 將CSV中的資訊透過jinja2的模板翻譯成資料,將CSV中的資料放入jinja2的模板中。for read in reader: interface_config = interface_template。render( interface=read[‘interface’], description=read[‘description’], vlan=read[‘vlan’] ) # 遍歷CSV中的資料,然後將所有資料統一寫入到interface_configs中 interface_configs += interface_configprint (interface_configs)# netmiko連線交換機的資訊,也可以透過檔案讀取dev_info = { ‘ip’: ‘192。168。1。1’, ‘username’: ‘lixilei’, ‘password’: ‘python3’, ‘device_type’: ‘huawei’}# 透過\n來判斷,將interface_configs拆解成一個個列表config_set = interface_configs。split(‘\n’)conn = ConnectHandler(**dev_info)print(‘已連線到交換機’)output = conn。send_config_set(config_set, cmd_verify=False)config_save = conn。send_command(‘save’, expect_string=r“\[Y/N\]”)config_save += conn。send_command(‘y’, expect_string=r“>”)‘’‘cmd_verify=False註解:同Netmiko 2不一樣,Netmiko 3中預設要等到輸入的命令在螢幕上打印出來後才會執行後面的命令(因為Netmiko 3預設將send_config_set()裡的“cmd_verify”引數設為True),像我們這種一次性對交換機輸入多達60多條命令的情況(12個埠要配置),經常會出現網路延遲的問題導致在執行指令碼時Netmiko會返回“netmiko。sshexception。NemikoTimeoutException:Time-out reading channel, data not available”這個異常(我們寫的程式碼本身沒有問題,這是Netmiko 3自身的一個“bug”)’‘’print(output)

五、執行指令碼、對比交換機前後的配置

1、檢視交換機介面配置

CSV+jinja2渲染對交換機進行配置

2、執行py指令碼

CSV+jinja2渲染對交換機進行配置

3、回到交換機檢視介面配置

CSV+jinja2渲染對交換機進行配置