我正在使用 Ansible 和 TextFSM (Python) 模板从网络设备中动态提取 LLDP 信息,然后将 LLDP 输出应用于相同的设备接口描述。我目前有一个工作模型但是我需要微调写入接口描述的内容以匹配我们的命名约定(主机名接口),其中主机名不能包含 FQDN,接口应该是接口的前三个字母大小写(在本例中为“eth”)紧跟接口编号 (24)。最终结果看起来像“lab-fr-sw01-eth24”
我可以使用 (\S+) 为模板中的每个变量提取适当的输出:
Value NEIGHBOR (\S+)
Value LOCAL_INTERFACE (\S+)
Value NEIGHBOR_INTERFACE (\S+)
示例 CLI 输出:Et1 lab-fr-sw01.test.local Ethernet24 120
唯一的问题是,有时开关会像上面一样为“NEIGHBOR”变量提取 FQDN,有时则不会。现在我正在尝试为每个变量编写一个特定的正则表达式(TextFSM 模板仅使用正则表达式)语句。对于邻居变量,我试图将第二个非空白字符匹配到“。” 如果存在。到目前为止,我只能用 (^\S+) 准确地抓取本地接口 (Et1),然后当我尝试只用 ^[^.]+ 抓取主机名时,我还包括本地接口输出“Et1”。为了匹配,我一直在使用https://regex101.com
Et1 lab-fr-sw01.test.local Ethernet24 120
Where LOCAL_INTERFACE = Et1, --> (^\S+)
NEIGHBOR = lab-ew-sw01.test.local and --> ^[^.]+
NEIGHBOR_INTERFACE = Ethernet24 --> ?
将写入设备接口描述的所需最终结果类似于“lab-fr-sw01-eth24”。但是,因为我们有多个站点,并且每个站点名称都包含在主机名中,所以我不能依赖尝试逐个字母匹配主机名。