forked from tail-f-systems/JNC
-
Notifications
You must be signed in to change notification settings - Fork 1
/
README
200 lines (146 loc) · 8.88 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
JNC
===
JNC (Java NETCONF Client) is the name of both a Java library for NETCONF client
code and a Java output format plugin for pyang, an extensible YANG validator
and converter in python. You need an installation of pyang to use the JNC
plugin. Get it here: http://code.google.com/p/pyang/
The JNC plugin can be used to generate Java class hierarchies from YANG data
models. Together with the JNC library, these generated Java classes may be used
as the foundation for a NETCONF client (AKA manager) written in Java. The JNC
library is distributed along with the JNC plugin script.
JNC uses Ganymed SSH-2 to communicate with NETCONF servers/agents, you may get
it from here: http://www.cleondris.ch/opensource/ssh2/ or by using aptitude
(http://manpages.ubuntu.com/manpages/lucid/man8/aptitude.8.html):
sudo aptitude install libganymed-ssh2-java
This readme proposes two different ways of getting started. If you're running
Linux and don't want to use eclipse, feel free to skip the following section.
----- Get started using eclipse:
Make sure you have pyang installed, and that jnc.py is in the plugins directory
of your installation. For instructions on how to use pyang, please see the
pyang man page.
http://www.yang-central.org/twiki/pub/Main/YangTools/pyang.1.html
Create an eclipse project for JNC: open the "New Java Project" dialog, uncheck
the "Use default location" checkbox and choose the jnc folder as the location
instead, then Finish.
Now you need to add ganymed ssh2 to the project. Right click on the project
folder in the Package Explorer, choose Build Path->Add External Archives and
select your ganymed ssh2 Jar file.
If you don't want to run the tests, just delete the test source folder.
Otherwise, you need to add JUnit 4 to the build path. This may be done by
opening one of the test files, placing the marker on one of the lines which
have errors, pressing Ctrl+1, choosing "Fix project setup..." and then OK when
eclipse proposes to add the library. You should now be able to run the tests
by right clicking on the test source folder and selecting Run As -> JUnit test.
The next step is to generate some Java classes using the JNC pyang plugin and
write a client that uses them together with the JNC library. Please see the
user manual for instructions on how to do this.
----- Get started in Linux (without eclipse):
Add the JNC plugin to your existing pyang installation. This may be done in one
of the following three ways:
1. Add jnc.py to pyang/plugins in your pyang installation,
2. Add the location of jnc.py to the $PYANG_PLUGINPATH environment variable, or
3. Use the --plugindir option of pyang each time you want to use JNC
If more than one of these approaches is used, you will end up with optparse
conflicts so please choose one and stick with it. From here on, we will assume
that you went for (1), but using (2) or (3) should be anologous.
JNC can be used to generate Java classes from a YANG file of your choice.
There are a collection of yang files in the 'examples/yang' directory. To
generate classes for a YANG file, open a terminal, change directory to where
you want the classes to be generated, launch pyang with the jnc format,
specifying the output folder and the yang model file.
For example, to generate the classes for simple.yang to the 'examples'
directory with base package gen.simple, type:
$ pyang -f jnc --jnc-output src/gen/simple yang/simple.yang
There should now be a newly generated 'src' folder in the current directory,
containing a directory structure with the generated classes. Note that 'src' is
special treated so that it does not become part of the package names of the
generated classes.
To get more detailed information on how the generation proceeds the --jnc-debug
or --jnc-verbose options can be used. Rerunning JNC silently overwrites any old
classes in the output directory.
To actually use the generated classes, you need to compile Java client code
using the JNC library. It might be convenient to make a Jar file with the JNC
library for this purpose. There are several ways to do this:
1. Run the ant script located in the jnc directory: ant clean all
2. Manually: Open a terminal, change directory to jnc, compile the classes with
javac -d bin -sourcepath src src/com/tailf/jnc/*.java
Now change directory to bin and generate the Jar file with
jar cvf ../lib/JNC.jar *
3. Set up a project in eclipse and export the Jar (see previous section).
If the ant script fails to run, the most probable reason is that ganymed ssh2
is not installed in the expected way. Check that the ganymed.dir variable
points to the directory containing your ganymed ssh2 Jar file, and that the
classpath in the compile target corresponds to the correct build.
To run the JNC tests, see the previous section or run them with JUnit 4 from
commandline if you so prefer. The tests resides in the jnc/test folder.
Please see the user manual for tutorials and further information on how to
write a client and how to run it against a server using JNC.
----- High level description
The different types of generated files are:
Root class -- This class has the name of the prefix of the YANG module, and
contains fields with the prefix and namespace as well as methods
that enables the JNC library to use the other generated classes
when interacting with a NETCONF server.
YangElement -- Each YangElement corresponds to a container or a list in the
YANG model. They represent tree nodes of a configuration and
provides methods to modify the configuration in accordance with
the YANG model that they were generated from.
The top-level containers or lists in the YANG model will have
their corresponding YangElement classes generated in the output
directory together with the root class. Their respective
subcontainers and sublists are generated in subpackages with
names corresponding to the name of the parent container or list.
YangTypes -- For each derived type in the YANG model, a class is generated to
the root of the output directory. The derived type may either
extend another derived type class, or the JNC type class
corresponding to a built-in YANG type.
Packageinfo -- For each package in the generated Java class hierarchy, a
package-info.java file is generated, which can be useful when
generating javadoc for the hierarchy.
Schema file -- If enabled, an XML file containing structured information about
the generated Java classes is generated. It contains tagpaths,
namespace, primitive-type and other useful meta-information.
The typical use case for these classes is as part of a JAVA network management
system (EMS), to enable retrieval and/or storing of configurations on NETCONF
agents/servers with specific capabilities.
----- Milestones
2012-06-04
Emil starts working at Tail-f and reads up on the NETCONF RFC 6241 and YANG RFC
6020. You should too if you intend to contribute to this project!
2012-06-12
JPyang is born as a few lines of python code that integrates with pyang are
written.
2012-06-20
Empty initial commit of the repository. It will contain the source code for
JPyang once it has been decided that it will be open source rather than
proprietary to tail-f. The plugin itself is just the single jpyang.py script.
2012-07-06
New tests for the INM and ConfM library classes are written.
2012-07-13
Work on a new structure for the JPyang code begins, using classes to represent
methods and organize functionality.
2012-07-16
Unit tests for JPyang functions and class methods are added to pyang.
1012-07-27
The ConfM.xs classes are replaced by new internal representations of the YANG
built in classes.
2012-08-03
The INM and ConfM libraries are merged into the new JNC library, with better
support for YANG.
2012-08-16
JPyang is now fully object oriented, with method generator classes for all
relevant statements. This means that the generated classes should import all
JNC, java.util, java.math and generated classes that they use, and no other.
2012-08-20
The JPyang project repository is cleaned up, removing all non-comprehensible
files and adding a new README and ant build files.
2012-08-23 Meeting at Tail-f about the future of the project. The marketing and
product management VP seems inclined to release as open source once the most
basic functionality has been tested and the documentation is complete.
2012-08-28 JPyang is renamed to JNC. So now there is both a JNC library and a
JNC pyang plugin.
2012-08-29 The GitHub repository is renamed to JNC and its readme is updated.
2012-09-20 Support for notifications added, and there is only one thing
remaining until it is possible to generate fully compliant junos.yang classes!
2012-10-17 JNC is finally made open source! There are some changes remaining
before this will be publicly announced however.