-
Notifications
You must be signed in to change notification settings - Fork 78
CodecService fails correctly encode multiple entries in keyless list #854
Copy link
Copy link
Closed
Description
Expected Behavior
The CodecService must correctly encode keyless list with multiple entries.
Current Behavior
The CodecService fails encode keyless list of leafs when the list contains multiple entries. The encoded string (JSON or XML) contains only one list entry.
Your Script
from argparse import ArgumentParser
from ydk.filters import YFilter
from ydk.providers import NetconfServiceProvider, CodecServiceProvider
from ydk.services import CodecService
from ydk.models.cisco_ios_xr import Cisco_IOS_XR_mpls_vpn_oper
class l3vpn_ydk_oper_object():
def __init__(self):
self.l3vpn = Cisco_IOS_XR_mpls_vpn_oper.L3vpn()
self.vrfs = Cisco_IOS_XR_mpls_vpn_oper.L3vpn.Vrfs()
def l3vpn_fun(self, vrf_name, RD, interfaces):
vrf = Cisco_IOS_XR_mpls_vpn_oper.L3vpn.Vrfs.Vrf()
vrf.vrf_name = vrf_name
af = Cisco_IOS_XR_mpls_vpn_oper.L3vpn.Vrfs.Vrf.Af()
af.af_name = Cisco_IOS_XR_mpls_vpn_oper.MplsVpnAfi.ipv4 #MplsVpnAfiEnum.ipv4
af.export_route_policy = 'y'
af.import_route_policy = 'x'
af.saf_name = Cisco_IOS_XR_mpls_vpn_oper.MplsVpnSafi.unicast #MplsVpnSafiEnum.unicast
vrf.af.append(af)
interface1 = Cisco_IOS_XR_mpls_vpn_oper.L3vpn.Vrfs.Vrf.Interface()
interface1.interface_name = interfaces[0]
interface2 = Cisco_IOS_XR_mpls_vpn_oper.L3vpn.Vrfs.Vrf.Interface()
interface2.interface_name = interfaces[1]
vrf.interface.extend([interface2, interface1])
vrf.route_distinguisher = RD
vrf.vrf_name_xr = vrf_name
self.vrfs.vrf.append(vrf)
def return_l3vpn(self):
self.l3vpn.vrfs = self.vrfs
return self.l3vpn
if __name__ == "__main__":
"""Execute main program."""
parser = ArgumentParser()
parser.add_argument("-v", "--verbose", help="print debugging messages",
action="store_true")
args = parser.parse_args()
# log debug messages if verbose argument specified
if args.verbose:
logger = logging.getLogger("ydk")
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
formatter = logging.Formatter(("%(asctime)s - %(name)s - "
"%(levelname)s - %(message)s"))
handler.setFormatter(formatter)
logger.addHandler(handler)
# create codec provider
provider = CodecServiceProvider(type="json")
# create codec service
codec = CodecService()
l3vpn_info = l3vpn_ydk_oper_object() # create object
l3vpn_list = ['vrf_red',"192.168.111.117:41",['gi1/1','gi1/2']]
l3vpn_info.l3vpn_fun(l3vpn_list[0],l3vpn_list[1],l3vpn_list[2])
# encode and print object
print(codec.encode(provider, l3vpn_info.return_l3vpn()))
Logs
{
"Cisco-IOS-XR-mpls-vpn-oper:l3vpn": {
"vrfs": {
"vrf": [
{
"vrf-name": "vrf_red",
"vrf-name-xr": "vrf_red",
"route-distinguisher": "192.168.111.117:41",
"interface": [
{
"interface-name": "gi1/2"
}
],
"af": [
{
"af-name": "ipv4",
"saf-name": "unicast",
"import-route-policy": "x",
"export-route-policy": "y"
}
]
}
]
}
}
}
Note: The list 'interface' contains only one entry. Expected two entries.
System Information
YDK-0.8.0
Reactions are currently unavailable