1

最终,我试图区分大括号符号。类似于 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
    }
4

0 回答 0