-3

我正在尝试以编程方式为 yang 模式配置对象构建 netconf 编辑配置请求。目前我正在手动构建这个 xml 字符串。有没有办法以编程方式做到这一点?我正在使用 golang

例如,我正在尝试为架构 bgp-config.yang 中定义的 bgp 配置元素发送编辑配置请求:

module bgp-config {
    namespace "http://exnet.com/bgp-config";
    prefix bgp-config;
    import ietf-inet-types { prefix inet; }
    import tailf-common { prefix tailf; }
    import ietf-yang-types { prefix yang; }
    import ietf-bgp-types { prefix bgp-types; }
    import ietf-bgp-multiprotocol { prefix bgp-mp; }
    import openconfig-routing-policy { prefix rpol; }
    import myietf-routing {prefix rt;}
    revision "2016-04-07" {
    description "Revisied on 2016-04-07.";
    }
    augment "/rt:router"
    {
 list bgp {
     //presence "Container for BGP protocol hierarchy";
     //tailf:cli-add-mode;
     tailf:info "Top-level configuration and state for the BGP router";
     tailf:cli-full-no;
     tailf:cli-suppress-list-no;
     key "local-as";
     max-elements 1;
     description
         "Top-level configuration and state for the BGP router";
     uses bgp_config;
     uses bgp-graceful-restart;
     uses bgp-mp:bgp-route-selection-options;
     //tailf:cli-suppress-no;
     container afi-safis {
         tailf:cli-drop-node-name;
         description
             "Address family specific configuration";
         uses bgp-mp:bgp-common-afi-safi-list;
     }

          }
}

我有这个代码片段可以向 netconf 服务器发送 bgp 配置元素的编辑配置请求:

var s *netconf.Session 
localas := 888 
xmlstr := `<edit-config>
        <target><candidate/></target>
         <config>
         <router xmlns="urn:ietf:params:xml:ns:yang:ietf-routing">
         <bgp xmlns="http://exnet.com/bgp-config">
         <local-as>` + strconv.Itoa(localas) + `</local-as>
         </bgp>
      </router>
     </config>
    </edit-config>`
 NetConfSendRPC(s, xmlstr)
 xmlstr = "<commit/>"
 NetConfSendRPC(s, xmlstr)
 s.Close()

我的问题是关于如何以编程方式构造 xml 字符串以发送所有配置元素的编辑配置。第一步是从 yang 模式生成 xml 标记的 go 结构(这是我需要帮助/指针的地方),然后我可以使用 xml marshal 方法来构造请求。第一步的任何建议都会有所帮助。谢谢。

4

1 回答 1

2
  1. 将 XML 文档映射到标记的结构。
  2. 创建一个表示您想要的配置的结构。
  3. 使用xml.MarshalIndent(参见示例)编组结构。

另请参阅https://github.com/Juniper/go-netconf

于 2018-01-03T21:39:07.237 回答