ydk.path.RootSchemaNode.create_datanode(path, value=None) should never reject valid paths and values.
Current Behavior
In some cases, ydk.path.RootSchemaNode.create_datanode(path, value=None) rejects valid values with exception YModelError. Even though the value is set and in accordance with the model, the exception indicates that an empty string ("") was provided.
Note that the error does not occur if the datanode is created directly from its parent datanode using the function ydk.path.DataNode.create_datanode(path, value=None)
Steps to Reproduce
Execute the script below in ydk-py docker container.
Creating libyang context in path: /root/ydk-py/cisco-ios-xr/ydk/models/cisco_ios_xr/_yang
[libyang] Extension plugin "/usr/local/lib/libyang/libyang_ext_test.so" successfully loaded.
[libyang] Extension plugin "/usr/local/lib/libyang/metadata.so" successfully loaded.
[libyang] Extension plugin "/usr/local/lib/libyang/nacm.so" successfully loaded.
[libyang] Reading module "ietf-yang-metadata".
[libyang] Module "ietf-yang-metadata@2016-08-05" successfully parsed as implemented.
[libyang] Reading module "yang".
[libyang] Resolving "yang" unresolved schema nodes and their constraints...
[libyang] All "yang" schema nodes and constraints resolved.
[libyang] Module "yang@2017-02-20" successfully parsed as implemented.
[libyang] Reading module "ietf-inet-types".
[libyang] Resolving derived type "union" failed, it will be attempted later.
[libyang] Resolving derived type "union" failed, it will be attempted later.
[libyang] Resolving derived type "union" failed, it will be attempted later.
[libyang] Resolving derived type "union" failed, it will be attempted later.
[libyang] Resolving "ietf-inet-types" unresolved schema nodes and their constraints...
[libyang] All "ietf-inet-types" schema nodes and constraints resolved.
[libyang] Module "ietf-inet-types@2013-07-15" successfully parsed as implemented.
[libyang] Reading module "ietf-yang-types".
[libyang] Module "ietf-yang-types@2013-07-15" successfully parsed as implemented.
[libyang] Reading module "ietf-datastores".
[libyang] Module "ietf-datastores@2017-08-17" successfully parsed as implemented.
[libyang] Reading module "ietf-yang-library".
[libyang] Module "ietf-yang-library@2017-08-17" successfully parsed as implemented.
Populating new module schema 'ietf-yang-metadata'
Populating new module schema 'yang'
Populating new module schema 'ietf-inet-types'
Populating new module schema 'ietf-yang-types'
Populating new module schema 'ietf-datastores'
Populating new module schema 'ietf-yang-library'
Getting new modules for path 'Cisco-IOS-XR-cdp-cfg:cdp/timer'
Loading module 'Cisco-IOS-XR-cdp-cfg', revision ''
[libyang] Searching for "Cisco-IOS-XR-cdp-cfg" in /root/ydk-py/cisco-ios-xr/ydk/models/cisco_ios_xr/_yang.
[libyang] Searching for "Cisco-IOS-XR-cdp-cfg" in /root/ydk-py/cisco-ios-xr/ydk/models/cisco_ios_xr/_yang/ietf@0.1.5-post2.
[libyang] Searching for "Cisco-IOS-XR-cdp-cfg" in /root/ydk-py/pathapi-taran.
[libyang] Loading schema from "/root/ydk-py/cisco-ios-xr/ydk/models/cisco_ios_xr/_yang/Cisco-IOS-XR-cdp-cfg.yang" file.
[libyang] Searching for "Cisco-IOS-XR-ifmgr-cfg" in /root/ydk-py/cisco-ios-xr/ydk/models/cisco_ios_xr/_yang.
[libyang] Searching for "Cisco-IOS-XR-ifmgr-cfg" in /root/ydk-py/cisco-ios-xr/ydk/models/cisco_ios_xr/_yang/ietf@0.1.5-post2.
[libyang] Searching for "Cisco-IOS-XR-ifmgr-cfg" in /root/ydk-py/pathapi-taran.
[libyang] Loading schema from "/root/ydk-py/cisco-ios-xr/ydk/models/cisco_ios_xr/_yang/Cisco-IOS-XR-ifmgr-cfg.yang" file.
[libyang] Searching for "Cisco-IOS-XR-types" in /root/ydk-py/cisco-ios-xr/ydk/models/cisco_ios_xr/_yang.
[libyang] Searching for "Cisco-IOS-XR-types" in /root/ydk-py/cisco-ios-xr/ydk/models/cisco_ios_xr/_yang/ietf@0.1.5-post2.
[libyang] Searching for "Cisco-IOS-XR-types" in /root/ydk-py/pathapi-taran.
[libyang] Loading schema from "/root/ydk-py/cisco-ios-xr/ydk/models/cisco_ios_xr/_yang/Cisco-IOS-XR-types.yang" file.
[libyang] Module "Cisco-IOS-XR-types@2018-06-29" successfully parsed as implemented.
[libyang] Resolving "Cisco-IOS-XR-ifmgr-cfg" unresolved schema nodes and their constraints...
[libyang] All "Cisco-IOS-XR-ifmgr-cfg" schema nodes and constraints resolved.
[libyang] Module "Cisco-IOS-XR-ifmgr-cfg@2017-09-07" successfully parsed as implemented.
[libyang] Module "Cisco-IOS-XR-cdp-cfg@2017-08-16" successfully parsed as implemented.
Added new libyang module 'Cisco-IOS-XR-cdp-cfg'
Populating new module schema 'Cisco-IOS-XR-cdp-cfg'
Populating augmented schema node 'cdp'
Populating new schema node 'cdp'
Looking to populate schemas for 'Cisco-IOS-XR-cdp-cfg:cdp/timer'
Getting new modules for path 'Cisco-IOS-XR-cdp-cfg:cdp/timer'
Loading module 'Cisco-IOS-XR-cdp-cfg', revision ''
The module 'Cisco-IOS-XR-cdp-cfg' schema has already been populated in YDK repository
Looking to populate schemas for '60'
Getting new modules for path '60'
Creating root data node with path '/Cisco-IOS-XR-cdp-cfg:cdp'
Populating schema for 'timer'
Looking to populate schemas for 'timer'
Getting new modules for path 'timer'
Creating node 'timer' with value ''
Current path: /Cisco-IOS-XR-cdp-cfg:cdp
Top container path: Cisco-IOS-XR-cdp-cfg:cdp
Populating schema for 'timer'
Looking to populate schemas for 'timer'
Getting new modules for path 'timer'
Getting child schema with path 'timer' in /Cisco-IOS-XR-cdp-cfg:cdp
Getting data nodes with path 'timer'
Creating new data path 'timer' with value '' in 'cdp'
Data is invalid according to the yang model. Libyang error: Invalid value "" in "timer" element. Path: '/Cisco-IOS-XR-cdp-cfg:cdp/timer'
Traceback (most recent call last):
File "bugtest.py", line 18, in <module>
datanode = root_schema.create_datanode(xpath, value)
RuntimeError: YModelError: Invalid value "" in "timer" element. Path: /Cisco-IOS-XR-cdp-cfg:cdp/timer
Expected Behavior
ydk.path.RootSchemaNode.create_datanode(path, value=None)
should never reject valid paths and values.Current Behavior
In some cases,
ydk.path.RootSchemaNode.create_datanode(path, value=None)
rejects valid values with exceptionYModelError
. Even though the value is set and in accordance with the model, the exception indicates that an empty string (""
) was provided.Note that the error does not occur if the datanode is created directly from its parent datanode using the function
ydk.path.DataNode.create_datanode(path, value=None)
Steps to Reproduce
Execute the script below in ydk-py docker container.
Your Script
Logs
System Information