[Infrastructures] using IA methodologies to build network element configuration

Brent Chapman Brent@GreatCircle.COM
Mon, 4 Apr 2005 14:36:45 -0800


At 6:40 AM -0400 4/3/05, Daniel Hagerty wrote:
>  > Exactly.  In many cases, you aren't actually "duplicating" info onto
>  > different network devices, but rather deriving specific info for each
>  > device from some common source.
>
>     The difference in our wording is simply a semantic one; we appear
>to speak of the same things, but word them differently.  Such is
>communication...

I wasn't disagreeing with you, merely pointing out that it isn't 
always easy to tell that config info on two different devices is 
(implicitly or explicitly) derived from a common root.

For example, think about a /30 subnet that's used for the IP 
addresses on each end of a point-to-point link, with different 
make/model routers at each end.  The router at one end might be a 
Cisco, and will therefore have something in its config file about a 
particular interface, along the lines of

	interface serial 1/1
		ip address 192.168.155.1 255.255.255.252
		no shutdown

The router at the other end might be a Linux box, with a completely 
different syntax for setting the ip address on the interface, and 
might refer to the address for its end as "192.168.155.2/30".

The key thing is, these are two different references in two different 
syntaxes to two different components (individual IP addresses for 
either end) of the same object (the /30 network for the 
point-to-point link).

What I need is a database that contains, in this trivial example, the 
following items of information:

	Network "private-line-1" is a point-to-point link between 
RtrA and RtrB,
	with subnet 192.168.155.0/30, using PPP, with RtrA at the low-numbered
	address, and RtrB at the high-numbered address.

	RtrA is a Cisco.

	RtrB is a Linux box.

	RtrA interface serial-1/1 connects to network "private-line-1".

	RtrB interface /dev/ttys9 connects to network "private-line-1".

 From those facts (plus various other facts about RtrA and RtrB), I 
should be able to run a Cisco-config-generator program that generates 
the appropriate configuration for RtrA, and a Linux-config-generator 
program that generates the appropriate configuration for RtrB.

Each of those config-generator programs should be able to query the 
database for information like "What interfaces are defined for me? 
What networks are those interfaces attached to?  What are the 
parameters for those networks?", get back answers in a 
vendor-independent form, and then translate those answers into 
whatever form is needed for the type of device in question; for 
example, the database might answer "what is the IP address for my 
interface to network 'private-line-1'?" with "192.168.155.1/30", 
which the Cisco config-generator would translate and use as 
"192.168.155.1 255.255.255.252".  I don't think the config-generator 
programs need to be much more than template manipulators written in 
Python or Perl or something similar.

>     Let me express a much simpler version of the same problem,
>different context (no pun intended).  I'm going to express it a very,
>very particular way, on purpose.
>
>     Consider the two unix programs inetd and xinetd.  They are
>different programs.  They have different configuration files.  And yet
>they do roughly the same thing; from far enough outside a system, you
>can't tell if it's one or the other implementing the functionality of
>the platonic "Internet Super Server" program.
>
>     It would obviously be useful to be able to specify our
>configuration "Internet Super Server" configuration in some uber
>language, and/or convert between the two configuration files.

I don't think that being able to convert between the two 
configuration files is necessary, and it complicates things 
significantly.  In particular, I don't think it's necessary to write 
the "unparser" you describe, to convert from the targeted config file 
back into the "uber language".  I think it's sufficiently useful just 
to be able to _generate_ the targeted config files from the "uber 
language".

>     As Steve will tell us, order really does matter in doing something
>like this.  If we're on a particular host, we have to login to the
>topologically far router first, reconfigure its network in a very
>careful order, and usually type one last key statement that destroys
>our ability to communicate with the router until we reconfigure the
>topologically near router to agree with the state of the far router.
>No amount of reconfiguring the near end router first will ever allow
>us to converge on the desired new state.

Yes, obviously, although I'll point out that having a robust 
out-of-band command-and-control network to all of your key devices 
(via conserver, or something like the Uplogix Envoy network 
management appliance; 
http://www.greatcircle.com/blog/2005/03/07/uplogix_envoy_n.html) goes 
a long way towards making issues like this irrelevant, because it 
keeps you from getting "cut off" from any of the devices.  Such 
networks are a good investment, in my opinion, and not all that 
expensive as a fraction of the total cost of the networks that 
they're used to manage.


-Brent
-- 
Brent Chapman <brent@greatcircle.com> -- Great Circle Associates, Inc.
Specializing in network infrastructure for Silicon Valley since 1989
For info about us and our services, please see http://www.greatcircle.com/
Network Automation blog: http://www.greatcircle.com/blog/network_automation