ssinyagin edited this page Sep 25, 2010 · 15 revisions
Clone this wiki locally

Gerty is a robot character in Duncan Jones' "Moon", with Kevin Spacey's voice :)

Gerty is a codename for a new project that would replace RANCID -- a software package for retrieving router and backing up configurations.

RANCID is a pretty painful piece of code if you start modifying and troubleshooting it. Also adding support for new device types or new command output is quite a frustrating experience.

Gerty requirements and features

  1. well-designed. No code repetitions, clear modular structure, as much as possible configurable. All device commands are defined in user-editable configuration files.
  2. pluggable. Allow to add new modules without changing the distribution source. Additional modules are distributed as plug-ins, independent from the main package.
  3. not Cisco-centric. All vendors are treated equally
  4. device configurations and output from other "show" commands is stored separately. The user is free to define new "show" command reports and store them separately at their wish.
  5. support for multi-line commands (conf t, show something, exit -- quite typical sequence on some non-cisco vendor equipment)
  6. built-in dispatcher for parallel execution
  7. ability to run partial reports (e.g. "show run" every 24 hours, and "show ip ospf neighbors" every 2 hours)
  8. Hooks for automatic output validation
  9. source code published in a Git repository, so that branching and merging is easy and painless
  10. can be used as a gateway for automatic inventory and provisioning

Hierarchical device properties

In RANCID, each device is assigned one device type, and then the behaviour is hardcoded in RANCID executables. As a result, you cannot easily add a new command for execution or slightly modify the commands based on device variant or software version.

Gerty deals with the device definitions in a hierarchical way:

  • each device belongs to one user-definable class
  • it has also a number of user-definable attributes which override the default values from the class definition
  • the class definition inherits its properties from parents: Gerty's pre-defined classes, classes defined in plugins, and user-defined classes.