The YDK should be able to get single container data.
Current Behavior
The Python core package sometimes fails to read single container data using CRUDService.
In the example below there was created BGP configuration that has 2 containers: global and neighbors. The test succeeds to get container 'global', but fails to get container 'neighbors'.
Similar tests in C++ package are passing fine.
Your Script
import logging
from ydk.providers import NetconfServiceProvider
from ydk.services import CRUDService
from ydk.filters import YFilter
from ydk.models.ydktest import openconfig_bgp
def enable_logging(level):
log = logging.getLogger('ydk')
log.setLevel(level)
handler = logging.StreamHandler()
formatter = logging.Formatter(("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
handler.setFormatter(formatter)
log.addHandler(handler)
def assert_true(test, result):
if result is None or not result:
print("Failed Test %s" % test)
if __name__ == "__main__":
ncc = NetconfServiceProvider(
"127.0.0.1",
"admin",
"admin",
12022,
)
crud = CRUDService()
enable_logging(logging.INFO)
# Delete BGP config
bgp_set = openconfig_bgp.Bgp()
reply = crud.delete(ncc, bgp_set)
assert_true("Delete BGP Config", reply)
# Create BGP config
bgp_set.global_.config.as_ = 65001
bgp_set.global_.config.router_id = "1.2.3.4"
d = openconfig_bgp.Bgp.Neighbors.Neighbor()
d.neighbor_address = "1.2.3.4"
d.config.neighbor_address = "1.2.3.4"
q = openconfig_bgp.Bgp.Neighbors.Neighbor()
q.neighbor_address = "1.2.3.5"
q.config.neighbor_address = "1.2.3.5"
bgp_set.neighbors.neighbor.extend([d, q])
reply = crud.create(ncc, bgp_set)
assert_true("Create config", reply)
# Read only 'global' container
bgp_filter = openconfig_bgp.Bgp()
bgp_filter.global_.yfilter = YFilter.read
bgp_read = crud.read_config(ncc, bgp_filter)
assert_true("Read BGP global config", bgp_read)
assert_true("Check global has data", bgp_read.global_.config.as_ == 65001)
assert_true("Check 'neighbors' have no data", not bgp_read.neighbors.has_data())
# Read only 'neighbors' container
bgp_filter = openconfig_bgp.Bgp()
bgp_filter.neighbors = YFilter.read
bgp_read = crud.read_config(ncc, bgp_filter)
assert_true("Get Neighbors Results", bgp_read)
assert_true("Check number of neighbors", len(bgp_read.neighbors.neighbor) == 2)
assert_true("Check 'globals' have no data", not bgp_read.global_.has_data())
Logs
/home/ygorelik/venv/bin/python3 /home/ygorelik/ydk-gen/scripts/tests/test_999.py
2020-06-27 11:23:39,014 - ydk - INFO - Executing CRUD delete operation on [openconfig-bgp:bgp]
2020-06-27 11:23:39,014 - ydk - INFO - Executing 'edit-config' RPC on [openconfig-bgp:bgp]
2020-06-27 11:23:39,037 - ydk - INFO - ============= Sending RPC to device =============
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<target>
<candidate/>
</target>
<config><bgp xmlns="http://openconfig.net/yang/bgp" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="delete"/>
</config>
</edit-config>
</rpc>
2020-06-27 11:23:39,062 - ydk - INFO - ============= Received RPC from device =============
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2">
<ok/>
</rpc-reply>
2020-06-27 11:23:39,062 - ydk - INFO - Executing 'commit' RPC
2020-06-27 11:23:39,062 - ydk - INFO - ============= Sending RPC to device =============
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><commit xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"/>
</rpc>
2020-06-27 11:23:39,136 - ydk - INFO - ============= Received RPC from device =============
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="3">
<ok/>
</rpc-reply>
2020-06-27 11:23:39,136 - ydk - INFO - Operation succeeded
2020-06-27 11:23:39,156 - ydk - INFO - Executing CRUD create operation on [openconfig-bgp:bgp]
2020-06-27 11:23:39,168 - ydk - INFO - Executing 'edit-config' RPC on [openconfig-bgp:bgp]
2020-06-27 11:23:39,186 - ydk - INFO - ============= Sending RPC to device =============
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<target>
<candidate/>
</target>
<config><bgp xmlns="http://openconfig.net/yang/bgp" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="merge">
<global>
<config>
<as>65001</as>
<router-id>1.2.3.4</router-id>
</config>
</global>
<neighbors>
<neighbor>
<neighbor-address>1.2.3.4</neighbor-address>
<config>
<neighbor-address>1.2.3.4</neighbor-address>
</config>
</neighbor>
<neighbor>
<neighbor-address>1.2.3.5</neighbor-address>
<config>
<neighbor-address>1.2.3.5</neighbor-address>
</config>
</neighbor>
</neighbors>
</bgp>
</config>
</edit-config>
</rpc>
2020-06-27 11:23:39,230 - ydk - INFO - ============= Received RPC from device =============
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4">
<ok/>
</rpc-reply>
2020-06-27 11:23:39,231 - ydk - INFO - Executing 'commit' RPC
2020-06-27 11:23:39,231 - ydk - INFO - ============= Sending RPC to device =============
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><commit xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"/>
</rpc>
2020-06-27 11:23:39,328 - ydk - INFO - ============= Received RPC from device =============
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5">
<ok/>
</rpc-reply>
2020-06-27 11:41:31,573 - ydk - INFO - Operation succeeded
2020-06-27 11:41:31,587 - ydk - INFO - Executing CRUD read_config operation on [openconfig-bgp:bgp]
2020-06-27 11:41:31,588 - ydk - INFO - Executing 'get' RPC on [openconfig-bgp:bgp] from running
2020-06-27 11:41:31,590 - ydk - INFO - ============= Sending RPC to device =============
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><get-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<source>
<running/>
</source>
<filter><bgp xmlns="http://openconfig.net/yang/bgp">
<global/>
</bgp></filter>
</get-config>
</rpc>
2020-06-27 11:41:31,618 - ydk - INFO - ============= Received RPC from device =============
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6">
<data>
<bgp xmlns="http://openconfig.net/yang/bgp">
<global>
<config>
<as>65001</as>
<router-id>1.2.3.4</router-id>
</config>
</global>
</bgp>
</data>
</rpc-reply>
2020-06-27 11:23:39,329 - ydk - INFO - Operation succeeded
2020-06-27 11:23:39,352 - ydk - INFO - Executing CRUD read_config operation on [openconfig-bgp:bgp]
2020-06-27 11:23:39,352 - ydk - INFO - Executing 'get' RPC on [openconfig-bgp:bgp] from running
2020-06-27 11:23:39,362 - ydk - INFO - ============= Sending RPC to device =============
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><get-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<source>
<running/>
</source>
<filter><bgp xmlns="http://openconfig.net/yang/bgp"/></filter>
</get-config>
</rpc>
2020-06-27 11:23:39,399 - ydk - INFO - ============= Received RPC from device =============
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6">
<data>
<bgp xmlns="http://openconfig.net/yang/bgp">
<global>
<config>
<as>65001</as>
<router-id>1.2.3.4</router-id>
</config>
</global>
<neighbors>
<neighbor>
<neighbor-address>1.2.3.4</neighbor-address>
<config>
<neighbor-address>1.2.3.4</neighbor-address>
</config>
</neighbor>
<neighbor>
<neighbor-address>1.2.3.5</neighbor-address>
<config>
<neighbor-address>1.2.3.5</neighbor-address>
</config>
</neighbor>
</neighbors>
</bgp>
</data>
</rpc-reply>
Failed Test Check 'globals' have no data
2020-06-27 11:23:39,510 - ydk - INFO - Disconnected from device
Process finished with exit code 0
Expected Behavior
The YDK should be able to get single container data.
Current Behavior
The Python core package sometimes fails to read single container data using CRUDService.
In the example below there was created BGP configuration that has 2 containers: global and neighbors. The test succeeds to get container 'global', but fails to get container 'neighbors'.
Similar tests in C++ package are passing fine.
Your Script
Logs
System Information
YDK-0.8.4 with openconfig or ydktest bundle