最终,我试图区分大括号符号。类似于 Junos 中的“显示|比较”输出。不幸的是,将语法设置为 'junos' 并不会在输出中保留大括号。但是,将其设置为“ios”可以。当在 F5 代码上将语法设置为“ios”时,它似乎已经完成了大部分工作,但是,它仍然抱怨在某些不应该存在的部分存在差异。
from ciscoconfparse import CiscoConfParse
BASELINE = """ltm virtual ACME {
destination 192.168.1.191:http
ip-protocol tcp
mask 255.255.255.255
pool pool1
profiles {
http { }
tcp { }
}
rules {
MOBILE
}
source 0.0.0.0/0
source-address-translation {
type automap
}
translate-address enabled
translate-port enabled
vs-index 17
}""".splitlines()
REQUIRED = """ltm virtual ACME {
destination 192.168.2.191:http
ip-protocol tcp
mask 255.255.255.255
pool pool2
profiles {
http { }
tcp { }
}
rules {
BLAH
}
source 0.0.0.0/0
source-address-translation {
type automap
}
translate-address enabled
translate-port enabled
vs-index 17
}""".splitlines()
parse = CiscoConfParse(BASELINE, syntax='ios')
print('\n'.join(parse.sync_diff(REQUIRED, '')))
产生这个:
ltm virtual ACME {
no }
no rules {
no destination 192.168.1.191:http
no pool pool1
no MOBILE
ltm virtual ACME {
destination 192.168.2.191:http
pool pool2
rules {
BLAH
}
注意输出中的第二行和第三行。
no }
no rules {
该顺序与所需的代码不同,我认为,因此它会引发“差异”。有没有办法确保排序保持到位?
预期输出:
ltm virtual ACME {
no destination 192.168.1.191:http
no pool pool1
rules {
no MOBILE
}
ltm virtual ACME {
destination 192.168.2.191:http
pool pool2
rules {
BLAH
}