05-09-2017 07:21 AM - edited 03-01-2019 03:48 AM
All,
I’m struggling to get a rest call working for a service.
I consistently get a 400 status code that I’m guessing means my json payload is structured incorrectly.
I initially deployed the service via ncs_cli and used a “Show services …” | display JSON as a template for use in my python script.
That didn’t change the error.
Can pyang convert directly from a source .yang file to a JSON format?
I’m unable to find it documented and don’t find the option using pyang –help.
05-09-2017 07:21 AM
Unfortunately, pyang cannot directly convert to JSON format for now.
Pyangbind might help you. It takes a little time, but It's very useful.
https://github.com/robshakir/pyangbind
Please refer to the below chapter:
Serialising a Data Instance
---
import pyangbind.lib.pybindJSON as pybindJSON
# Dump the entire instance as JSON in PyangBind format
print(pybindJSON.dumps(oclr))
---
This code snippet output JSON format data stratucure.
I am also using the library for automatically documentation from yang.
05-09-2017 07:21 AM
Use PYANG to create REST Doc
mkdir -p ../doc/rest
pyang -f rest-doc --rest-doc-output=docbook --rest-doc-path=/sample --rest-doc-show-description -p $NCS_DIR/src/ncs/yang/:./yang/ yang/*.yang -o ../doc/rest/sample-doc.txt
Use XSLTPROC to create REST XTML GUIDE
xsltproc -o ../doc/rest/sample-doc.html -v docbook.xsl ../doc/rest/sample-doc.txt
05-09-2017 07:22 AM
You can use pyang to create xml payload and then use one of the readily available xml->json tools found on-line.
Or perhaps we can help you determine the problem in the rest call/json payload that you currently have, if you provide the info here.
The show services… approach should result in accurate json payload.
05-09-2017 07:22 AM
Another approach would be to create a service instance using the CLI, then read the instance using a rest call to see the format.
Commas and curlies will kill you….
12-12-2017 02:51 AM
How can I create xml from yang. can you please give some inputs.
I tried with pyang sampl-xml-skeleton, but I am not able to produce the output.
Thanks in advance.
12-12-2017 03:40 AM
Hello Sujani,
Please try "-f yin" option as follows.
cisco@debian:~/NSO-4.5/examples.ncs/service-provider/mpls-vpn/packages/l3vpn/src/yang$ pyang -f yin l3vpn.yang
/home/cisco/NSO-4.5/src/ncs/yang/tailf-ncs-devices.yang:22: warning: imported module tailf-ncs-monitoring not used
<?xml version="1.0" encoding="UTF-8"?>
<module name="l3vpn"
xmlns="urn:ietf:params:xml:ns:yang:yin:1"
xmlns:l3vpn="http://com/example/l3vpn"
xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"
xmlns:tailf="http://tail-f.com/yang/common"
xmlns:ncs="http://tail-f.com/ns/ncs">
<namespace uri="http://com/example/l3vpn"/>
<prefix value="l3vpn"/>
<import module="ietf-inet-types">
<prefix value="inet"/>
</import>
<import module="tailf-common">
<prefix value="tailf"/>
</import>
(snip)
Best regards,
Hiro
12-12-2017 03:52 AM
Hi Hirotsugu,
Thanks for the response.
I need xml format same as service instance xml format for the given yang. I tried using yin and format is different.
Ex:
module l3vpn {
container switch {
leaf access {
}
}
}
Xml fomat:
<switch>
<access>true</access>
</switch>
Regards,
Sujani.
12-12-2017 04:00 AM
Hi Sujani,
I don't think that's possible.
If we generate XML from YANG, that means you'll get a data format without any value.
On the other hand, XML in a service instance has an actual value.
There is no way to complement the value from YANG file.
Let's see your example.
module l3vpn {
container switch {
leaf access {
}
}
}
What you can get here is a container named "switch" and a leaf named "access".
There is no way to find out the leaf "access" has a value "true" as you mentioned.
I think the only way to achieve your goal is to use dry-run outformat=xml via CLI, REST or any NSO APIs.
Best regards,
Hiro
12-12-2017 04:09 AM
yeah, I just need xml (with out any values is also fine) as you mentioned. Here I don't have an option to create service instance and take out format xml from cli or any other approaches.
I tried with sample-xml-skeleton-defaults using pyang. But not working.
12-12-2017 04:21 AM
How about using -f rest-doc
MMALYSZ-M-60YE:yang mmalysz$ pyang -f rest-doc --rest-doc-output=patch sample-cfs.yang
# container /samplecfs:cfs-sample
PATCH /api/running/cfs-sample
Content-Type: application/vnd.yang.data+json
{
"cfs-sample" : {
"sample-service-list" : {
"sample-service-id" : "<<SAMPLE-SERVICE-ID>>",
"sample-service-state" : "...",
"param-1" : "param-1 value"
}
}
}
Then you can use json2xml
12-12-2017 04:54 AM
Yeah, I was able to create JSON using rest doc. From this thread, some one replied saying, we can also generate xml from yang. Tying to find if I can directly generate xml.
But had issues with json2xml. Trying to figure it out.
root@vm--003:~# pip install json2xml
Requirement already satisfied: json2xml in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: xmltodict==0.11.0 in /usr/local/lib/python2.7/dist-packages (from json2xml)
Requirement already satisfied: six==1.11.0 in /usr/local/lib/python2.7/dist-packages (from json2xml)
Requirement already satisfied: dict2xml==1.5 in /usr/local/lib/python2.7/dist-packages (from json2xml)
Requirement already satisfied: requests==2.18.4 in /usr/local/lib/python2.7/dist-packages (from json2xml)
Requirement already satisfied: urllib3<1.23,>=1.21.1 in /usr/local/lib/python2.7/dist-packages (from requests==2.18.4->json2xml)
Requirement already satisfied: idna<2.7,>=2.5 in /usr/local/lib/python2.7/dist-packages (from requests==2.18.4->json2xml)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python2.7/dist-packages (from requests==2.18.4->json2xml)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python2.7/dist-packages (from requests==2.18.4->json2xml)
root@vm-schalaga-003:~# json2xml
json2xml: command not found
07-01-2021 11:45 PM - edited 07-02-2021 02:58 AM
Found following solution
pyang -f jtox -o employee.jtox employee.yang
json2xml -t config -o employee.xml employee.jtox sample_employee.json
07-09-2021 07:24 AM
Give https://gitlab.com/nso-developer/rest-api-explorer a try: create JSON or XML payload automatically by clicking the parameters you want to include.
Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the NSO Developer community: