当yang模型有一个包含多个键的列表时,ODL在将请求发送到netconf设备时不会维护属性的顺序。从RFC 6020中可以看出,需要严格遵守该顺序。
"列表的关键节点被编码为列表的子元素identifier元素,其顺序与在"key"语句。">
主要是我的供应商设备在创建无序列表时没有抱怨,但在删除过程中抱怨有错误。
杨模型示例:
container acl-config {
list acl-config-list {
key "tenant-id access-control-list-id";
leaf tenant-id {
type leafref {
path "/tenant:tenant-config/tenant:tenant-list/tenant:tenant-id";
}
description
"Unique identifier of the Tenant";
}
leaf access-control-list-id {
type custom-id;
mandatory true;
description
"Unique ACL identifier";
}
}
ODL在删除操作期间编码时发送如下请求:
<edit-config>
<target>
<running/>
</target>
<default-operation>none</default-operation>
<error-option>rollback-on-error</error-option>
<config>
<acl-config xmlns="http://example.com/acl">
<acl-config-list>
<access-control-list-id>acl7</access-control-list-id>
<tenant-id>f81d4fae-7dec-11d0-a765-00a0c91e6bf6</tenant-id>
<acl-dst-config xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0"
a:operation="delete"/>
</acl-config-list>
</acl-config>
</config>
</edit-config>
</rpc>
我希望租户id首先被编码,而不是按照yang中定义的密钥顺序对访问控制列表id进行编码。删除操作期间设备抛出以下错误
<rpc-error>
<error-type>protocol</error-type>
<error-tag>missing-element</error-tag>
<error-severity>error</error-severity>
<error-message xml:lang="en">Invalid position of the key "tenant-id" in a
list "acl-config-list".</error-message>
<error-info>
<bad-element>/access_control_list:acl-config/acl-config-list[access-
control-list-id='acl7']/tenant-id</bad-element>
</error-info>
</rpc-error>
我期望ODL在XML编码期间遵循关键节点的严格顺序,并遵循RFC 6020语句。这种情况没有发生,设备完全基于故障问题拒绝了请求。这是ODL yangtools XML编码问题中的一个错误,还是设备真的应该按任何顺序处理请求?
这个问题似乎在这里得到了回答
准确地说,jira票证是用来跟踪这个问题的。https://jira.opendaylight.org/browse/YANGTOOLS-1037