XML <-> RDB scrambler/descrambler
PRE-REQS:
1. DBI installed and a DBD driver for your database.
a. DBI 1.16
b. DBD::mysql 2.0416
c. MySQL 3.23.39
2. DBIx::Recordset 0.23
3. URI::Escape 3.16
4. XML::DOM 1.29
5. DBIx::Sequence 0.04
6. FreezeThaw 0.41
7. DBIx::DBSchema 0.17
DESCRIPTION
The scripts here will convert a Juniper XML configuration retreived via
the 'get_config.pl' into a set of relational DB table, populate those tables
with data from the XML file, and extract data from those tables & put it
back into XML format. No other functionality is provided.
The SQL output by the 'make_tables.pl' script is pretty generic SQL and
_may_ work with other RDB products, but has been tested to work with MySQL on
FreeBSD 4.2.
You will have to edit the '$DSN' value in 'common.pm' to reflect your
configuration.
Here's the breakdown:
* get_config.pl utiliizes XML JUNOScript to retrieve an XML-encoding of a
given router's configuration.
* make_tables.pl, given an XML file on the command line, will output (to STDOUT)
SQL statements (table creates & inserts) that will allow this XML file
to be stored in a relational DB
* pop_tables.pl, given an XML file on the command line, will populate the
tables with data present in the XML file.
* unpop_tables.pl, given the name of the 'root' XML element, will create
an XML file from the data in the relational database.
Here's how you work it:
1. Run 'get_config.pl' against your favorite Juniper router to obtain an XML
rendering of that router's configuration.
2. Run 'make_tables.pl' & give the XML configuration file to it on the command
line & re-direct STDOUT to 'tables.xml'
3. Suck the tables.xml file into MySQL to create the table structure.
4. Run 'pop_tables.pl' & give the XML configuration file to it on the command
line & the MySQL tables will be populated.
5. Your router configuration is now in your relational DB! Have Fun!
6. Run 'unpop_tables.pl' & and 'jun_configuration' to it on the command line
and re-direct STDOUT to 'tables.out' to see it in XML format again -
suitable to be passed back to the router for re-configuration.
Here's a concrete example:
1. Get an XML-ized Juniper router configuration file:
a. 'perl get_config.pl ssh someuser somepass . myrouter.acme.com'
(this will store that router's configuration as XML in the
current directory as a file called
'myrouter.acme.com.xmlconfig')
2. Create the DB tables:
a. 'perl make_tables.pl myrouter.acme.com.xmlconfig > tables.xml'
3. Set up your MySQL database - say it's called 'JUN_TEST' & import tables:
a. Edit 'DSN' value in 'common.pm' to reflect your database name
b. 'mysqladmin create JUN_TEST'
c. 'mysql JUN_TEST < tables.xml'
4. Populate tables in DB
a. 'perl pop_tables.pl myrouter.acme.com.xmlconfig'
5. Use all of your favorite RDB tools to play with it
6. Re-generate XML from your DB:
a. 'perl unpop_tables.pl jun_configuration > config.xml'