01-06-2021 07:09 AM
1. Was trying to specify a physical channel for channel ingress config. The assignment is failing with yModelError.
>>> from ydk.models.openconfig import openconfig_terminal_device >>> terminal_device = openconfig_terminal_device.TerminalDevice() >>> channel = terminal_device.logical_channels.Channel() >>> channel_ingress = channel.Ingress() >>> ingress_config = channel_ingress.Config() >>> ingress_config.physical_channel = [1] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/root/ydk_vne/lib/python3.6/site-packages/ydk/models/openconfig/openconfig_terminal_device.py", line 1836, in __setattr__ self._perform_setattr(TerminalDevice.LogicalChannels.Channel.Ingress.Config, ['transceiver', 'physical_channel'], name, value) File "/root/ydk_vne/lib/python3.6/site-packages/ydk/types/py_types.py", line 390, in _perform_setattr _validate_value(self._leafs[name], name, value, self._logger) File "/root/ydk_vne/lib/python3.6/site-packages/ydk/types/py_types.py", line 894, in _validate_value raise YModelError(err_msg) ydk.errors.YModelError: Invalid value [1] for 'physical_channel'. Got type: 'list'. Expected types: 'int'
2. I changed list to int and see this error.
>>> ingress_config.physical_channel = 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/root/ydk_vne/lib/python3.6/site-packages/ydk/models/openconfig/openconfig_terminal_device.py", line 1836, in __setattr__ self._perform_setattr(TerminalDevice.LogicalChannels.Channel.Ingress.Config, ['transceiver', 'physical_channel'], name, value) File "/root/ydk_vne/lib/python3.6/site-packages/ydk/types/py_types.py", line 420, in _perform_setattr super(Entity, self).__setattr__(name, value) File "/usr/lib/python3.6/contextlib.py", line 99, in __exit__ self.gen.throw(type, value, traceback) File "/root/ydk_vne/lib/python3.6/site-packages/ydk/errors/error_handler.py", line 95, in handle_type_error _raise(_exc) File "/root/ydk_vne/lib/python3.6/site-packages/ydk/errors/error_handler.py", line 54, in _raise exec("raise exc from None") File "<string>", line 1, in <module> ydk.errors.YModelError: 'int' object is not iterable >>>
3. Output form a already configured channel for reference.
(Pdb) output.channel['200'].ingress.state <ydk.models.bo_openconfig.openconfig_terminal_device.TerminalDevice.LogicalChannels.Channel.Ingress.State object at 0x7f1ddf34b620> (Pdb) output.channel['200'].ingress.state.physical_channel [1] (Pdb) type(output.channel['200'].ingress.state.physical_channel) <class 'list'>
4. Please let me know the correct way of doing this.
YDK Details:
(ydk_vne) root@ncselastic1:/ws/srchakka-bgl/bo# pip freeze | grep ydk
ydk==0.8.5
ydk-models-bo-openconfig==7.3.1
ydk-models-ietf==0.1.5.post2
ydk-models-openconfig==0.1.8
ydk-service-gnmi==0.4.0.post5
Solved! Go to Solution.
01-12-2021 09:09 AM
The `physical-channel` in the YANG model is a leaf-list. It is represented in the Model API as YLeafList `physical_channel` and therefore it must be handled differently:
>>> ingress_config.physical_channel.append(1)
01-12-2021 09:09 AM
The `physical-channel` in the YANG model is a leaf-list. It is represented in the Model API as YLeafList `physical_channel` and therefore it must be handled differently:
>>> ingress_config.physical_channel.append(1)
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide