首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python解析器在一个文件中处理这个混合配置?

如何使用python解析器在一个文件中处理这个混合配置?
EN

Stack Overflow用户
提问于 2022-06-21 12:40:59
回答 1查看 47关注 0票数 0

我正在用python解析器在Nokia节点上为VPLS服务配置设计一个解析器。下面是VPLS服务上evpn配置的两个示例。我想现在集中讨论bgpbgp-evpn部件。

代码语言:javascript
复制
        description "evpn-mpls-service with single-active multihoming"
        bgp
        bgp-evpn
            evi 10
            mpls
              no shutdown
              auto-bind-tunnel resolution any
        spoke-sdp 2:1 create 
        exit

--

代码语言:javascript
复制
        bgp
            route-distinguisher 63.130.124.186:50050
            route-target export target:4445:50050 import target:4445:50050
        exit
        bgp-evpn
            mpls bgp 1
                control-word
                auto-bind-tunnel
                    resolution-filter
                        ldp
                        rsvp
                        sr-isis
                        sr-te
                    exit
                    resolution filter
                exit
                no shutdown
            exit
        exit

下面是第二个示例的TTP模板:

代码语言:javascript
复制
        <group name="bgp">
        bgp {{ _start_ }}
            route-distinguisher {{ route_distinguisher }}
            <group name="route_target**">
            route-target export target:{{ export_target}} import target:{{ import_target }}
            </group>
        exit {{ _end_ }}
        </group>

        <group name="bgp_evpn">
        bgp-evpn {{ _start_ }}
            <group name="mpls">
            mpls {{ reference | ORPHRASE }}
                <group name="auto_bind_tunnel">
                auto-bind-tunnel {{ _start_ }}
                    <group name="resolution_filters">
                    resolution-filter {{ _start_ }}
                        {{ resolution_filter | _line_ }}
                    exit {{ _end_ }}
                    </group>
                    resolution {{ resolution }}
                exit {{ _end_ }}
                </group>
                no shutdown {{ state | set("enabled") | default("disabled") }}
            exit {{ _end_ }}
            </group>
        exit {{ _end_ }}
        </group>

因为这两种配置格式都可能存在于单个配置文件中。我需要使用一个模板来涵盖这两种情况。是可行的吗?我该如何调整模板呢?

EN

回答 1

Stack Overflow用户

发布于 2022-07-02 01:42:53

此模板:

代码语言:javascript
复制
    <group name="bgp">
    bgp {{ _start_ }}
        route-distinguisher {{ route_distinguisher }}
        <group name="route_target**">
        route-target export target:{{ export_target}} import target:{{ import_target }}
        </group>
    exit {{ _end_ }}
    </group>

    <group name="bgp_evpn">
    bgp-evpn {{ _start_ }}
    
        <group name="evi">
        evi {{ reference }}
        <group name="mpls_params**">
        mpls {{ _start_ }}
          no shutdown {{ state | set("enabled") | default("disabled") }}
          auto-bind-tunnel resolution {{ resolution }}
        </group>
        </group>        
    
        <group name="mpls">
        mpls {{ reference | ORPHRASE }}
            <group name="auto_bind_tunnel">
            auto-bind-tunnel {{ _start_ }}
                <group name="resolution_filters">
                resolution-filter {{ _start_ }}
                    {{ resolution_filter | _line_ }}
                exit {{ _end_ }}
                </group>
                resolution {{ resolution }}
            exit {{ _end_ }}
            </group>
            no shutdown {{ state | set("enabled") | default("disabled") }}
        exit {{ _end_ }}
        </group>
        
    exit {{ _end_ }}
    </group>

给出这个输出:

代码语言:javascript
复制
[
    {
        "bgp": {
            "route_distinguisher": "63.130.124.186:50050",
            "route_target": {
                "export_target": "4445:50050",
                "import_target": "4445:50050"
            }
        },
        "bgp_evpn": [
            {
                "evi": {
                    "mpls_params": {
                        "resolution": "any",
                        "state": "enabled"
                    },
                    "reference": "10"
                }
            },
            {
                "mpls": {
                    "auto_bind_tunnel": {
                        "resolution": "filter",
                        "resolution_filters": {
                            "resolution_filter": "ldp\nrsvp\nsr-isis\nsr-te"
                        }
                    },
                    "reference": "bgp 1",
                    "state": "enabled"
                }
            }
        ]
    }
]

以上使用此沙箱进行测试:https://textfsm.nornir.tech/

不确定这是否是您所追求的,但它可以解析这两种格式并将它们合并到总体结果中,对于sros,此回购可能是一个有用的示例来源:https://pypi.org/project/ttp-sros-parser/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72700964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档