Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Need help for a 'derived-from-or-self' validation #2342

Open
prmanna opened this issue Jan 30, 2025 · 5 comments
Open

Need help for a 'derived-from-or-self' validation #2342

prmanna opened this issue Jan 30, 2025 · 5 comments
Labels
is:question Issue is actually a question.

Comments

@prmanna
Copy link

prmanna commented Jan 30, 2025

Hi Team,

We are using the yanglint validation for the yang with json example.

For this new change (ie. union)
https://github.com/ietf-ivy-wg/network-inventory-yang/blob/06d546603dbd58f1d6dccb371aa58204bf8a6399/ietf-network-inventory.yang#L334

the yanglint is giving error in this following validation for the example above.
https://github.com/ietf-ivy-wg/network-inventory-yang/blob/06d546603dbd58f1d6dccb371aa58204bf8a6399/ietf-network-inventory.yang#L520

Need your input here.
Thanks,
Prasenjit

@michalvasko
Copy link
Member

Can you please post the exact command you are executing? I have tried validating the data you posted but they contain obvious typos (such as transceivers-module identityref instead of transceiver-module) and so I am getting lots of different errors than the one you mentioned.

@michalvasko michalvasko added the is:question Issue is actually a question. label Jan 31, 2025
@prmanna
Copy link
Author

prmanna commented Feb 1, 2025

./yanglint --path=/prmanna/ietf/libyang/build/yangdb/ -f json tests/ietf-network-inventory.yang yangdb/iana-hardware.yang tests/ports-transceivers-breakouts-examples.json

@michalvasko
Copy link
Member

> yanglint -f json ./ietf-network-inventory.yang /home/vasko/Downloads/yang/standard/ietf/RFC/[email protected] ./ports-transceivers-breakouts-examples.json 
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-1'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-1']/class)
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-1'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-2'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-3'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-3']/class)
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-3'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-4'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-4']/class)
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-4'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-5'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-5']/class)
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-5'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-6'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-6']/class)
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-6'])
libyang err : Node "transceivers-module-specific-info" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-6'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-7'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-7']/class)
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-7'])
libyang err : Node "transceivers-module-specific-info" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-7'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-1'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-3'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-4'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-5'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-6'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-7'])
YANGLINT[E]: Failed to parse input data file "./ports-transceivers-breakouts-examples.json".

@prmanna
Copy link
Author

prmanna commented Feb 18, 2025

sorry for responding late.

Attached all files for the following yangint. Need your help for error.
suspect is in the 'union' in line 335 (of ietf-network-inventory.yang). what could be wrong here?

./yanglint --path=/ws/prmanna-bgl/ietf/libyang/build/yangdb/ -f json tests/ietf-network-inventory.yang yangdb/iana-hardware.yang tests/ports-transceivers-breakouts-examples.json

libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-1'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-1'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-2'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-3'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-3'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-4'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-4'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-5'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-5'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-6'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-6'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-7'])
libyang err : Expecting JSON name/object but container "parent-component-ref" is represented in input data as name/string. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-7'])
libyang err : When condition "derived-from-or-self(../nwi:class,
'nwi:transceivers-module')" not satisfied. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-7']/transceivers-module-specific-info)
libyang err : When condition "derived-from-or-self(../nwi:class,
'nwi:transceivers-module')" not satisfied. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-6']/transceivers-module-specific-info)
YANGLINT[E]: Failed to parse input data file "tests/ports-transceivers-breakouts-examples.json".

Note: git dont allow to attach .yang file, hence added txt extention.
ietf-network-inventory.yang.txt
iana-hardware.yang.txt
ports-transceivers-breakouts-examples.json

@michalvasko
Copy link
Member

michalvasko commented Feb 19, 2025

Using the current libyang devel:

./yanglint -f json /home/vasko/Documents/test/ietf-network-inventory.yang /home/vasko/Documents/test/iana-hardware.yang /home/vasko/Documents/test/ports-transceivers-breakouts-examples.json
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-1'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-1']/class)
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-1'])
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-2'])
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-3'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-3']/class)
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-3'])
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-4'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-4']/class)
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-4'])
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-5'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-5']/class)
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-5'])
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-6'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-6']/class)
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-6'])
libyang err : Node "transceivers-module-specific-info" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-6'])
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='port-7'])
libyang err : Invalid union value "ietf-network-inventory:transceivers-module" - no matching subtype found:
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
    libyang 2 - identityref, version 1: Invalid identityref "ietf-network-inventory:transceivers-module" value - identity not found in module "ietf-network-inventory".
 (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-7']/class)
libyang err : Node "parent-component-ref" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-7'])
libyang err : Node "transceivers-module-specific-info" not found as a child of "component" node. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-7'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-1'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-3'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-4'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-5'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-6'])
libyang err : Mandatory node "class" instance does not exist. (/ietf-network-inventory:network-inventory/network-elements/network-element[ne-id='NE-1']/components/component[component-id='transceivers-module-7'])
YANGLINT[E]: Failed to parse input data file "/home/vasko/Documents/test/ports-transceivers-breakouts-examples.json".

I have not used the --path parameter as it is not needed but I think that may be the issue in your case, a different YANG module is used than that which you attached. The when condition in the attached module is

                "derived-from-or-self(../nwi:class,
                'nwi:transceiver-module')";

but in your error there is

When condition "derived-from-or-self(../nwi:class,
'nwi:transceivers-module')" not satisfied.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
is:question Issue is actually a question.
Projects
None yet
Development

No branches or pull requests

2 participants